SQL Server 데이터베이스를 지정 시간으로 복원(전체 복구 모델)
적용 대상: SQL Server
이 항목에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 특정 시점으로 데이터베이스를 복원하는 방법을 설명합니다. 이 항목은 전체 또는 대량 로그 복구 모델을 사용하는 SQL Server 데이터베이스에만 해당됩니다.
Important
대량 로그 복구 모델에서 로그 백업에 대량 로그 변경 내용이 있을 경우 해당 백업 내의 지점으로 지정 시간 복구를 수행할 수 없습니다. 이 경우에는 데이터베이스를 트랜잭션 로그 백업의 끝으로 복구해야 합니다.
시작하기 전 주의 사항:
다음을 사용하여 SQL Server 데이터베이스를 특정 시점으로 복원하려면:
시작하기 전에
권장 사항
STANDBY를 사용하여 알 수 없는 시점을 찾습니다.
복원 시퀀스에서 초기 시점 지정
보안
사용 권한
복원할 데이터베이스가 없으면 CREATE DATABASE 권한이 있어야 RESTORE를 실행할 수 있습니다. 데이터베이스가 있으면 RESTORE 권한은 기본적으로 sysadmin 및 dbcreator 고정 서버 역할의 멤버와 데이터베이스의 소유자(dbo)에 설정됩니다. FROM DATABASE_SNAPSHOT 옵션의 경우 데이터베이스가 항상 있습니다.
멤버 자격 정보를 서버에서 항상 사용할 수 있는 역할에 RESTORE 권한이 제공됩니다. 고정 데이터베이스 역할의 멤버 자격은 데이터베이스가 액세스 가능한 상태이며 손상되지 않은 경우에만 확인할 수 있는데, RESTORE 실행 시 데이터베이스가 항상 이러한 상태인 것은 아니므로 db_owner 고정 데이터베이스 역할의 멤버에게는 RESTORE 권한이 없습니다.
SQL Server Management Studio 사용
데이터베이스를 지정 시간으로 복원하려면
개체 탐색기에서 SQL Server 데이터베이스 엔진의 적절한 인스턴스에 연결하고 서버 트리를 확장합니다.
데이터베이스를 확장합니다. 데이터베이스에 따라 사용자 데이터베이스를 선택하거나 시스템 데이터베이스를 확장한 다음 시스템 데이터베이스를 선택합니다.
데이터베이스를 마우스 오른쪽 단추로 클릭하고 작업을 가리키고 복원을 가리킨 다음 데이터베이스를 클릭합니다.
일반 페이지에서 원본 섹션을 사용하여 복원할 백업 세트의 원본 및 위치를 지정합니다. 다음 옵션 중 하나를 선택합니다.
Database
복원할 데이터베이스를 드롭다운 목록에서 선택합니다. 목록에는 msdb 백업 기록에 따라 백업된 데이터베이스만 포함됩니다.
참고 항목
백업이 다른 서버에서 가져온 경우 대상 서버에는 지정된 데이터베이스에 대한 백업 기록 정보가 없습니다. 이 경우 디바이스를 선택하여 수동으로 복원할 파일 또는 디바이스를 지정합니다.
디바이스
찾아보기(...) 단추를 클릭하여 백업 디바이스 선택 대화 상자를 엽니다. 백업 미디어 유형 상자에서 나열된 디바이스 유형 중 하나를 선택합니다. 백업 미디어 상자에서 하나 이상의 디바이스를 선택하려면 추가를 클릭합니다.
백업 미디어 목록 상자에 원하는 디바이스를 추가한 후 확인을 클릭하여 일반 페이지로 돌아갑니다.
원본: 디바이스: 데이터베이스 목록 상자에서 복원할 데이터베이스의 이름을 선택합니다.
참고 이 목록은 디바이스를 선택한 경우에만 사용할 수 있습니다. 선택한 디바이스에 백업이 있는 데이터베이스만 사용할 수 있습니다.
대상 섹션의 데이터베이스 상자에는 복원할 데이터베이스의 이름이 자동으로 채워집니다. 데이터베이스 이름을 변경하려면 데이터베이스 상자에 새 이름을 입력합니다.
일정을 클릭하여 백업 시간대 대화 상자에 액세스합니다.
복원 위치 섹션에서 특정 날짜 및 시간을 클릭합니다.
날짜 및 시간 상자 또는 슬라이더 막대를 사용하여 복원이 중지되어야 하는 특정 날짜와 시간을 지정할 수 있습니다. 확인을 선택합니다.
참고 항목
타임라인 간격 상자를 사용하여 타임라인에 표시되는 시간을 변경합니다.
특정 지정 시간을 지정한 후에는 데이터베이스 복구 관리자에서 해당 지정 시간에 복원해야 하는 백업만 복원에 사용할 백업 세트 선택 표의 복원 열에서 선택되도록 합니다. 이러한 선택된 백업은 지정 시간 복원에 필요한 권장 복원 계획을 구성합니다. 지정 시간 복원 작업에는 선택한 백업만 사용해야 합니다.
복원할 백업 세트 그리드의 열에 대한 자세한 내용은 데이터베이스 복원(일반 페이지)을 참조하세요. 데이터베이스 복구 어드바이저에 대한 자세한 내용은 복원 및 복구 개요(SQL Server)를 참조하세요.
옵션 페이지의 복원 옵션 패널에서 상황에 맞는 다음 옵션을 선택할 수 있습니다.
기존 데이터베이스 덮어쓰기(WITH REPLACE)
복제 설정 유지(WITH KEEP_REPLICATION)
복원된 데이터베이스에 대한 액세스 제한(WITH RESTRICTED_USER)
이러한 옵션에 대한 자세한 내용은 데이터베이스 복원(옵션 페이지)을 참조하세요.
복구 상태 상자에 대한 옵션을 선택합니다. 이 상자는 복원 작업 후 데이터베이스의 상태를 결정합니다.
RESTORE WITH RECOVERY는 커밋되지 않은 트랜잭션을 롤백하여 데이터베이스를 사용할 준비가 된 상태로 두는 기본 동작입니다. 추가 트랜잭션 로그는 복원할 수 없습니다. 필요한 모든 백업을 지금 복원하는 경우 이 옵션을 선택합니다.
RESTORE WITH NORECOVERY 는 데이터베이스를 비작동 상태로 유지하고 커밋되지 않은 트랜잭션을 롤백하지 않습니다. 추가 트랜잭션 로그를 복원할 수 있습니다. 데이터베이스는 복구할 때까지 사용할 수 없습니다.
데이터베이스를 읽기 전용 모드로 남겨 두는 RESTORE WITH STANDBY. 이 옵션은 커밋되지 않은 트랜잭션의 실행을 취소하지만, 복구 결과를 되돌릴 수 있도록 실행 취소 동작을 대기 파일에 저장합니다.
옵션에 대한 설명은 데이터베이스 복원(옵션 페이지)을 참조하세요.
선택한 시점에 대해 필요한 경우 복원 전에 비상 로그 백업을 수행하도록 선택됩니다. 이 설정을 수정할 필요는 없지만 필요하지 않더라도 비상 로그를 백업하도록 선택할 수 있습니다.
데이터베이스에 대한 활성 연결이 있으면 복원 작업이 실패할 수 있습니다. 기존 연결 닫기 옵션을 선택하여 Management Studio와 데이터베이스 간의 모든 활성 연결이 닫혀 있는지 확인합니다. 이 확인란을 선택하면 복원 작업을 수행하기 전에 데이터베이스가 단일 사용자 모드로 설정되고 복원 작업이 완료될 때 데이터베이스가 다중 사용자 모드로 설정됩니다.
각 복원 작업 사이에 메시지를 표시하려면 각 백업을 복원하기 전에 메시지 표시를 선택합니다. 데이터베이스가 크고 복원 작업의 상태를 모니터링하려는 경우가 아니면 일반적으로 필요하지 않습니다.
Transact-SQL 사용
시작하기 전에
지정된 시간은 항상 로그 백업에서 복원됩니다. 복원 순서의 모든 RESTORE LOG 문에서 동일한 STOPAT 절에 대상 시간이나 트랜잭션을 지정해야 합니다. 지정 시간 복원을 수행하려면 먼저 종료 지점이 대상 복원 시간보다 빠른 전체 데이터베이스 백업을 복원해야 합니다. 해당 전체 데이터베이스 백업은 대상 시점이 포함된 로그 백업을 포함하여 모든 후속 로그 백업을 복원하는 한 가장 최근의 전체 데이터베이스 백업보다 오래될 수 있습니다.
복원할 데이터베이스를 손쉽게 확인하려면 선택적으로 RESTORE DATABASE 문에 WITH STOPAT 절을 지정하여 데이터 백업이 지정된 대상 시간에 비해 너무 최근인 경우 오류가 발생하도록 하면 됩니다. 데이터 백업에 대상 시간이 포함된 경우에도 항상 전체 데이터 백업이 복원됩니다.
기본 Transact-SQL 구문
RESTORE LOG database_name FROM <backup_device> WITH STOPAT =time, RECOVERY...
복구 지점은 time 에 지정된 datetime값 또는 그전에 발생한 최근 트랜잭션 커밋입니다.
특정 시점 이전에 수정한 내용만 복원하려면 복원하는 각 백업에 대해 WITH STOPAT = time을 지정합니다. 이렇게 하면 대상 시간을 초과하지 않습니다.
데이터베이스를 지정 시간으로 복원하려면
참고 항목
이 절차의 예시는 이 섹션 후반부의 예제(Transact-SQL)를 참조하세요.
데이터베이스를 복원하길 원하는 서버 인스턴스에 연결합니다.
NORECOVERY 옵션을 사용하여 RESTORE DATABASE 문을 실행합니다.
참고 항목
부분 복원 순서에서 FILESTREAM 파일 그룹이 제외될 경우 지정 시간 복원은 지원되지 않습니다. 복원 순서를 강제로 계속할 수 있지만 RESTORE 문에서 누락된 FILESTREAM 파일 그룹은 복원되지 않습니다. 지정 시간 복원을 강제로 수행하려면 후속 RESTORE LOG 문에도 지정해야 하는 STOPAT, STOPATMARK 또는 STOPBEFOREMARK 옵션과 함께 CONTINUE_AFTER_ERROR 옵션을 지정합니다. CONTINUE_AFTER_ERROR를 지정하면 부분 복원 순서가 성공하고 FILESTREAM 파일 그룹이 복구 불가능한 상태가 됩니다.
데이터베이스를 복구하지 않고 마지막 전체 데이터베이스 백업과 마지막 차등 데이터베이스 백업(있는 경우)을 복원합니다(RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).
각 트랜잭션 로그 백업을 만들어진 순서대로 적용하고 로그 복원을 중지할 시간을 지정합니다(RESTORE DATABASE database_name FROM <backup_device> WITH STOPAT = time , RECOVERY).
참고 항목
RECOVERY 및 STOPAT 옵션입니다. 지정된 시간이 트랜잭션 로그에서 수용하는 시간을 초과하는 경우처럼 요청한 시간이 트랜잭션 로그 백업에 포함되지 않을 경우 경고가 생성되고 데이터베이스는 복구되지 않은 상태로 남습니다.
예(Transact-SQL)
다음 예에서는 12:00 AM
, April 15, 2020
상태로 데이터베이스를 복원하고 여러 로그 백업이 연관된 복원 작업을 보여 줍니다. 백업 디바이스 AdventureWorksBackups
에서 복원할 전체 데이터베이스 백업은 해당 디바이스의 세 번째 백업 세트(FILE = 3
)이고, 첫 번째 로그 백업은 네 번째 백업 세트(FILE = 4
)이고, 두 번째 로그 백업은 다섯 번째 백업 세트(FILE = 5
)입니다.
Important
AdventureWorks2022
데이터베이스는 단순 복구 모델을 사용합니다. 로그 백업을 허용하기 위해 전체 데이터베이스 백업을 실행하기 전에 데이터베이스가 ALTER DATABASE AdventureWorks SET RECOVERY FULL
을 통해 전체 복구 모델을 사용하도록 설정되었습니다.
RESTORE DATABASE AdventureWorks
FROM AdventureWorksBackups
WITH FILE=3, NORECOVERY;
RESTORE LOG AdventureWorks
FROM AdventureWorksBackups
WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE LOG AdventureWorks
FROM AdventureWorksBackups
WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE DATABASE AdventureWorks WITH RECOVERY;
GO
관련 작업
ToPointInTime(SMO)
참고 항목
backupset(Transact-SQL)
RESTORE(Transact-SQL)
RESTORE HEADERONLY(Transact-SQL)