데이터베이스를 지정한 복구 지점에 복구하는 최적의 방법

이 항목에서는 전체 복구 모델 또는 대량 로그 복구 모델을 사용하는 SQL Server 데이터베이스와 관련된 내용을 다룹니다. 데이터베이스를 특정 복구 지점(지정 시간, 표시된 트랜잭션 또는 LSN(로그 시퀀스 번호))으로 복구하는 몇 가지 최선의 구현 방법도 제시합니다.

STANDBY를 사용하여 알 수 없는 지정 시간 찾기

데이터베이스를 지정한 시간으로 복원하려는 경우 복구 목표에 가장 적합한 시간, 즉 최적의 복구 지점을 정확히 알 수 없는 경우가 있습니다. 이 복구 지점을 찾으려는 경우 RESTORE … WITH STANDBY **=**standby_file_name에 STOPAT 절을 사용할 수 있습니다. STOPAT 절의 대상 시간은 찾고 있는 복구 지점보다 앞선 시간이어야 합니다. STANDBY 복원 작업은 읽기 전용 액세스가 가능하도록 데이터베이스를 복구하므로 데이터베이스를 검토하여 최적의 복구 지점을 찾을 수 있습니다.

일련의 STANDBY 복원 작업을 사용하면 최적의 복구 지점을 찾을 때까지 주 데이터 파일 및 필요에 따라 다른 데이터 파일을 증분 롤포워드할 수 있습니다. 최적의 복구 지점을 파악한 후 WITH STOPAT에서 이 복구 지점을 대상 지정 시간으로 지정하여 데이터베이스를 다시 롤포워드할 수 있습니다. 이 대상 지정 시간에 도달하면 WITH RECOVERY 옵션을 사용하여 데이터베이스 부분 복원을 수행합니다.

그런 다음 나머지 파일(있는 경우)은 데이터베이스와 일관성을 유지하도록 복원 및 복구할 수 있습니다. 마지막 전체 로그 복원을 복원하면 대상 복구 지점 다음에 수행된 첫 번째 로그 백업을 복원합니다.

STANDBY 옵션에 대한 자세한 내용은 RESTORE 인수(Transact-SQL)를 참조하십시오.

복원 순서의 지정 시간 일찍 지정

복원 순서는 하나 이상의 복원 단계를 통해 데이터를 이동시키는 하나 이상의 복원 작업으로 구성됩니다. 복원 순서에서 원하는 정보를 자세히 제공할수록 작업을 다시 시작하게 하는 오류가 발생할 가능성이 줄어듭니다. 지정 시간 복원의 경우 SQL Server 데이터베이스 엔진에서는 복원할 목표 지정 시간을 식별하기 위해 복원 순서 시작 시와 도중에 지정된 정보를 사용합니다. 복원 순서에서 대기 시간이 너무 길어지면 복원 순서가 실패합니다. 목표 지정 시간을 지나쳐 복원이 진행되지 않도록 복원 순서에 중지 시점 정보를 일찍 제공해야 합니다.

특정 복구 시점에서 중지하려면 RECOVERY 옵션과 함께 STOPAT, STOPBEFOREMARK 또는 STOPATMARK를 사용하여 모든 RESTORE LOG 문에 이러한 의도를 전달해야 합니다. RECOVERY 및 STOPAT 옵션을 함께 사용할 때 지정된 시간이 트랜잭션 로그 범위 내에 있는 시간을 초과하는 경우와 같이 트랜잭션 로그 백업이 요청한 시간을 포함하지 않을 경우 경고가 생성되고 데이터베이스는 복구되지 않습니다. 복구 지점에 도달하면 데이터베이스가 복구되고 다른 로그 백업을 복원하려는 시도가 실패합니다. RECOVERY 및 STOPAT 옵션을 함께 사용하여 로그 백업을 복원하면 어떤 복원도 중지 시점을 넘어 진행되지 않습니다.

중요 정보중요

부분 복원 순서에서 FILESTREAM 파일 그룹이 제외될 경우 지정 시간 복원은 지원되지 않습니다. 복원 순서를 강제로 계속할 수 있지만 RESTORE 문에서 누락된 FILESTREAM 파일 그룹은 복원되지 않습니다. 지정 시간 복원을 강제로 수행하려면 후속 RESTORE LOG 문에도 지정해야 하는 STOPAT, STOPATMARK 또는 STOPBEFOREMARK 옵션과 함께 CONTINUE_AFTER_ERROR 옵션을 지정합니다. CONTINUE_AFTER_ERROR를 지정하면 부분 복원 순서가 성공하고 FILESTREAM 파일 그룹이 복구 가능한 상태가 됩니다.

예: 지정 시간 복원

다음 예에서는 복원 순서가 첫 번째 로그 백업 적용 시 특정 시간에 중지한다는 의도를 선언하기 시작합니다. 이 예에서는 중지 시점이 차등 백업 이후에 첫 번째 로그 백업에서 발생합니다.

RESTORE DATABASE database_name FROM full_backup 
    WITH NORECOVERY;
RESTORE DATABASE database_name FROM full_differential_backup 
    WITH NORECOVERY;
RESTORE LOG database_name FROM log_backup 
    WITH STOPAT = time, RECOVERY;
RESTORE LOG database_name FROM log_backup 
    WITH STOPAT = time, RECOVERY;

지정한 로그 복원의 성공 여부는 다음 표에 설명된 바와 같이 time이 로그 백업에 의해 캡처된 간격 내에 있는지 여부에 따라 달라집니다.

로그 백업에 의해 캡처된 간격과 time의 관계

효과

time이 간격 이전인 경우

복원이 실패하고 롤포워드가 발생하지 않습니다.

time이 간격 사이인 경우

마지막 복원에 성공하고 데이터베이스가 복구됩니다.

time이 간격 이후인 경우

롤포워드가 성공하지만 데이터베이스가 복구되지 않습니다. 이는 아직 time에 도달하지 않았기 때문입니다.

모든 후속 RESTORE 문에서 중지 지점 선언

중지 지점은 STOPAT, STOPBEFOREMARK 또는 STOPATMARK 옵션을 지정하는 문에 해당됩니다. RESTORE 문에서 이 옵션을 생략하면 전체 백업이 복원됩니다.

지정 시간 복원 순서가 진행될 때 time에 새로운 값을 지정하여 복구 지점을 변경할 수 있습니다. 단, 데이터베이스가 새 time을 지나치지 않았어야 합니다.

[!참고]

STOPBEFOREMARK 및 STOPATMARK 옵션에는 두 개의 매개 변수 mark_name과 lsn_number가 있습니다. 로그 백업에서 트랜잭션 표시를 식별하는 mark_name 매개 변수는 RESTORE LOG 문에서만 사용할 수 있습니다. 로그 시퀀스 번호를 지정하는 lsn_number 매개 변수는 RESTORE DATABASE 문과 RESTORE LOG 문에서 모두 사용할 수 있습니다.

변경 내역

업데이트된 내용

WITH STANDBY를 사용하면 단지 복구 프로세스의 결과를 취소할 수 있다는 점을 명확히 보여 줄 수 있도록 "STANDBY를 사용하여 알 수 없는 지정 시간 찾기" 섹션의 내용을 수정했습니다.