방법: 분리 및 연결을 사용하여 데이터베이스 업그레이드(Transact-SQL)
보안 정보 |
---|
알 수 없거나 신뢰할 수 없는 출처의 데이터베이스는 연결 또는 복원하지 않는 것이 좋습니다. 이러한 데이터베이스에 포함된 악성 코드가 의도하지 않은 Transact-SQL 코드를 실행하거나 스키마 또는 물리적 데이터베이스 구조를 수정하여 오류가 발생할 수 있습니다. 알 수 없거나 신뢰할 수 없는 출처의 데이터베이스를 사용하기 전에 프로덕션 서버가 아닌 서버에서 해당 데이터베이스에 대해 DBCC CHECKDB를 실행하고 저장 프로시저 또는 다른 사용자 정의 코드 같은 데이터베이스의 코드도 검사하십시오. |
SQL Server 2008에서 분리 및 연결 작업을 사용하여 사용자 데이터베이스를 SQL Server 2000 또는 SQL Server 2005에서 업그레이드할 수 있습니다. SQL Server 2005 또는 SQL Server 2000 데이터베이스를 SQL Server 2008에 연결하면 데이터베이스를 바로 사용할 수 있으며 자동으로 업그레이드됩니다.
그러나 다음과 같은 제한 사항이 있습니다.
SQL Server 2000 또는 SQL Server 2005를 사용하여 만든 master, model 또는 msdb 데이터베이스의 복사본은 연결할 수 없습니다.
분리되지 않고 복사된 복제 데이터베이스를 연결하는 경우에는 다음을 수행해야 합니다.
동일한 서버 인스턴스의 업그레이드된 버전에 데이터베이스를 연결하는 경우 연결 작업이 완료된 후 sp_vupgrade_replication을 실행하여 복제를 업그레이드해야 합니다. 자세한 내용은 sp_vupgrade_replication(Transact-SQL)를 참조하십시오.
버전에 관계없이 다른 서버 인스턴스에 데이터베이스를 연결하는 경우 연결 작업이 완료된 후 sp_removedbreplication을 실행하여 복제를 제거해야 합니다. 자세한 내용은 sp_removedbreplication(Transact-SQL)을 참조하십시오.
SQL Server 2000에서 SQL Server 2008로 업그레이드되는 데이터베이스에 대해 APPLY, PIVOT, TABLESAMPLE 또는 UNPIVOT 키워드를 사용할 때 데이터베이스의 호환성 수준은 100으로 설정해야 합니다. 데이터베이스 호환성 수준을 설정하려면 sp_dbcmptlevel(Transact-SQL)을 참조하십시오.
중요 SQL Server 2000 서비스 팩 3(SP3) 및 SQL Server 최신 버전에서의 연결 및 분리는 cross db ownership chaining 옵션을 0으로 설정하여 데이터베이스에 대한 데이터베이스 간 소유권 체인을 해제합니다. 체인 설정 방법은 cross db ownership chaining 옵션을 참조하십시오.
전체 텍스트 인덱스 업그레이드 옵션
[!참고]
SQL Server 2005 또는 SQL Server 2000 데이터베이스를 SQL Server 2008에 연결하면 데이터베이스를 바로 사용할 수 있으며 자동으로 업그레이드됩니다. 데이터베이스에 전체 텍스트 인덱스가 있는 경우 업그레이드 프로세스는 upgrade_option 서버 속성의 설정에 따라 인덱스를 가져오거나, 다시 설정하거나, 다시 작성합니다. 업그레이드 옵션이 가져오기(upgrade_option = 2) 또는 다시 작성(upgrade_option = 0)으로 설정되어 있는 경우 업그레이드하는 동안 전체 텍스트 인덱스를 사용할 수 없습니다. 인덱싱되는 데이터 양에 따라 가져오기 작업은 몇 시간씩 걸릴 수 있으며 다시 작성 작업은 10배 정도 더 걸릴 수 있습니다. 업그레이드 옵션이 가져오기로 설정되어 있으면 전체 텍스트 카탈로그를 사용할 수 없는 경우 관련된 전체 텍스트 인덱스가 다시 작성됩니다. upgrade_option 서버 속성의 설정을 변경하려면 sp_fulltext_service를 사용합니다.
절차
분리 및 연결을 사용하여 데이터베이스를 업그레이드하려면
sp_detach_db 저장 프로시저를 사용하여 SQL Server 7.0 또는 SQL Server 2000 인스턴스에서 데이터베이스를 분리합니다.
자세한 내용은 해당 SQL Server 버전의 SQL Server 온라인 설명서를 참조하십시오.
[!참고]
SQL Server 2005에서 이 저장 프로시저에는 새로운 옵션이 있습니다. 자세한 내용은 sp_detach_db(Transact-SQL)를 참조하십시오.
필요에 따라 분리된 데이터베이스 파일 및 로그 파일을 이동합니다.
새 로그 파일을 만들려는 경우에도 데이터 파일뿐만 아니라 로그 파일도 이동해야 합니다. 경우에 따라 데이터베이스를 다시 연결하려면 기존 로그 파일이 필요합니다. 따라서 데이터베이스가 분리된 로그 파일 없이도 성공적으로 연결될 때까지 모든 분리된 로그 파일을 항상 보존하십시오.
[!참고]
로그 파일을 지정하지 않고 데이터베이스를 연결할 경우 연결 작업은 원래 위치에서 로그 파일을 검색합니다. 로그 파일의 원본이 여전히 원래 위치에 존재하는 경우 해당 복사본이 연결됩니다. 원래 로그 파일을 사용하지 않으려면 새 로그 파일의 경로를 지정하거나 로그 파일의 원본을 새 위치로 복사한 후 제거합니다.
FOR ATTACH 또는 FOR ATTACH_REBUILD_LOG 옵션과 함께 CREATE DATABASE 문을 사용하여 복사한 파일을 SQL Server 2005 인스턴스에 연결합니다.
[!참고]
개체 탐색기를 사용하여 SQL Server 2005 데이터베이스를 연결하는 방법은 방법: 데이터베이스 연결(SQL Server Management Studio)을 참조하십시오.
업그레이드된 데이터베이스에서 DBCC UPDATEUSAGE를 실행하는 것이 좋습니다.
이전 버전의 SQL Server에서는 테이블 및 인덱스의 행 및 페이지 개수의 값이 정확하지 않게 계산될 수 있습니다. 따라서 SQL Server 2005 이전 버전에서 만든 데이터베이스에는 올바르지 않은 개수가 포함될 수 있으므로 데이터베이스를 SQL Server 2005로 업그레이드한 후에는 DBCC UPDATEUSAGE를 실행하여 잘못된 개수를 모두 수정하는 것이 좋습니다. 이 DBCC 문은 테이블이나 인덱스의 각 파티션에 대한 행, 사용된 페이지, 예약된 페이지, 리프 페이지 및 데이터 페이지 수를 수정합니다. 자세한 내용은 DBCC UPDATEUSAGE(Transact-SQL)를 참조하십시오.
데이터베이스를 이동하지 않고 복사하는 경우 필요에 따라 sp_attach_db 또는 sp_attach_single_file_db 저장 프로시저를 사용하여 SQL Server 7.0 또는 SQL Server 2000 인스턴스에서 원래 데이터베이스를 다시 연결할 수 있습니다.
자세한 내용은 해당 버전의 SQL Server 온라인 설명서를 참조하십시오.
업그레이드 후 데이터베이스 호환성 수준
업그레이드 후에는 tempdb, model, msdb 및 Resource 데이터베이스의 호환성 수준이 100으로 설정됩니다. master 시스템 데이터베이스는 업그레이드 이전의 호환성 수준이 80 미만이 아니었다면 이전 호환성 수준으로 유지됩니다. master 데이터베이스의 호환성 수준이 업그레이드 이전에 80 미만이었다면 업그레이드 후에는 80으로 설정됩니다.
사용자 데이터베이스의 호환성 수준이 업그레이드 이전에 80 또는 90이었다면 업그레이드 후에도 동일하게 유지됩니다. 업그레이드 이전에 호환성 수준이 70 이하였다면 업그레이드된 데이터베이스에서는 SQL Server 2008에서 지원되는 가장 낮은 호환성 수준인 80으로 설정됩니다.
[!참고]
새 사용자 데이터베이스는 model 데이터베이스의 호환성 수준을 상속합니다.
업그레이드한 서버 인스턴스의 메타데이터 관리
데이터베이스를 다른 서버 인스턴스에 연결하는 경우 사용자와 응용 프로그램에 일관된 환경을 제공하려면 로그인, 작업, 권한 등 데이터베이스의 일부 또는 모든 메타데이터를 다른 서버 인스턴스에서 다시 만들어야 할 수도 있습니다. 자세한 내용은 다른 서버 인스턴스에서 데이터베이스를 사용할 수 있도록 할 때 메타데이터 관리를 참조하십시오.
예
다음 예에서는 Transact-SQL 문으로 데이터베이스를 분리 및 연결하여 SQL Server 2000pubs 데이터베이스를 SQL Server 2005 데이터베이스로 업그레이드합니다.
SQL Server 2000 쿼리 분석기를 pubs가 연결된 서버 인스턴스에 연결하고 sp_detach_db 저장 프로시저를 사용하여 데이터베이스를 분리합니다.
USE master; GO EXEC sp_detach_db @dbname = N'pubs'; GO
이 예를 수행하기 위해 원하는 방법을 사용하여 pubs 파일(pubs.mdf 및 pubs_log.ldf)을 C:\Program Files\Microsoft SQL Server\MSSQL\Data\(SQL Server 2000에서 pubs의 기본 위치)에서 C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\(SQL Server 2005 데이터 디렉터리)로 복사합니다.
중요 프로덕션 데이터베이스의 경우 데이터베이스와 트랜잭션 로그를 별도의 디스크에 저장합니다.
[!참고]
네트워크를 통해 원격 컴퓨터의 디스크로 파일을 복사하려면 원격 위치의 UNC(Universal Naming Convention) 이름을 사용합니다. UNC 이름의 형식은 \\Servername\Sharename\Path\Filename입니다. 로컬 하드 디스크에 파일을 쓰는 경우처럼 SQL Server에서 사용하는 사용자 계정에 원격 디스크의 파일을 읽고 쓸 수 있는 권한이 있어야 합니다.
필요에 따라 복사한 pubs 데이터베이스와 로그 파일을 SQL Server 2005 인스턴스에 연결합니다. 이 예에서는 동일한 데이터베이스 이름을 사용합니다. SQL Server Management Studio에서 새 쿼리 편집기 쿼리를 열고 데이터베이스를 연결할 서버 인스턴스에 연결합니다.
[!참고]
자세한 내용은 SQL Server Management Studio 데이터베이스 엔진 쿼리 편집기 창를 참조하십시오.
다음 CREATE DATABASE 문을 실행합니다.
USE master; GO CREATE DATABASE pubs ON PRIMARY (FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs.mdf') LOG ON (FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs_log.ldf') FOR ATTACH; GO
[!참고]
SQL Server Management Studio에서 새로 연결되는 데이터베이스는 개체 탐색기에 즉시 표시되지 않습니다. 데이터베이스를 보려면 개체 탐색기 창을 클릭하고 보기 > 새로 고침을 선택합니다. 데이터베이스 노드가 확장되면 이제 새로 연결된 데이터베이스가 데이터베이스 목록에 나타납니다.
필요에 따라 sp_attach_db 저장 프로시저를 사용하여 원래 pubs 데이터베이스를 SQL Server 2000 인스턴스에 다시 연결합니다. 쿼리 분석기에서 다음을 입력합니다.
USE master; Go EXEC sp_attach_db @dbname = N'pubs', @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', @filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'; GO