RESTORE(Transact-SQL)

업데이트: 2006년 12월 12일

BACKUP 명령을 사용하여 만든 백업을 복원합니다. 이 명령을 사용하여 다음을 수행할 수 있습니다.

  • 전체 데이터베이스 백업에서 전체 데이터베이스를 복원합니다(전체 복원).
  • 데이터베이스의 일부를 복원합니다(부분 복원).
  • 특정 파일, 파일 그룹 또는 페이지를 데이터베이스로 복원합니다(파일 또는 페이지 복원).
  • 트랜잭션 로그를 데이터베이스로 복원합니다(트랜잭션 로그 복원).
  • 데이터베이스 스냅숏에서 캡처한 지점으로 데이터베이스를 되돌립니다.

데이터베이스 백업 및 복원에 대한 자세한 내용은 SQL Server의 데이터베이스 백업 및 복원을 참조하십시오.

[!참고] 인수에 대한 설명은 RESTORE 인수(Transact-SQL)를 참조하십시오.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

--To restore a complete database from a full database backup (a Complete Restore):
RESTORE DATABASE { database_name | @database_name_var } 
[ FROM <backup_device> [ ,...n ] ]
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] KEEP_REPLICATION ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword |
                    @mediapassword_variable } ] 
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
    [ [ , ] BLOCKSIZE = { blocksize | @blocksize_variable } ] 
    [ [ , ] BUFFERCOUNT = { buffercount | @buffercount_variable } ] 
   [ [ , ]    MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable } ] 
   [ [ , ] ENABLE_BROKER ] 
   [ [ , ] ERROR_BROKER_CONVERSATIONS ] 
   [ [ , ] NEW_BROKER ] 
   [ [ , ] { RECOVERY | NORECOVERY | STANDBY = 
          {standby_file_name | @standby_file_name_var } 
   } ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ] 
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [ = percentage ] ] 
    [ [ , ] { STOPAT = { 'date_time' | @date_time_var } 
    |  STOPATMARK = { 'lsn:lsn_number' }
              [ AFTER 'datetime' ] 
    |  STOPBEFOREMARK = { 'lsn:lsn_number' }
             [ AFTER 'datetime' ]
   } ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

--Restore part of a database (a partial restore):
RESTORE DATABASE { database_name | @database_name_var } 
  <files_or_filegroups> [ ,...n ] 
 [ FROM <backup_device> [ ,...n ] ] 
 [ WITH 
     PARTIAL 
   [ [ , ] { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword |
                      @mediapassword_variable } ] 
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] NORECOVERY ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [=percentage ] ] 
   [ [ , ] { STOPAT = { 'date_time' | @date_time_var } 
    |  STOPATMARK = { 'lsn:lsn_number' }
              [ AFTER 'datetime' ] 
    |  STOPBEFOREMARK = { 'lsn:lsn_number' }
             [ AFTER 'datetime' ] 
   } ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

<files_or_filegroups> ::= 
{ 
   FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var } 
   |
   FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } 
   | 
   READ_WRITE_FILEGROUPS
} 

--To Restore Specific Files, Filegroups, or Pages: 
RESTORE DATABASE { database_name | @database_name_var } 
     <file_or_filegroup_or_pages> [ ,...n ]
[ FROM <backup_device> [ ,...n ] ] 
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 

   [ [ , ] MEDIAPASSWORD = { mediapassword |
                      @mediapassword_variable } ]
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] NORECOVERY ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [ =percentage ] ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

<file_or_filegroup_or_pages> ::=
{ 
   FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var }
   | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }
      | PAGE = 'file:page [ ,...n ]'  
} 

--To Restore a Transaction Log:
RESTORE LOG { database_name | @database_name_var } 
     [ <file_or_filegroup_or_pages> [ ,...n ] ]
[ FROM <backup_device> [ ,...n ] ] 
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] KEEP_REPLICATION ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable }      ]
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] { RECOVERY | NORECOVERY | STANDBY = 
          {standby_file_name | @standby_file_name_var } }
   ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [=percentage ] ] 
   [ [ , ] { STOPAT = { 'date_time' | @date_time_var } 
    |  STOPATMARK = { 'mark_name' | 'lsn:lsn_number' }
              [ AFTER 'datetime' ] 
    |  STOPBEFOREMARK = { 'mark_name' | 'lsn:lsn_number' }
             [ AFTER 'datetime' ] 
   } ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

<file_or_filegroup_or_pages> ::=
{ 
   FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var }
   | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }
      | PAGE = 'file:page [ ,...n ]'  
} 

--To Revert a Database to a Database Snapshot:   
RESTORE DATABASE { database_name | @database_name_var } 
FROM DATABASE_SNAPSHOT = database_snapshot_name 

인수

인수에 대한 설명은 RESTORE 인수(Transact-SQL)를 참조하십시오.

주의

오프라인 복원 시에 지정된 데이터베이스가 사용 중이면 RESTORE는 짧은 지연 후 사용자가 강제로 로그오프되도록 합니다. 주 파일 그룹이 아닌 파일 그룹에 대한 온라인 복원의 경우 복원한 파일 그룹이 오프라인 상태가 되는 경우를 제외하면 데이터베이스는 사용 중 상태로 유지될 수 있습니다. 지정한 데이터베이스의 모든 데이터는 복원된 데이터로 대체됩니다.

데이터베이스 복구에 대한 자세한 내용은 SQL Server에서의 백업 복원 및 복구 작동 방법 이해SQL Server 데이터베이스에 대한 복원 시나리오 구현을 참조하십시오.

플랫폼 간 복원 작업은 비록 다른 프로세서 유형 간의 작업이라 할지라도 운영 시스템에서 데이터베이스의 데이터 정렬을 지원하는 한 수행할 수 있습니다.

오류가 발생하면 RESTORE는 다시 시작할 수 있습니다. 또한 오류에 관곙벗이 RESTORE가 계속되도록 지시하여 최대한 많은 데이터를 복원할 수 있습니다(CONTINUE_AFTER_ERROR 옵션 참조). 자세한 내용은 손상된 백업에 의해 발생한 SQL Server 복원 오류에 응답을 참조하십시오.

RESTORE는 명시적 또는 암시적 트랜잭션에서 사용할 수 없습니다.

손상된 master 데이터베이스는 특별한 프로시저를 사용하여 복원할 수 있습니다. 자세한 내용은 master 데이터베이스 복원 고려 사항을 참조하십시오.

Microsoft SQL Server 2005로 생성된 백업은 이전 버전의 SQL Server로 복원할 수 없습니다.

데이터베이스를 복원하면 SQL Server의 인스턴스에 대한 계획 캐시가 삭제됩니다. 계획 캐시를 삭제하면 모든 후속 실행 계획이 다시 컴파일되며 일시적으로 갑자기 쿼리 성능이 저하됩니다. SQL Server 2005 서비스 팩 2에서는 계획 캐시의 삭제된 각 캐시스토어에 대해 SQL Server 오류 로그에 "데이터베이스 유지 관리 또는 재구성 작업으로 인해 '%s' 캐시스토어(계획 캐시의 일부)에 대한 캐시스토어 플러시가 SQL Server에서 %d번 발견되었습니다"라는 정보 메시지가 있습니다. 이 메시지는 캐시가 해당 시간 간격 내에 플러시되는 동안 5분마다 기록됩니다.

복원 시나리오

SQL Server 2005는 다양한 복원 시나리오를 지원합니다.

  • 전체 데이터베이스 복원
    전체 데이터베이스 백업에서 시작하여 전체 데이터베이스를 복원한 다음 차등 데이터베이스 백업 및 로그 백업을 복원할 수 있습니다. 자세한 내용은 완전 데이터베이스 복원 수행(단순 복구 모델) 또는 완전 데이터베이스 복원 수행(전체 복구 모델)을 참조하십시오.
  • 파일 복원
    파일 그룹이 여러 개인 데이터베이스에서 파일 또는 파일 그룹을 복원합니다. 단순 복구 모델에서 파일은 읽기 전용 파일 그룹에 속해야 합니다. 전체 파일 복원 후에는 차등 파일 백업을 복원할 수 있습니다. 자세한 내용은 파일 복원 수행(전체 복구 모델)파일 복원 수행(단순 복구 모델)을 참조하십시오.
  • 페이지 복원
    개별 페이지를 복원합니다. 페이지 복원은 전체 및 대량 로그 복구 모델에서만 사용할 수 있습니다. 자세한 내용은 페이지 복원 수행을 참조하십시오.
  • 증분 복원
    주 파일 그룹 및 하나 이상의 보조 파일 그룹에서 시작하여 단계별로 데이터베이스를 복원합니다. 증분 복원은 PARTIAL 옵션을 사용하고 복원할 보조 파일 그룹을 하나 이상 지정하여 RESTORE DATABASE에서 시작합니다. 자세한 내용은 증분 복원 수행을 참조하십시오.
  • 복원만
    데이터베이스와 이미 일치하는 데이터를 복원하여 사용 가능하도록 설정만 하면 됩니다. 자세한 내용은 데이터 복원 없이 데이터베이스 복구를 참조하십시오.
  • 트랜잭션 로그 복원
    전체 또는 대량 로그 복구 모델에서 로그 백업을 복원하려면 원하는 복구 지점에 도달해야 합니다. 로그 백업 복원 방법은 트랜잭션 로그 백업 적용을 참조하십시오.
  • 미러 데이터베이스 만들기
    자세한 내용은 방법: 미러 데이터베이스의 미러링 준비(Transact-SQL)를 참조하십시오.
  • 대기 서버 만들기 및 유지 관리. 대기 서버에 대한 자세한 내용은 웜 대기 서버 사용을 참조하십시오.

이전 버전과의 호환성

RESTORE 문의 구문에서 다음 키워드를 사용하여 이전 버전과의 호환성을 유지할 수 있습니다.

  • RESTORE 키워드 대신 LOAD 키워드를 사용할 수 있습니다.
  • LOG 키워드 대신 TRANSACTION 키워드를 사용할 수 있습니다.
  • RESTRICTED_USER 키워드 대신 DBO_ONLY 키워드를 사용할 수 있습니다.

VarDecimal 저장소 형식에 사용할 수 있는 데이터베이스

vardecimal 저장소 형식으로 올바르게 백업 및 복원 작업을 수행하지만 데이터베이스 엔진이 적어도 SQL Server 2005 서비스 팩 2로 업그레이드되어야 합니다. 압축된 데이터베이스의 백업을 압축되지 않은 데이터베이스로 복원할 수 없습니다. 또한 압축된 서비스 팩 2 데이터베이스의 백업을 이전 버전의 SQL Server로 복원할 수 없습니다. vardecimal 저장소 형식에 대한 자세한 내용은 Decimal 데이터를 가변 길이로 저장을 참조하십시오.

RECOVERY와 NORECOVERY 비교

롤백은 RESTORE 문에서 다음과 같이 [ RECOVERY | NORECOVERY ] 옵션을 통해 제어합니다.

  • NORECOVERY는 롤백이 발생하지 않도록 지정합니다. 이렇게 하면 순서대로 다음 문으로 롤포워드를 계속할 수 있습니다.
    이런 경우 복원 시퀀스는 다른 백업을 복원하여 롤포워드할 수 있습니다.
  • RECOVERY(기본값)는 현재 백업에 대해 롤포워드가 완료된 다음 롤백이 수행되어야 한다는 의미입니다.
    데이터베이스를 복구하려면 복원할 전체 데이터 세트(롤포워드 세트)가 데이터베이스와 일치해야 합니다. 롤포워드 세트가 데이터베이스와 일치될 만큼 충분히 롤포워드되지 않은 경우 RECOVERY를 지정하면 데이터베이스 엔진에서 오류가 발생합니다.

복원 다시 실행

복원 결과는 실행 취소할 수 없지만 데이터 복사 결과를 무시하고 파일 단위로 다시 시작하여 롤포워드할 수 있습니다. 다시 시작하려면 원하는 파일을 복원하고 롤포워드를 다시 수행하십시오. 예를 들어 실수로 너무 많은 로그 백업을 복원하고 원하는 중지 지점을 지난 경우에는 해당 시퀀스를 다시 시작해야 합니다.

복원 시퀀스를 중단하고 영향을 받는 파일의 전체 내용을 복원하여 다시 시작할 수 있습니다.

전체 텍스트 데이터 복원

SQL Server 2005에서 전체 텍스트 데이터는 전체 복원 시에 다른 데이터베이스 데이터와 함께 복원됩니다. 복원 작업은 전체 텍스트 카탈로그를 파일로 처리합니다. 전체 텍스트 파일은 일반 RESTORE DATABASE database_name FROM backup_device 구문을 사용하여 데이터베이스 파일 복원의 일부로 복원됩니다.

또한 RESTORE 문을 사용하여 대체 위치로 복원, 차등 복원, 파일 및 파일 그룹 복원, 전체 텍스트 데이터의 차등 파일 및 파일 그룹 복원을 수행할 수 있습니다. 또한 RESTORE는 데이터베이스 데이터와 함께 복원할 뿐만 아니라 전체 텍스트 파일만 복원할 수도 있습니다.

[!참고] 전체 텍스트 카탈로그는 루트 디렉터리로 복원할 수 없습니다.

자세한 내용은 전체 텍스트 카탈로그 백업 및 복원을 참조하십시오.

데이터베이스 설정 및 복원

복원 시에는 ALTER DATABASE 옵션을 사용하여 설정할 수 있는 대부분의 데이터베이스 옵션이 백업 종료 시에 유효한 값으로 다시 설정됩니다.

[!참고] 이 기능은 SQL Server 2000 이전의 SQL Server 버전과 구별되는 기능입니다.

그러나 WITH RESTRICTED_USER 옵션을 사용하면 사용자 액세스 옵션 설정에 대한 이 동작보다 우선 적용됩니다. 이 설정에서는 WITH RESTRICTED_USER 옵션이 포함되어 있는 다음 RESTORE 문을 항상 설정합니다.

백업 및 복원 기록 테이블

SQL Server에는 각 서버 인스턴스의 백업 및 복원 작업을 추적하는 백업 및 복원 기록 테이블이 있습니다. 복원을 수행하면 백업 기록 테이블도 수정됩니다. 이러한 테이블에 대한 자세한 내용은 백업에 관한 정보 보기를 참조하십시오.

RESTORE LOG

SQL Server 2005부터는 RESTORE LOG에 파일 목록이 포함되어 롤포워드 중에 파일을 만들 수 있습니다. 이 로그는 데이터베이스에 파일을 추가할 때 기록된 로그 레코드가 로그 백업에 포함되는 경우에 사용됩니다.

[!참고] 전체 또는 대량 로그 복구 모델을 사용하는 데이터베이스의 경우 SQL Server 2005에서는 대개 데이터베이스를 복원하기 전에 비상 로그 백업을 수행해야 합니다. RESTORE 문에 WITH REPLACE나 WITH STOPAT 절이 포함되어 있지 않은 한 비상 로그 백업을 먼저 수행하지 않고 데이터베이스를 복원하면 오류가 발생합니다. 비상 로그 백업에 대한 자세한 내용은 비상 로그 백업을 참조하십시오.

온라인 복원

[!참고] 온라인 복원은 SQL Server 2005 Enterprise Edition에서만 사용할 수 있습니다.

온라인 복원이 지원되는 지점에서 데이터베이스가 온라인이면 파일 복원 및 페이지 복원은 자동으로 온라인 복원이 되며 초기 증분 복원을 실행한 다음에는 보조 파일 그룹의 복원이 되기도 합니다.

[!참고] 온라인 복원에는 지연된 트랜잭션이 사용될 수 있습니다.

자세한 내용은 온라인 복원 수행을 참조하십시오.

증분 복원

SQL Server 2005의 새로운 기능인 증분 복원은 Microsoft SQL Server 2000의 부분 복원 기능을 향상시킵니다. 증분 복원을 사용하면 주 파일 그룹 및 일부 보조 파일 그룹을 초기에 부분적으로 복원한 다음 파일 그룹을 복원할 수 있습니다. 복원되지 않은 파일 그룹은 오프라인으로 표시되고 액세스할 수 없습니다. 그러나 오프라인 파일 그룹은 나중에 파일 복원으로 복원할 수 있습니다. 서로 다른 시간에서 전체 데이터베이스를 복원하려면 증분 복원에서 데이터베이스가 일치될 때까지 계속 확인합니다.

[!참고] SQL Server 2000에서는 부분 복원이 전체 데이터베이스 백업에서만 수행 가능합니다. SQL Server 2005에서는 이러한 제한 사항이 없어집니다.

자세한 내용은 증분 복원 수행을 참조하십시오.

데이터베이스를 데이터베이스 스냅숏으로 되돌리기

DATABASE_SNAPSHOT 옵션을 사용하여 지정한 데이터베이스 되돌리기 작업은 전체 원본 데이터베이스를 데이터베이스 스냅숏 시점으로 되돌려 지정한 데이터베이스 스냅숏에 유지 관리된 시점의 데이터로 원본 데이터베이스를 덮어씁니다. 현재 되돌리는 스냅숏만 있을 수 있습니다. 그런 다음 되돌리기 작업은 로그를 다시 작성하므로 되돌린 데이터베이스를 사용자 오류 발생 지점으로 나중에 롤포워드할 수 없습니다.

데이터 손실은 스냅숏 생성 이후의 데이터베이스 업데이트로 제한됩니다. 되돌린 데이터베이스의 메타데이터는 스냅숏 생성 시의 메타데이터와 동일합니다. 그러나 스냅숏으로 되돌리면 전체 텍스트 카탈로그가 모두 삭제됩니다.

데이터베이스 스냅숏에서 되돌리기는 미디어 복구용으로 사용할 수 없습니다. 일반 백업 세트와는 달리 데이터베이스 스냅숏은 데이터베이스 파일의 불완전한 복사본입니다. 데이터베이스나 데이터베이스 스냅숏이 손상된 경우 스냅숏에서 되돌릴 수 없는 경우가 많습니다. 가능하다고 해도 손상된 경우에는 되돌리기를 수행해도 문제가 해결되지 않습니다.

되돌리기 제한 사항

다음과 같은 경우에는 되돌리기가 지원되지 않습니다.

  • 원본 데이터베이스에는 읽기 전용 파일 그룹이나 압축 파일 그룹이 포함되어 있습니다.
  • 스냅숏이 만들어질 때 온라인 상태였던 파일이 오프라인 상태입니다.
  • 현재 데이터베이스에 대한 스냅숏이 여러 개가 있습니다.

자세한 내용은 데이터베이스 스냅숏으로 되돌리기를 참조하십시오.

사용 권한

복원할 데이터베이스가 없으면 CREATE DATABASE 사용 권한이 있어야 RESTORE를 실행할 수 있습니다. 데이터베이스가 있으면 RESTORE 사용 권한은 기본적으로 sysadmindbcreator 고정 서버 역할의 멤버와 데이터베이스의 소유자(dbo)로 설정됩니다. FROM DATABASE_SNAPSHOT 옵션의 경우 데이터베이스가 항상 있습니다.

멤버 정보를 서버에서 항상 사용할 수 있는 역할에 RESTORE 사용 권한이 제공됩니다. 항상 RESTORE가 실행되는 경우는 아니지만 데이터베이스에 액세스할 수 있고 손상되지 않은 경우에만 고정 데이터베이스 역할 멤버를 확인할 수 있기 때문에 db_owner 고정 데이터베이스 역할의 멤버는 RESTORE 사용 권한이 없습니다.

백업 작업은 미디어 세트, 백업 세트 또는 이 둘 모두에 대해 암호를 지정할 수 있습니다. 미디어 세트나 백업 세트에 암호가 정의되어 있는 경우 RESTORE 문에서 정확한 암호를 지정해야 합니다. 이러한 암호를 지정하면 SQL Server 2005 도구를 사용하여 무단으로 복원 작업을 수행하거나 미디어에 백업 세트를 무단으로 추가하는 작업을 방지할 수 있습니다. 그러나 암호로 보호된 미디어는 BACKUP 문의 FORMAT 옵션으로 덮어쓸 수 있습니다.

ms186858.security(ko-kr,SQL.90).gif보안 정보:
이 암호에 의한 보호 수준은 낮습니다. 권한 유무에 관계없이 사용자가 SQL Server 2005 도구를 사용하여 잘못된 복원을 수행하는 것을 방지합니다. 다른 수단을 사용한 백업 데이터 읽기나 암호 바꾸기를 방지하지는 않습니다. 백업을 보호하는 최상의 방법은 백업 테이프를 안전한 장소에 보관하거나 적합한 ACL(액세스 제어 목록)로 보호되는 디스크 파일에 백업하는 것입니다. ACL은 백업이 만들어지는 디렉터리 루트에 설정해야 합니다.

[!참고] AdventureWorks 데이터베이스는 예제용으로 제공된 것입니다. AdventureWorks는 SQL Server 2005의 예제 데이터베이스 중 하나입니다. Adventure Works Cycles는 데이터베이스 개념 및 시나리오를 설명하는 데 사용되는 가상 제조 회사입니다. 이 데이터베이스에 대한 자세한 내용은 예제 및 예제 데이터베이스를 참조하십시오.

모든 예에서는 전체 데이터베이스 백업을 수행한 것으로 가정합니다.

RESTORE 예에는 다음이 포함됩니다.

  • 1. 전체 데이터베이스 복원
  • 2. 전체 및 차등 데이터베이스 백업 복원
  • 3. RESTART 구문을 사용하여 데이터베이스 복원
  • 4. 데이터베이스 복원 및 파일 이동
  • 5. BACKUP 및 RESTORE를 사용하여 데이터베이스 복사
  • 6. STOPAT를 사용하여 지정 시간으로 복원
  • 7. 트랜잭션 로그를 표시까지 복원
  • 8. TAPE 구문을 사용하여 복원
  • 9. FILE 및 FILEGROUP 구문을 사용하여 복원
  • 10. 데이터베이스 스냅숏으로 되돌리기

[!참고] 다른 예를 보려면 일부 복원 시나리오의 복원 시퀀스 예백업 및 복원 방법 도움말 항목(Transact-SQL)에 나열된 복원 방법 도움말 항목을 참조하십시오.

1. 전체 데이터베이스 복원

다음 예에서는 AdventureWorksBackups 논리적 백업 장치에서 전체 데이터베이스 백업을 복원합니다. 이 장치를 만드는 예는 백업 장치를 참조하십시오.

RESTORE DATABASE AdventureWorks 
   FROM AdventureWorksBackups

[!참고] 전체 또는 대량 로그 복구 모델을 사용하는 데이터베이스의 경우 SQL Server 2005에서는 대개 데이터베이스를 복원하기 전에 비상 로그 백업을 수행해야 합니다. 자세한 내용은 비상 로그 백업을 참조하십시오.

[맨 위의 예]

2. 전체 및 차등 데이터베이스 백업 복원

다음 예에서는 Z:\SQLServerBackups\AdventureWorks.bak 백업 장치에서 전체 데이터베이스 백업을 복원한 다음 차등 데이터베이스 백업을 복원합니다. 이 백업 장치에는 전체 데이터베이스 백업 및 차등 데이터베이스 백업이 모두 포함되어 있습니다. 복원할 전체 데이터베이스 백업은 장치의 6번째 백업 세트(FILE = 6)이고 차등 데이터베이스 백업은 장치의 9번째 백업 세트(FILE = 9)입니다. 차등 백업이 복구되면 바로 데이터베이스가 복구됩니다.

RESTORE DATABASE AdventureWorks
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak'
   WITH FILE = 6
      NORECOVERY;
RESTORE DATABASE AdventureWorks
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak'
   WITH FILE = 9
      RECOVERY;

[맨 위의 예]

3. RESTART 구문을 사용하여 데이터베이스 복원

다음 예에서는 RESTART 옵션을 사용하여 서버 전원 고장으로 중단된 RESTORE 작업을 다시 시작합니다.

-- This database RESTORE halted prematurely due to power failure.
RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE AdventureWorks 
   FROM AdventureWorksBackups WITH RESTART

[맨 위의 예]

4. 데이터베이스 복원 및 파일 이동

다음 예에서는 전체 데이터베이스와 트랜잭션 로그를 복원하고 복원된 데이터베이스를 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data 디렉터리로 이동합니다.

RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NewAdvWorks.ldf'
RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH RECOVERY

[맨 위의 예]

5. BACKUP 및 RESTORE를 사용하여 데이터베이스 복사

다음 예에서는 BACKUPRESTORE 문을 사용하여 AdventureWorks 데이터베이스의 복사본을 만듭니다. MOVE 문을 사용하면 데이터와 로그 파일이 지정한 위치로 복원됩니다. RESTORE FILELISTONLY 문은 복원 중인 데이터베이스에 있는 파일의 개수와 이름을 알아내는 데 사용합니다. 데이터베이스의 새 복사본 이름은 TestDB입니다. 자세한 내용은 RESTORE FILELISTONLY(Transact-SQL)를 참조하십시오.

BACKUP DATABASE AdventureWorks 
   TO AdventureWorksBackups ;

RESTORE FILELISTONLY 
   FROM AdventureWorksBackups ;

RESTORE DATABASE TestDB 
   FROM AdventureWorksBackups 
   WITH MOVE 'AdventureWorks_Data' TO 'C:\MySQLServer\testdb.mdf',
   MOVE 'AdventureWorks_Log' TO 'C:\MySQLServer\testdb.ldf';
GO

[맨 위의 예]

6. STOPAT를 사용하여 지정 시간으로 복원

다음 예에서는 April 15, 2020, 12:00 AM 상태로 데이터베이스를 복원하고 여러 로그와 여러 백업 장치와 연관하여 복원하는 작업을 보여 줍니다.

RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
   WITH NORECOVERY;

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH RECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH RECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';

[맨 위의 예]

7. 트랜잭션 로그를 표시까지 복원

다음 예에서는 트랜잭션 로그를 복원하여 ListPriceUpdate라는 표시된 트랜잭션에 나타냅니다.

USE AdventureWorks
GO
BEGIN TRANSACTION ListPriceUpdate
   WITH MARK 'UPDATE Product list prices';
GO

UPDATE Production.Product
   SET ListPrice = ListPrice * 1.10
   WHERE ProductNumber LIKE 'BK-%';
GO

COMMIT TRANSACTION ListPriceUpdate;
GO

-- Time passes. Regular database 
-- and log backups are taken.
-- An error occurs in the database.
USE master
GO

RESTORE DATABASE AdventureWorks
FROM AdventureWorksBackups
WITH FILE = 3, NORECOVERY;
GO

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups 
   WITH FILE = 4,
   RECOVERY, 
   STOPATMARK = 'ListPriceUpdate';

[맨 위의 예]

8. TAPE 구문을 사용하여 복원

다음 예에서는 TAPE 백업 장치에서 전체 데이터베이스 백업을 복원합니다.

RESTORE DATABASE AdventureWorks 
   FROM TAPE = '\\.\tape0'

[맨 위의 예]

9. FILE 및 FILEGROUP 구문을 사용하여 복원

다음 예에서는 하나의 보조 파일 그룹과 하나의 트랜잭션 로그인 두 파일이 있는 MyDatabase라는 데이터베이스를 복원합니다. 이 데이터베이스는 전체 복구 모델을 사용합니다.

데이터베이스 백업은 MyDatabaseBackups라는 논리적 백업 장치에 있는 미디어 세트의 9번째 백업 세트입니다. 그런 다음 MyDatabaseBackups 장치의 다음 3개 백업 세트(10, 1112)에 있는 3개 로그 백업이 WITH NORECOVERY를 사용하여 복원됩니다. 마지막 로그 백업을 복원한 다음 데이터베이스가 복구됩니다.

[!참고] 모든 로그 백업이 복원되기 전에 너무 빨리 복구하는 경우를 방지하기 위해 복구 작업은 별도의 단계로 수행됩니다.

RESTORE DATABASE에는 두 가지 유형의 FILE 옵션이 있습니다. 백업 장치 이름 앞에 있는 FILE 옵션은 백업 세트에서 복원될 데이터베이스 파일의 논리적 파일 이름을 지정합니다(예: FILE = 'MyDatabase_data_1'). 이 백업 세트는 미디어 세트의 첫 번째 데이터베이스 백업이 아니므로 미디어 세트에서의 해당 위치는 WITH 절의 FILE 옵션인 FILE=9를 사용하여 나타냅니다.

RESTORE DATABASE MyDatabase
   FILE = 'MyDatabase_data_1',
   FILE = 'MyDatabase_data_2',
   FILEGROUP = 'new_customers'
   FROM MyDatabaseBackups
   WITH 
      FILE = 9,
      NORECOVERY;
GO
-- Restore the log backups.
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 10, 
      NORECOVERY;
GO
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 11, 
      NORECOVERY;
GO
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 12, 
      NORECOVERY;
GO
--Recover the database:
RESTORE DATABASE MyDatabase WITH RECOVERY;
GO

[맨 위의 예]

10. 데이터베이스 스냅숏으로 되돌리기

다음 예에서는 데이터베이스를 데이터베이스 스냅숏으로 되돌립니다. 이 예에서는 현재 하나의 스냅숏만 데이터베이스에 있는 것으로 가정합니다. 이 데이터베이스 스냅숏을 만드는 방법에 대한 예는 방법: 데이터베이스 스냅숏 만들기(Transact-SQL)를 참조하십시오.

[!참고] 스냅숏으로 되돌리면 전체 텍스트 카탈로그가 모두 삭제됩니다.

USE master  
RESTORE DATABASE AdventureWorks FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO

자세한 내용은 데이터베이스 스냅숏으로 되돌리기를 참조하십시오.

[맨 위의 예]

참고 항목

참조

BACKUP(Transact-SQL)
RESTORE REWINDONLY(Transact-SQL)
RESTORE VERIFYONLY(Transact-SQL)

관련 자료

전체 텍스트 카탈로그 백업 및 복원
복제된 데이터베이스 백업 및 복원
SQL Server 데이터베이스에 대한 복원 시나리오 구현
미디어 세트, 미디어 패밀리 및 백업 세트
SQL Server에서의 백업 복원 및 복구 작동 방법 이해
백업에 관한 정보 보기

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 12월 12일

새로운 내용
  • 구문 섹션에 BLOCKSIZE, BUFFERCOUNT 및 MAXTRANSFERSIZE 옵션을 추가했습니다.
  • RESTORE DATABASE에 대한 STOPATMARK 및 STOPBEFOREMARK 구문을 수정했습니다.
  • vardecimal 저장소 형식이 설정된 SQL Server 2005 서비스 팩 2 데이터베이스를 복원하는 방법에 대한 섹션을 주의에 추가했습니다.
  • 계획 캐시 삭제에 대한 섹션을 주의에 추가했습니다.
변경된 내용
  • STOPAT, STOPATMARK 및 STOPBEFOREMARK 구문을 수정했습니다.

2006년 4월 14일

변경된 내용
  • 오프라인 파일의 데이터베이스 스냅숏 제한 사항에 대한 자세한 설명을 추가했습니다.
  • 백업된 파일의 논리적 이름에 대한 구문을 logical_file_name 변수 이름에서 logical_file_name_in_backup으로 변경했습니다.