SQL Server 2000 데이터베이스를 2008 R2로 업그레이드하고 새로운 기능 사용


23

최근에 SQL Server 2000 데이터베이스를 2008 R2로 업그레이드했습니다.


내가 한 일은 :

  1. 오래된 컴퓨터에서 SQL Server 2000 (Express) 서비스 종료
  2. 데이터 파일 ( mydatabase.mdfmydatabase.ldf )을 새 시스템으로 이동하십시오.
  3. SQL Server Management Studio 2008을 실행하십시오.
  4. 로컬 데이터베이스 엔진에 연결
  5. 데이터베이스에 데이터 파일을 첨부하십시오.
  6. 데이터베이스의 호환성 수준을 SQL 2008 (100)로 변경하십시오.

질문 : 마이그레이션을 완료하려면 어떻게해야합니까?

나는 :

  1. 체크섬 및 전체 복구 모델과 같은 새로운 기능 사용
  2. 이 데이터베이스를 SQL 2008 R2에서 작성된 그대로 작성하십시오.
  3. 이 데이터베이스를 완전히 호환 가능하고 정확하며 새로운 SQL 2008 R2 데이터베이스 엔진에 적합하게 만드십시오.

다른 말로하면 : 기존 SQL 2000 데이터베이스를 새 2008 R2 데이터베이스로 올 바르고 완벽하게 변환하는 방법을 알고 싶습니다.


인터넷에서 많은 혼란을 일으키는 많은 사이트를 발견했기 때문에이 질문을하고 있습니다. 일부는 색인을 다시 작성해야한다고 말하고 다른 사이트는 다른 일을해야한다고 말합니다. 이제 나는 아무것도 모르므로 경험이 풍부한 사람의 의견과 명확하고 단계별 지침을 듣고 싶습니다. 나는 아주 작은 회사에서 일하고 있고, 나는 혼자서 일을 망치고 싶지 않습니다.


선생님, 저는 당신의 대답에 정말 감명 받았습니다. 그렇게 많이 기대하지 않았습니다.


그래서 몇 가지 의견 :

  1. 데이터베이스가 현재 프로덕션 상태입니다. 내가 말했듯이, 그것은 내가 첫 번째 게시물에 desribed 같은 방법을 deattach가 부착하여 업그레이드 된 및 MSDN에 설명 : http://msdn.microsoft.com/en-us/library/ms189625.aspx 그것은 신속하게 수행해야했다, 그래서 그렇게해야했습니다. 그것이 얼마나 부적절한 지 잊고 현재 상황에 초점을 맞추자.

  2. 여기서 사용자 / 권한은 문제가되지 않습니다. 권한이 거의없고 권한도 간단합니다.

  3. 데이터베이스를 사용하는 응용 프로그램은 2012 년까지 SQL 2000과 호환되므로 문제가되지 않습니다.

  4. 데이터베이스 파일 (MDF)은 크지 않으며 약 1GB입니다.


몇 가지 질문이 더 있습니다 :

  1. 백업 / 복원 방법을 사용하는 것이 좋지만 위에서 설명한대로 했으므로 지금 문제가 발생할 수 있습니까? 모든 문제없이 작동했습니다.

  2. 체크섬 및 전체 복구 모델 정보 : SQL 2000에서는 사용할 수 없었으며 지금 사용하고 싶습니다. 내가해야 할 유일한 것은 데이터베이스 속성에서 해당 옵션을 활성화하는 것입니까? 나는 어딘가에서 충분하지 않다는 것을 읽었으며 색인이나 무언가를 다시 만들어야합니다. 나는 정말로 모른다, 나는 단지 묻는다.

  3. 이 데이터베이스를 SQL 2012로 마이그레이션하기 위해 사전 페어링을하고 있습니다. 그래서 먼저 SQL 2000에서 2008 R2로, 이제는 2008 R2에서 2012로 될 것입니다. SQL 2012). 따라서 귀하의 가이드를 따라야한다는 것을 이해합니다. 2008 R2에서 백업하고 2012 년에 복원 한 다음 나머지 팁을 수행하십시오.

  4. 백업 / 복원 방법을 설명해주세요. SQL 쿼리에 데이터베이스를 덤프 한 다음 많은 쿼리를 실행하여 복원하는 것과 같은가? 이 방법으로 데이터베이스가 "조각 모음"됩니까? 그렇지 않은 경우 수동으로 조각 모음 / 최적화하는 방법은 무엇입니까?

  5. 수년 동안 SQL 2000 Express를 사용하면서 (관리 인터페이스 없음), 단순히 엔진을 중지하고 DATA 디렉토리를 RAR하여 백업을 수행했습니다. 지금은 SQL 2008과 마찬가지로 Management Studio에서 백업 기능을 사용하는 것보다 낫지 않습니까?

  6. 트랜잭션 로그 백업이 빈번한 전체 복구 모드 -트랜잭션 로그는 어디에 저장됩니까? LDF 파일입니까? 내가 어떻게 제대로 백업 영혼?


나는 내 질문이 어리석게 들릴지 모른다. 나는 전문 데이터베이스 관리자는 아니지만 데이터베이스 엔진 업그레이드와 같은 "하드 코어"작업을 수행 할 수있는 유일한 사람이다. 또한 귀하의 지식이 나와 같은 다른 사람들에게 많은 도움이 될 것이라고 확신합니다.

귀하의 시간과 지식에 대해 대단히 감사합니다. 정말 감사합니다.


2
다음에는 SQL Server를 종료하고 파일을 이동하고 첨부하는 대신 백업 / 복원을 권장합니다. 너무나 많은 것들이 잘못 될 수 있습니다. 긍정적 인면에서, 마침내 14 살짜리 데이터베이스 소프트웨어를 버리는 것을 축하합니다!
Aaron Bertrand

답변:


37

가장 먼저 해야 할 일은 SQL Server 2000 데이터베이스 에서 업그레이드 관리자 를 실행하여 보고 된 모든 문제를 해결하는 것입니다.

모범 사례로 SQL Server 2000 레거시 데이터베이스에서 업그레이드 관리자 도구를 사용하고 분석을 위해 추적 파일을 업그레이드 관리자 도구로 가져옵니다. 추적 파일을 사용하면 업그레이드 관리자가 응용 프로그램에 포함 된 TSQL과 같은 간단한 데이터베이스 검색에 표시되지 않을 수있는 문제를 감지 할 수 있습니다. 일반적인 시간 동안 SQL Server 2000 서버에서 SQL 프로파일 러를 사용하여 TSQL의 추적을 캡처하고 업그레이드 관리자를 사용하여 이러한 추적을 분석 할 수 있습니다.

나머지 단계는 다음과 같습니다.

마이그레이션 당일 :

  1. sp_help_revlogin을 사용하여 2000 서버에서 로그인을 스크립트하십시오 .
  2. SQL 2000 서버에서 작업 및 링크 된 서버를 스크립트로 작성하십시오.
  3. 웹 서버가 2000 서버에 연결하는 것을 중지하십시오. 응용 프로그램이 2000 서버에 연결되어 있지 않은지 확인하십시오.
  4. 데이터베이스를 백업 하고 대상 SQL 2008 R2 서버에서 복원 하십시오.
  5. 2008 R2 서버에서 백업이 복원되면 2008 R2 서버에서 sp_help_revlogin의 출력을 실행하여 로그인을 다시 작성하십시오.
  6. 고아 사용자 (있는 경우)를 동기화 하고 새 서버에서 SQL 에이전트 작업 및 연결된 서버를 다시 만듭니다.
  7. 복원 된 데이터베이스의 호환성 수준을 100으로 변경하십시오.
  8. all_errormsgs 및 data_purity 옵션이 설정된 dbcc checkdb : DBCC CHECKDB ('<db_name_goes_here>' ) WITH ALL_ERRORMSGS,NO_INFOMSGS, DATA_PURITY
  9. 복원 된 데이터베이스에서 DBCC UPDATEUSAGE를 실행하십시오. DBCC UPDATEUSAGE('database_name') WITH COUNT_ROWS
  10. 전체 스캔으로 모든 테이블의 통계를 업데이트하십시오. Update Statistics table_name with FULLSCAN
  11. 선택 사항 : 조각화 수준을 확인하고 조각화 수준에 따라 모든 인덱스의 재구성 / 재 구축을 실행하십시오. Ola의 스크립트를 사용할 수 있습니다 .
  12. 를 사용하여 모든 SP를 다시 컴파일 sp_recompile 'procedureName'
  13. 보기 새로 고침 SP_REFRESHVIEW view_name
  14. 데이터베이스 옵션 : page verify를 CHECKSUM으로 변경하십시오.
  15. 복구 모델 (sql 2000과 다른 경우)을 FULL로 변경하십시오. 전체 복구 모델로 변경하면 트랜잭션 로그 백업을 자주 수행해야합니다. 이를 통해 특정 시점을 복구하고 T-Log를 부 풀리지 않게 할 수 있습니다.
  16. SQL Server 2005 이상에서는 데이터베이스 메일 이 도입되었습니다. 따라서 SQLMail에서 데이터베이스 메일로 마이그레이션해야합니다.

    USE [master]
    GO
    sp_configure 'show advanced options',1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    sp_configure 'Database Mail XPs',1
    GO
    RECONFIGURE 
    GO
    

또한 복제가 있으면 재설정해야합니다. logshipping 또는 Mirroring (2005 년에 새로 도입되었지만 2012 년에 감가 상각)과 같은 DR이있는 경우 재설정해야합니다.

이전 DTS 패키지는 C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTSMigrationWizard.exe(명령 줄) 또는 패키지 마이그레이션 마법사를 사용하여 SSIS로 마이그레이션해야합니다 .

또한 /dba//a/36701/8783에있는 스크립트를 사용할 수 있습니다 . 분리 / 연결 방법 을 사용하지만 BACKUP / RESTORE 방법 을 사용하는 것이 좋습니다 . 이에 따라 스크립트를 변경하십시오.


참고로 :

  • 새 서버 에서 인스턴트 파일 초기화를 켜십시오.
  • 크기가 같은 여러 tempdb 데이터 파일 이 있어야 합니다.
  • 추적 플래그 사용 1118
  • 최대 및 최소 메모리를 올바르게 구성하십시오. 특히 Max memory는 기본값과 다릅니다.
  • MAXDOP 설정을 올바르게 조정하십시오. 자세한 내용은 /dba//a/36578/8783 을 참조하십시오.
  • Brent Ozar의 sp_Blitz 를 설치하는 것이 가장 좋습니다 . 이를 실행하고보고 된 중요하고 우선 순위가 높은 문제를 해결하십시오.
  • kendalvandyke에서 SQL Power Doc 을 사용할 수도 있습니다. SQL Power DocSQL Server 2000 에서 2012 까지의 모든 버전의 SQL Server와 Windows Server 2012 및 Windows를 통해 Windows 2000 및 Windows XP의 모든 버전의 Windows Server 및 소비자 Windows 운영 체제에서 작동합니다. 8. 업그레이드 계획 에도 유용 합니다. 인스턴스에서 사용중인 숨겨진 기능을 확인하십시오.
  • 임시 작업 및 기본 백업 압축 옵션에 최적화를 활성화합니다.

당신의 질문을 해결할 수 있습니다 ...

마이그레이션을 완료하려면 어떻게해야합니까?

내 대답을 참조하십시오. 마이그레이션 계획을 올바르게 수립하는 데 도움이됩니다. 비즈니스 사용자의 적절한 응용 프로그램 테스트와 함께 UAT (비 프로덕션)로 마이그레이션 계획을 항상 테스트하십시오.

체크섬 및 전체 복구 모델과 같은 새로운 기능을 사용하십시오.

CHECKSUMSQL Server 2005 이상에서 새로 추가되었습니다. 위에서 설명한 마이그레이션 단계의 일부로 다루었습니다.

full recovery model새로운 것이 아닙니다. 비즈니스 유형에 따라 다르며 재해시 손실 될 수있는 데이터 양에 따라 다릅니다.

트랜잭션 로그 백업이 빈번한 전체 복구 모드를 사용하면 데이터 손실량을 줄임으로써 특정 시점으로 복원 할 수 있습니다.

이 데이터베이스를 SQL Server 2008 R2에서 생성 된 그대로 정확하게 만드십시오.

이 데이터베이스는 완벽하게 호환되고 정확하며 새로운 SQL 2008 R2 데이터베이스 엔진에 완벽하게 적합합니다.

이것을 완전히 이해하지 마십시오! 그러나 위의 마이그레이션 단계가 도움이 될 것입니다. 데이터베이스를 복원하고 100위의 단계와 함께 호환성 수준 10 을 변경하면됩니다 .

이전 SQL Server 2000 데이터베이스를 새 2008 R2 데이터베이스로 정확하고 완벽하게 변환하는 방법을 알고 싶습니다. 모든 것이 올바르게 완료되고 모든 새로운 기능에 만족합니다.

애플리케이션 코드도 변경해야하므로이 점에주의해야합니다. 응용 프로그램 코드가 SQL Server 2008 R2의 새로운 기능을 사용하도록 변경되면 UAT 또는 DEV 환경에서 응용 프로그램의 전체 회귀 테스트를 완전히 수행 한 경우 문제가 발생하지 않습니다. 이렇게하면 PROD에서 실제 마이그레이션을 수행 할 때 최상의 신뢰를 얻을 수 있습니다.


참고 : 위의 단계는 내가 기억할 수있는 단계이며 아무것도 빠지지 않을 것이라고 확신합니다. 내가 놓친 부분이 있으면이 사이트에 다른 전문가 나 다른 전문가를 추가합니다. 자유롭게 추가하십시오!

실제 마이그레이션 중 놀라움을 피하기 위해 위에서 설명한 모든 것이 NON PRODUCTION 환경에서 먼저 재생되어야합니다.

----------

몇 가지 질문이 더 있습니다 :

백업 / 복원 방법을 사용하는 것이 좋지만 위에서 설명한대로 했으므로 지금 문제가 발생할 수 있습니까? 모든 문제없이 작동했습니다.

모든 것이 제대로 작동하고 데이터베이스를 연결할 수 있다면 NO 는 아무 문제가 없습니다. 분리 / 연결 대 백업 / 복원은 데이터베이스를 다른 장소로 이동하는 방법에 대한 방법 일뿐입니다. 단지 FYI .. 백업 / 복원 은 문제가 발생하는 것처럼 (최악의 경우)보다 안전하고 신뢰할 수 있으며 데이터베이스를 복원하고 복구 할 백업이 있어야합니다.

체크섬 및 전체 복구 모델 정보 : SQL Server 2000에서는 사용할 수 없었으며 지금 사용하고 싶습니다. 내가해야 할 유일한 것은 데이터베이스 속성에서 해당 옵션을 활성화하는 것입니까? 나는 어딘가에서 충분하지 않다는 것을 읽었으며 색인이나 무언가를 다시 만들어야합니다. 나는 정말로 모른다, 나는 단지 묻는다.

내가 말했듯이, 체크섬은 버전 2005 이상에서 새로운 것입니다. SQL Server가 특히 I / O로 인한 페이지 손상을 감지하는 메커니즘입니다. 자세한 내용은 여기 내 답변 을 참조하십시오.

CHECKSUM을 활성화하고 복구 모델을 FULL로 변경하려면 아래 T-SQL 코드를 사용하여 수행 할 수 있습니다.

USE master;
GO
ALTER DATABASE [your_database_name] -- change this !!
SET RECOVERY FULL, PAGE_VERIFY CHECKSUM;
GO

참고 : 데이터베이스 옵션을 설정하면 2008R2에서 2012로 마이그레이션 할 때 유지됩니다.

이 데이터베이스를 SQL Server 2012로 마이그레이션 할 준비를하고 있습니다. 따라서 처음에는 2000 년에서 2008 년까지 R2였으며 이제는 2008 년 R2에서 2012 년까지입니다 (SQL에서 2000 개의 데이터베이스를 지원하지 않기 때문에 직접 수행 할 수 없었습니다) 서버 2012). 따라서 귀하의 가이드를 따라야한다는 것을 이해합니다. 2008 R2에서 백업하고 2012 년에 복원 한 다음 나머지 팁을 수행하십시오.

예, 부탁합니다. 내가 말했듯이, 백업 복원은 적절한 이유가없는 한 선호되는 방법입니다.

백업 / 복원 방법을 설명해주세요. SQL 쿼리에 데이터베이스를 덤프 한 다음 많은 쿼리를 실행하여 복원하는 것과 같은가? 이 방법으로 데이터베이스가 "조각 모음"됩니까? 그렇지 않은 경우 수동으로 조각 모음 / 최적화하는 방법은 무엇입니까?

백업 / 복원은 ... Sybase, Oracle 또는 아마도 MySQL에서 사용되는 덤프 및로드와 유사합니다. 그것은 단지 SQL Server가 그것을 .. 백업 / 복원이라고 부릅니다.

필독 : Paul Randall의 SQL Server 백업 이해 .

간단한 구문 (전체 구문은 BOL 참조 ) :

backup database database_name
to disk = 'D:\backup\database_name_full.bak'
with init, stats =10

그런 다음 대상 서버에서 다음과 같이 복원 할 수 있습니다.

-대상의 디스크 레이아웃이 원본 서버의 디스크 레이아웃과 일치하지 않는다고 가정

restore database database_name
from disk = 'D:\backup\database_name_full.bak'
move 'logical_data_fileName' to 'physical_path\database_name.mdf'
move 'logical_log_fileName' to 'physical_path\database_name_log.ldf'
with recovery, stats = 10

-대상의 디스크 레이아웃이 소스 서버의 디스크 레이아웃과 일치한다고 가정

restore database database_name
from disk = 'D:\backup\database_name_full.bak'
with recovery, stats = 10

이 방법으로 데이터베이스가 "조각 모음"됩니까? 그렇지 않은 경우 수동으로 조각 모음 / 최적화하는 방법은 무엇입니까?

백업 / 복원은 데이터베이스 조각 모음을 수행하지 않습니다. 조각화 수준에 따라 Alter Index Reorganize 또는 Rebuild를 사용해야합니다.

SQL Server를 처음 사용하기 때문에 Ola Hallengren 's를 사용하는 것이 좋습니다.

수년 동안 SQL Server 2000 Express를 사용하면서 (관리 인터페이스 없음) 단순히 엔진을 중지하고 DATA 디렉토리를 RAR하여 백업을 수행했습니다. 지금은 SQL Server 2008에서 Management Studio에서 백업 기능을 사용하는 것보다 낫지 않습니까?

엔진 정지는 백업을하기 위해 할 수있는 더 나쁜 일입니다 !!

내가 언급 한 백업에 대한 Paul의 링크와 Ola의 스크립트 사용을 읽으십시오. Microsoft는 자동 백업을 수행하는 스크립트가 포함 된 기술 자료 문서를 제공 합니다. SQL Server Express에서 SQL Server 데이터베이스 백업을 예약하고 자동화하는 방법

트랜잭션 로그 백업이 빈번한 전체 복구 모드 -트랜잭션 로그는 어디에 저장됩니까? LDF 파일입니까? 내가 어떻게 제대로 백업 영혼?

모든 SQL Server 데이터베이스에는 각 트랜잭션에서 수행 한 모든 트랜잭션 및 데이터베이스 수정 사항을 기록하는 로그가 있습니다. 트랜잭션 로그는 모든 데이터베이스의 중요한 구성 요소입니다.

트랜잭션 로그의 일반적인 명명 규칙 확장명은 '.LDF'이지만 아무 것도 될 수 없습니다.

나는 이것에 대해 더 많이 쓰지 않을 것입니다. 참조 트랜잭션 로그 관리 및 내 대답은 여기가 아니라 우수한 링크가 있습니다.


편집 : 2016 년 8 월 24 일 .. 이것은 미래 독자를 도울 것입니다 :

전체 인스턴스를 한 버전에서 다른 버전으로 마이그레이션하는 경우 PowerShell 기반 솔루션을 사용 하는 것이 좋습니다.Start-SqlMigration

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.