방법: 새 위치 및 이름으로 데이터베이스 복원(Transact-SQL)

이 항목에서는 새 위치 및 필요에 따라 새 이름으로 전체 데이터베이스 백업을 복원하는 방법에 대해 설명합니다. 이런 절차를 통해 데이터베이스를 이동하거나 동일 서버 인스턴스나 다른 서버 인스턴스에서 데이터베이스 복사본을 만들 수 있습니다. 데이터베이스 이동 시 고려 사항에 대한 자세한 내용은 백업 및 복원으로 데이터베이스 복사를 참조하십시오.

필수 구성 요소 및 권장 사항

  • 암호화된 데이터베이스를 복원하려면 데이터베이스를 암호화하는 데 사용된 인증서 또는 비대칭 키에 대한 액세스 권한이 있어야 합니다. 인증서 또는 비대칭 키가 없으면 데이터베이스를 복원할 수 없습니다. 따라서 데이터베이스 암호화 키를 암호화하는 데 사용되는 인증서는 백업이 필요한 동안에는 유지되어야 합니다. 자세한 내용은 SQL Server 인증서 및 비대칭 키를 참조하십시오.

  • 보안을 위해서는 알 수 없거나 신뢰할 수 없는 출처의 데이터베이스는 연결 또는 복원하지 않는 것이 좋습니다. 이러한 데이터베이스에 포함된 악성 코드가 의도하지 않은 Transact-SQL 코드를 실행하거나 스키마 또는 물리적 데이터베이스 구조를 수정하여 오류가 발생할 수 있습니다. 알 수 없거나 신뢰할 수 없는 출처의 데이터베이스를 사용하기 전에 프로덕션 서버가 아닌 서버에서 해당 데이터베이스에 대해 DBCC CHECKDB를 실행하고 저장 프로시저 또는 다른 사용자 정의 코드 같은 데이터베이스의 코드도 검사하십시오.

업그레이드 후 데이터베이스 호환성 수준

업그레이드 후에는 tempdb, model, msdbResource 데이터베이스의 호환성 수준이 100으로 설정됩니다. master 시스템 데이터베이스는 업그레이드 이전의 호환성 수준이 80 미만이 아니었다면 이전 호환성 수준으로 유지됩니다. master 데이터베이스의 호환성 수준이 업그레이드 이전에 80 미만이었다면 업그레이드 후에는 80으로 설정됩니다.

사용자 데이터베이스의 호환성 수준이 업그레이드 이전에 80 또는 90이었다면 업그레이드 후에도 동일하게 유지됩니다. 업그레이드 이전에 호환성 수준이 70 이하였다면 업그레이드된 데이터베이스에서는 SQL Server 2008에서 지원되는 가장 낮은 호환성 수준인 80으로 설정됩니다.

[!참고]

새 사용자 데이터베이스는 model 데이터베이스의 호환성 수준을 상속합니다.

절차

새 위치 및 이름으로 데이터베이스를 복원하려면

  1. 복원할 전체 데이터베이스 백업이 포함된 백업 세트에 있는 파일의 논리적 이름과 물리적 이름을 결정합니다(선택 사항). 이 문은 백업 세트에 포함된 데이터베이스와 로그 파일의 목록을 반환합니다. 기본 구문은 다음과 같습니다.

    RESTORE FILELISTONLY FROM <backup_device> WITH FILE = backup_set_file_number

    [!참고]

    백업 세트의 backup_set_file_number는 RESTORE HEADERONLY 문을 사용하여 가져올 수 있습니다.

    이 문에는 WITH 옵션을 여러 개 지정할 수도 있습니다. 자세한 내용은 RESTORE FILELISTONLY(Transact-SQL)를 참조하십시오.

  2. RESTORE DATABASE 문을 사용하여 전체 데이터베이스 백업을 복원합니다. 기본적으로 데이터 및 로그 파일은 원래 위치로 복원됩니다. 데이터베이스의 위치를 다시 지정하려면 MOVE 옵션을 사용하여 각 데이터베이스 파일 위치를 옮기고 기존 파일과의 충돌을 피합니다.

    데이터베이스를 새 위치 및 새 이름으로 복원하는 데 사용되는 기본 Transact-SQL 구문은 다음과 같습니다.

    RESTORE DATABASE new_database_name

    FROM backup_device [ ,...n ]

    [ WITH

       {

            [ RECOVERY | NORECOVERY ]

       [ , ] [ FILE ={ backup_set_file_number | @backup_set_file_number } ]

       [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' [ ,...n ]

       }

    ;

    [!참고]

    데이터베이스 위치를 다른 디스크에 다시 지정할 때는 공간이 충분한지 확인하고 기존 파일과의 충돌 가능성이 있는지 확인합니다. 그러려면 RESTORE DATABASE 문에 사용하려는 것과 동일한 MOVE 매개 변수를 지정하는 RESTORE VERIFYONLY 문을 사용해야 합니다.

    다음 표에서는 새 위치로의 데이터베이스 복원과 관련된 RESTORE 문 인수에 대해 설명합니다. 이러한 인수에 대한 자세한 내용은 RESTORE(Transact-SQL)를 참조하십시오.

    • new_database_name
      데이터베이스의 새 이름입니다.

      [!참고]

      데이터베이스를 다른 서버 인스턴스로 복원하는 경우 새 이름 대신 원래 데이터베이스 이름을 사용할 수 있습니다.

    • backup_device [ ,...n ]
      데이터베이스 백업 복원에 사용할 1-64개의 백업 장치 목록(쉼표로 구분됨)을 지정합니다. 물리적 백업 장치를 지정하거나, 정의된 경우 해당 논리적 백업 장치를 지정할 수 있습니다. 물리적 백업 장치를 지정하려면 다음 DISK 또는 TAPE 옵션을 사용합니다.

      { DISK | TAPE } **=**physical_backup_device_name

      자세한 내용은 백업 장치를 참조하십시오.

    • { RECOVERY | NORECOVERY }
      전체 복구 모델을 사용하는 데이터베이스의 경우, 데이터베이스를 복원한 후 트랜잭션 로그 백업을 적용해야 할 수도 있습니다. 이 경우 NORECOVERY 옵션을 지정하십시오.

      그렇지 않은 경우에는 기본값인 RECOVERY 옵션을 사용하십시오.

    • FILE = { backup_set_file_number | @backup_set_file_number }
      복원할 백업 세트를 나타냅니다. 예를 들어 backup_set_file_number가 1인 경우는 백업 미디어의 첫 번째 백업 세트를 나타내고 backup_set_file_number가 2인 경우는 두 번째 백업 세트를 나타냅니다. 백업 세트의 backup_set_file_number는 RESTORE HEADERONLY 문을 사용하여 가져올 수 있습니다.

      이 옵션이 지정되지 않은 경우에는 기본적으로 백업 장치의 첫 번째 백업 세트가 사용됩니다.

      자세한 내용은 RESTORE 인수(Transact-SQL)에서 "백업 세트 지정"을 참조하십시오.

    • MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' [ ,...n ]
      logical_file_name_in_backup에 지정된 데이터 또는 로그 파일을 operating_system_file_name에 지정된 위치로 복원하도록 지정합니다. 백업 세트에서 새 위치로 복원할 모든 논리적 파일에 대해 MOVE 문을 지정합니다.

      옵션

      설명

      logical_file_name_in_backup

      백업 세트에 있는 데이터 또는 로그 파일의 논리적 이름을 지정합니다. 백업 세트에 있는 데이터 또는 로그 파일의 논리적 파일 이름은 백업 세트 생성 시 데이터베이스의 해당 논리적 이름과 일치합니다.

      참고참고
      백업 세트에서 논리적 파일 목록을 가져오려면 RESTORE FILELISTONLY를 사용합니다.

      operating_system_file_name

      logical_file_name_in_backup에 지정된 파일의 새 위치를 지정합니다. 파일이 이 위치로 복원됩니다.

      operating_system_file_name에서 복원 파일의 새 파일 이름을 지정합니다(선택 사항). 이 작업은 동일한 서버 인스턴스에 기존 데이터베이스의 복사본을 만들려는 경우에 필요합니다.

      n

      추가 MOVE 문을 지정할 수 있음을 나타내는 자리 표시자입니다.

[!참고]

SQL Server 2005 또는 SQL Server 2000 데이터베이스를 SQL Server 2008로 복원하면 데이터베이스를 바로 사용할 수 있으며 자동으로 업그레이드됩니다. 데이터베이스에 전체 텍스트 인덱스가 있는 경우 업그레이드 프로세스는 upgrade_option 서버 속성의 설정에 따라 인덱스를 가져오거나, 다시 설정하거나, 다시 작성합니다. 업그레이드 옵션이 가져오기(upgrade_option = 2) 또는 다시 작성(upgrade_option = 0)으로 설정되어 있는 경우 업그레이드하는 동안 전체 텍스트 인덱스를 사용할 수 없습니다. 인덱싱되는 데이터 양에 따라 가져오기 작업은 몇 시간씩 걸릴 수 있으며 다시 작성 작업은 10배 정도 더 걸릴 수 있습니다. 업그레이드 옵션이 가져오기로 설정되어 있으면 전체 텍스트 카탈로그를 사용할 수 없는 경우 관련된 전체 텍스트 인덱스가 다시 작성됩니다. upgrade_option 서버 속성의 설정을 변경하려면 sp_fulltext_service를 사용합니다.

설명

이 예에서는 MyAdvWorks라는 새 데이터베이스를 만듭니다. MyAdvWorks는 기존 AdventureWorks2008R2 데이터베이스의 복사본입니다. 기존 데이터베이스에는 AdventureWorks2008R2_Data와 AdventureWorks2008R2_Log라는 두 파일이 포함되어 있습니다. 이 데이터베이스는 단순 복구 모델을 사용합니다. AdventureWorks2008R2 데이터베이스가 이미 서버 인스턴스에 있으므로 백업에 들어 있는 파일을 새 위치로 복원해야 합니다. RESTORE FILELISTONLY 문은 복원 중인 데이터베이스에 있는 파일의 개수와 이름을 알아내는 데 사용합니다. 데이터베이스 백업은 백업 장치에 있는 첫 번째 백업 세트입니다.

[!참고]

AdventureWorks2008R2 데이터베이스의 전체 데이터베이스 백업을 만드는 방법에 대한 예는 방법: 전체 데이터베이스 백업 만들기(Transact-SQL)를 참조하십시오.

[!참고]

지정 시간 복원을 비롯하여 트랜잭션 로그를 백업 및 복원하는 예에서는 다음 MyAdvWorks 예와 마찬가지로 AdventureWorks2008R2에서 만든 MyAdvWorks_FullRM 데이터베이스를 사용합니다. 그러나 결과로 생성된 MyAdvWorks_FullRM 데이터베이스에서 전체 복구 모델을 사용하도록 변경해야 합니다. ALTER DATABASE MyAdvWorks_FullRM SET RECOVERY FULL.

코드

USE master
GO
-- First determine the number and names of the files in the backup.
-- AdventureWorks2008R2_Backup is the name of the backup device.
RESTORE FILELISTONLY
   FROM AdventureWorks2008R2_Backup
-- Restore the files for MyAdvWorks.
RESTORE DATABASE MyAdvWorks
   FROM AdventureWorks2008R2_Backup
   WITH RECOVERY,
   MOVE 'AdventureWorks2008R2_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf', 
   MOVE 'AdventureWorks2008R2_Log' TO 'F:\MyLog\MyAdvWorks_Log.ldf'
GO