다음을 통해 공유


전체 데이터베이스 복원(전체 복구 모델)

전체 데이터베이스 복원의 목적은 전체 데이터베이스를 복원하는 것입니다. 복원하는 동안 전체 데이터베이스는 오프라인 상태가 됩니다. 데이터베이스의 일부를 온라인에 연결하기 전에 데이터베이스의 모든 부분의 지정 시간이 같고 커밋되지 않은 트랜잭션이 없는 일치하는 지점으로 모든 데이터를 복구합니다.

전체 복구 모델에서는 데이터 백업이나 백업을 복원한 후, 이후의 모든 트랜잭션 로그 백업을 복원한 다음 데이터베이스를 복구해야 합니다. 이러한 로그 백업 중 하나의 특정 복구 지점 으로 데이터베이스를 복원할 수 있습니다. 복구 지점은 특정 날짜 및 시간, 표시된 트랜잭션 또는 LSN(로그 시퀀스 번호)일 수 있습니다.

데이터베이스를 복원할 경우, 특히 전체 복구 모델 또는 대량 로그 복구 모델에서는 단일 복원 순서를 사용해야 합니다. 복원 순서 는 하나 이상의 복원 단계를 통해 데이터를 이동시키는 하나 이상의 복원 작업으로 구성됩니다.

중요

알 수 없거나 신뢰할 수 없는 출처의 데이터베이스는 연결 또는 복원하지 않는 것이 좋습니다. 이러한 데이터베이스에는 의도하지 않은 Transact-SQL 코드를 실행하거나 스키마 또는 물리적 데이터베이스 구조를 수정하여 오류를 일으킬 수 있는 악성 코드가 포함될 수 있습니다. 알 수 없거나 신뢰할 수 없는 소스의 데이터베이스를 사용하기 전에 비프로덕션 서버의 데이터베이스에서 DBCC CHECKDB 를 실행하여 데이터베이스에서 코드(예: 저장 프로시저 또는 다른 사용자 정의 코드)를 시험해 보세요.

항목 내용:

참고

이전 버전 SQL Server의 백업 지원에 대한 자세한 내용은 RESTORE(Transact-SQL)의 “호환성 지원” 섹션을 참조하세요.

오류 지점으로 데이터베이스 복원

일반적으로 실패 지점으로 데이터베이스를 복구하는 작업에는 다음의 기본 단계가 포함됩니다.

  1. 활성 트랜잭션 로그(비상 로그)를 백업합니다. 이렇게 하면 비상 로그 백업이 만들어집니다. 활성 트랜잭션 로그를 사용할 수 없을 때 해당 로그 부분의 모든 트랜잭션이 손실됩니다.

    중요

    대량 로그 복구 모델에서 대량 로그 작업이 포함된 로그를 백업하려면 데이터베이스의 모든 데이터 파일에 대한 액세스 권한이 있어야 합니다. 데이터 파일에 액세스할 수 없는 경우 트랜잭션 로그를 백업할 수 없습니다. 이 경우 가장 최근의 로그 백업 이후 변경된 모든 내용을 수동으로 다시 실행해야 합니다.

    자세한 내용은 비상 로그 백업(SQL Server)를 참조하세요.

  2. 데이터베이스를 복구하지 않고 가장 최근의 전체 데이터베이스 백업을 복원합니다(RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

  3. 차등 백업이 있는 경우 데이터베이스를 복구하지 않고 가장 최근의 차등 백업을 복원합니다(RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY).

    가장 최근의 차등 백업을 복원하면 복원해야 하는 로그 백업 수를 줄일 수 있습니다.

  4. 복원한 백업 이후 첫 번째 트랜잭션 로그 백업부터 시작하여 NORECOVERY의 순서로 로그를 복원합니다.

  5. 데이터베이스를 복구합니다(RESTORE DATABASE database_name WITH RECOVERY). 또는 이 단계를 마지막 로그 백업 복원과 결합할 수도 있습니다.

다음 그림은 이 복원 순서를 보여 줍니다. 오류가 발생한 후(1) 비상 로그 백업이 생성됩니다(2). 그런 다음 데이터베이스가 오류 지점으로 복원됩니다. 이 과정에는 데이터베이스 백업 및 후속 차등 백업을 복원하고, 비상 로그 백업을 포함하여 차등 백업 이후에 생성된 모든 로그 백업을 복원하는 작업이 포함됩니다.

실패 시간으로 데이터베이스 복원 완료 실패 시간으로 완료

참고

데이터베이스 백업을 다른 서버 인스턴스로 복원할 경우 백업 및 복원으로 데이터베이스 복사를 참조하세요.

기본 Transact-SQL RESTORE 구문

이전 그림의 복원 시퀀스에 대한 기본 RESTORETransact-SQL 구문은 다음과 같습니다.

  1. RESTORE DATABASE database FROM full database backup WITH NORECOVERY;

  2. RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;

  3. RESTORE LOG database FROM log_backup WITH NORECOVERY;

    각 추가 로그 백업에 대해 이 복원 로그 단계를 반복합니다.

  4. RESTORE DATABASE database WITH RECOVERY;

예: 오류 지점으로 복구(Transact-SQL)

다음 Transact-SQL 예제에서는 데이터베이스를 실패 지점으로 복원하는 복원 시퀀스의 필수 옵션을 보여 줍니다. 이 예에서는 데이터베이스의 비상 로그 백업을 만듭니다. 다음으로 전체 데이터베이스 백업 및 로그 백업을 복원한 다음 비상 로그 백업을 복원합니다. 이 예의 경우 별도의 마지막 단계에서 데이터베이스를 복구합니다.

참고

이 예제에서는 전체 데이터베이스 백업(SQL Server)의 "전체 복구 모델에서 데이터베이스 백업 사용" 섹션에서 만든 데이터베이스 백업 및 로그 백업을 사용합니다. AdventureWorks2012 예제 데이터베이스는 데이터베이스 백업 전에 전체 복구 모델을 사용하도록 설정되었습니다.

USE master;  
--Create tail-log backup.  
BACKUP LOG AdventureWorks2012   
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'    
   WITH NORECOVERY;   
GO  
--Restore the full database backup (from backup set 1).  
RESTORE DATABASE AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=1,   
    NORECOVERY;  
  
--Restore the regular log backup (from backup set 2).  
RESTORE LOG AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=2,   
    NORECOVERY;  
  
--Restore the tail-log backup (from backup set 3).  
RESTORE LOG AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'  
  WITH FILE=3,   
    NORECOVERY;  
GO  
--recover the database:  
RESTORE DATABASE AdventureWorks2012 WITH RECOVERY;  
GO  

데이터베이스를 로그 백업 내 지점으로 복원

전체 복구 모델에서, 전체 데이터베이스 복원은 일반적으로 지정 시간, 표시된 트랜잭션 또는 로그 백업 내 LSN으로 복구될 수 있습니다. 그러나 대량 로그 복구 모델에서 로그 백업에 대량 로그 변경 내용이 있을 경우 지정 시간 복구를 사용할 수 없습니다.

예제 지정 시간 복원 시나리오

다음 예에서는 매일 자정에 전체 데이터베이스 백업을 만들고 월요일부터 토요일까지 정시에 차등 데이터베이스 백업을 만들며 하루 종일 10분마다 트랜잭션 로그 백업을 만드는 업무용 데이터베이스 시스템이 있다고 가정합니다. 데이터베이스를 수요일 5:19 A.M. 상태로 복원하려면 다음을 수행합니다.

  1. 화요일 자정에 만든 전체 데이터베이스 백업을 복원합니다.

  2. 수요일 5:00 A.M.에 만든 차등 데이터베이스 백업을 복원합니다.

  3. 수요일 5:10 A.M.에 만든 트랜잭션 로그 백업을 적용합니다.

  4. 복구 프로세스에서 5:19 A.M. 전에 발생한 트랜잭션만 적용하도록 지정하여 수요일 5:20 A.M.에 만든 트랜잭션 로그 백업을 적용합니다.

또는 데이터베이스를 목요일 3:04 A.M.의 상태로 복원해야 하는데 목요일 3:00 A.M.에 만든 차등 데이터베이스 백업을 사용할 수 없으면 다음을 수행합니다.

  1. 수요일 자정에 만든 데이터베이스 백업을 복원합니다.

  2. 목요일 2:00 A.M.에 만든 차등 데이터베이스 백업을 복원합니다.

  3. 목요일 2:10 A.M.부터 3:00 A.M.까지 만든 트랜잭션 로그 백업을 모두 적용합니다.

  4. 목요일 3:04 A.M.에 복구 프로세스를 중지하여 3:10 A.M.에 만든 트랜잭션 로그 백업을 적용합니다.

관련 작업

전체 데이터베이스 백업을 복원하려면

차등 데이터베이스 백업을 복원하려면

트랜잭션 로그 백업을 복원하려면

SMO(SQL Server 관리 개체)를 사용하여 백업을 복원하려면

데이터베이스를 로그 백업 내 지점으로 복원하려면

참고 항목

RESTORE(Transact-SQL)
BACKUP(Transact-SQL)
트랜잭션 로그 백업 적용(SQL Server)
sp_addumpdevice(Transact-SQL)
전체 데이터베이스 백업(SQL Server)
차등 백업(SQL Server)
Backup Overview (SQL Server)
복원 및 복구 개요(SQL Server)