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

적용 대상:SQL Server

전체 데이터베이스 복원에서 목표는 전체 데이터베이스를 복원하는 것입니다. 복원하는 동안 전체 데이터베이스는 오프라인 상태가 됩니다. 데이터베이스의 일부가 온라인 상태가 되기 전에 모든 데이터는 데이터베이스의 모든 부분이 동일한 시점에 있고 커밋되지 않은 트랜잭션이 없는 일관된 지점으로 복구됩니다.

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

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

신뢰할 수 없는 원본

알 수 없거나 신뢰할 수 없는 원본에서 데이터베이스를 연결하거나 복원하지 않는 것이 좋습니다. 이러한 데이터베이스에는 의도하지 않은 Transact-SQL 코드를 실행하거나 스키마 또는 물리적 데이터베이스 구조를 수정하여 오류를 일으킬 수 있는 악성 코드가 포함될 수 있습니다. 알 수 없거나 신뢰할 수 없는 소스의 데이터베이스를 사용하기 전에 프로덕션 서버가 아닌 서버에서 해당 데이터베이스에 대해 DBCC CHECKDB를 실행합니다. 또한 저장 프로시저 또는 기타 사용자 정의 코드와 같이 데이터베이스에서 사용자가 작성한 코드를 검사합니다.

이전 버전에서 백업

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

실패 지점으로 데이터베이스 복원

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

  1. 활성 트랜잭션 로그(로그의 비상이라고 함)를 백업합니다. 그러면 비상 로그 백업이 만들어집니다. 활성 트랜잭션 로그를 사용할 수 없는 경우 로그의 해당 부분에 있는 모든 트랜잭션이 손실됩니다.

    Important

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

    자세한 내용은 비상 로그 백업(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). 다음으로 데이터베이스가 실패 지점으로 복원됩니다. 여기에는 데이터베이스 백업, 후속 차등 백업 및 비상 로그 백업을 포함하여 차등 백업 후에 수행된 모든 로그 백업을 복원하는 작업이 포함됩니다.

Complete database restore to the time of a failure

참고 항목

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

기본 Transact-SQL RESTORE 구문

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

  1. RESTORE DATABASE Database FROM 전체 데이터베이스 백업 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)의 "전체 복구 모델에서 데이터베이스 백업 사용" 섹션에서 만든 데이터베이스 백업 및 로그 백업을 사용합니다. AdventureWorks2022 예제 데이터베이스는 데이터베이스 백업 전에 전체 복구 모델을 사용하도록 설정되었습니다.

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

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

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

샘플 지정 시간 복원 시나리오

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

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

  2. 수요일 오전 5:00에 생성된 차등 데이터베이스 백업을 복원합니다.

  3. 수요일 오전 5시 10분에 생성된 트랜잭션 로그 백업을 적용합니다.

  4. 복구 프로세스가 오전 5시 19분 이전에 발생한 트랜잭션에만 적용되도록 지정하여 수요일 오전 5시 20분에 만들어진 트랜잭션 로그 백업을 적용합니다.

또는 목요일 오전 3시 04분에 데이터베이스를 해당 상태로 복원해야 하지만 목요일 오전 3:00에 생성된 차등 데이터베이스 백업을 사용할 수 없는 경우 다음을 수행합니다.

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

  2. 목요일 오전 2:00에 생성된 차등 데이터베이스 백업을 복원합니다.

  3. 목요일 오전 2시 10분부터 오전 3:00까지 생성된 모든 트랜잭션 로그 백업을 적용합니다.

  4. 목요일 오전 3시 10분에 생성된 트랜잭션 로그 백업을 적용하여 오전 3:04에 복구 프로세스를 중지합니다.

참고 항목

지정 시간 복원의 예는 SQL Server 데이터베이스를 특정 시점으로 복원(전체 복구 모델)을 참조하세요.

관련 작업

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

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

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

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

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

참고 항목

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