본문 바로가기

DBMS/MS-SQL

[MS-SQL] 데이터베이스 복원 - 지정 시간 복구

반응형

개요

여기서는 T-SQL을 이용한 데이터베이스 지정 시간까지의 복원(불완전 복원) 방법에 대해서 다룬다.

구성환경

 

시나리오

12:00 데이터베이스 풀 백업

-- 데이터 입력/수정/삭제등 데이터 변경 발생

13:00 Log 백업

13:29 데이터 입력 오류

14:00 Log 백업

-- 데이터 입력/수정/삭제등 데이터 변경 발생

02:30 데이터 오류 발견

 

데이터베이스 백업

 1. 12:00 데이터베이스 풀 백업

1> BACKUP DATABASE hoyadb TO DISK = 'G:\MSSQL15.MSSQLSERVER\MSSQL\Backup\hoyadb.bck' WITH FORMAT  
2> go
파일 1에서 데이터베이스 'hoyadb', 파일 'hoyadb'에 대해 408개의 페이지를 처리했습니다 .
파일 1에서 데이터베이스 'hoyadb', 파일 'hoyadb_log'에 대해 2개의 페이지를 처리했습니다 .
BACKUP DATABASE이(가) 410개의 페이지를 0.547초 동안 처리했습니다(5.848MB/초).
1> 

2. 13:00 로그 백업

1> BACKUP LOG hoyadb TO DISK = 'G:\MSSQL15.MSSQLSERVER\MSSQL\Backup\hoyadblog1.bck' WITH FORMAT  
2> go
파일 1에서 데이터베이스 'hoyadb', 파일 'hoyadb_log'에 대해 22개의 페이지를 처리했습니다 .
BACKUP LOG이(가) 22개의 페이지를 0.084초 동안 처리했습니다(2.046MB/초).
1>

3. 14:00 로그 백업

1> BACKUP LOG hoyadb to DISK = 'G:\MSSQL15.MSSQLSERVER\MSSQL\Backup\hoyadblog2.bck' WITH FORMAT  
2> go
파일 1에서 데이터베이스 'hoyadb', 파일 'hoyadb_log'에 대해 5개의 페이지를 처리했습니다 .
BACKUP LOG이(가) 5개의 페이지를 0.059초 동안 처리했습니다(0.595MB/초).
1>

4. 14:30 데이터 오류 발견

 

데이터베이스 복원 절차

1. 비상로그백업 및 복구 모두로 변경

 - 비상 로그 : 백업되지 않은 트랜잭션 로그

1> BACKUP LOG hoyadb TO DISK = 'G:\MSSQL15.MSSQLSERVER\MSSQL\Backup\taillog.bck' WITH NORECOVERY, NO_TRUNCATE
2> go
파일 1에서 데이터베이스 'hoyadb', 파일 'hoyadb_log'에 대해 9개의 페이지를 처리했습니다 .
BACKUP LOG이(가) 9개의 페이지를 0.074초 동안 처리했습니다(0.950MB/초).
1>

2. 데이터베이스 풀 백업 복구

1> RESTORE DATABASE hoyadb FROM DISK = 'G:\MSSQL15.MSSQLSERVER\MSSQL\Backup\hoyadb.bck' WITH NORECOVERY, STOPAT = '2020-02-13 13:30:00.000' 
2> go
파일 1에서 데이터베이스 'hoyadb', 파일 'hoyadb'에 대해 408개의 페이지를 처리했습니다 .
파일 1에서 데이터베이스 'hoyadb', 파일 'hoyadb_log'에 대해 2개의 페이지를 처리했습니다 .
RESTORE DATABASE이(가) 410개의 페이지를 0.448초 동안 처리했습니다(7.141MB/초).
1>

3. 로그 파일 복구

 3.1 01시에 백업된 로그 파일 복구

1> RESTORE LOG hoyadb FROM DISK = 'G:\MSSQL15.MSSQLSERVER\MSSQL\Backup\hoyadblog1.bck' WITH NORECOVERY, STOPAT = '2020-02-13 13:30:00.000'
2> go
파일 1에서 데이터베이스 'hoyadb', 파일 'hoyadb'에 대해 0개의 페이지를 처리했습니다 .
파일 1에서 데이터베이스 'hoyadb', 파일 'hoyadb_log'에 대해 22개의 페이지를 처리했습니다 .
RESTORE LOG이(가) 22개의 페이지를 0.091초 동안 처리했습니다(1.888MB/초).
1>

 3.2 02시에 백업된 로그 파일 복구

1> RESTORE LOG hoyadb FROM DISK = 'G:\MSSQL15.MSSQLSERVER\MSSQL\Backup\hoyadblog2.bck' WITH NORECOVERY,STOPAT = '2020-02-13 13:30:00.000'
2> go
파일 1에서 데이터베이스 'hoyadb', 파일 'hoyadb'에 대해 0개의 페이지를 처리했습니다 .
파일 1에서 데이터베이스 'hoyadb', 파일 'hoyadb_log'에 대해 5개의 페이지를 처리했습니다 .
RESTORE LOG이(가) 5개의 페이지를 0.042초 동안 처리했습니다(0.837MB/초).
1>

 3.3 비상로그 복구 

- 비상로그(또는 백업로그)가 지정시점의 트랜잭션로그를 포함하고 있지 않을 경우 오류 발생

1> RESTORE LOG hoyadb FROM DISK = 'G:\MSSQL15.MSSQLSERVER\MSSQL\Backup\taillog.bck' WITH NORECOVERY, STOPAT = '2020-02-13 13:30:00.000' 
2> go
Msg 4305, Level 16, State 1, Server SQLCL-01, Line 1
이 백업 세트의 로그는 LSN 38000000187200001에 시작하므로 데이터베이스에 적용하기에는 너무 이른 로그입니다. LSN 38000000180000001을(를) 포함하는 더 이전의 로그 백업이 복원될 수 있습니다.
Msg 3013, Level 16, State 1, Server SQLCL-01, Line 1
RESTORE LOG이(가) 비정상적으로 종료됩니다.
1>

4. 데이터베이스 복원

1> RESTORE DATABASE hoyadb WITH RECOVERY 
2> go
RESTORE DATABASE이(가) 0개의 페이지를 1.162초 동안 처리했습니다(0.000MB/초).
1>
반응형