SQL Server

SQL Server 특정시간으로 복원

미스터몽키 2015. 2. 13. 08:46

실수로 DELETE문으로 자료를 삭제했을 경우 전체백업자료와 비상로그백업자료를 이용해 특정시간으로 복원하는 방법

 

 

 

 

 

 

-- 전체복구모델의 TestDB 의 TEST 테이블


-- 최초 자료 3건 입력

INSERT INTO TEST
VALUES(10, GETDATE()),
      (20, GETDATE()),
      (30, GETDATE())
GO     

 

-- 데이터 확인
SELECT * FROM TEST

 

 

 

-- 전체백업
BACKUP DATABASE TestDB TO DISK='F:\DB_backup\temp\TestDB_full.bak' WITH INIT
GO

 

-- 2차 자료 입력
INSERT INTO TEST
VALUES(40, GETDATE()),
      (50, GETDATE()),
      (60, GETDATE())
GO

 

-- 데이터 확인
SELECT * FROM TEST

 

 

-- 시간확인
SELECT GETDATE()  --'2015-02-13 07:39:00'

 

-- 앗! 실수로 모든 자료 삭제
DELETE FROM TEST

 

-- 데이터 확인
SELECT * FROM TEST

 

 


/* 복구 과정 */

-- 1. 비상로그 백업

BACKUP LOG TestDB TO DISK='F:\DB_backup\temp\TestDB_log.trn' WITH NO_TRUNCATE
GO
  
-- 2. master DB로 변경

USE master
GO  

 

-- 3. NORECOVERY 옵션으로 전체 백업 복원 -- NORECOVERY 옵션은 전체 백업 복원후 이어서 다음 복원을 하겠다는 의미
-- 이때 TestDB 를 사용중이면 에러 발생하므로 사용중인 세션은 모두 종료되어야한다.

 

RESTORE DATABASE TestDB FROM DISK='F:\DB_backup\temp\TestDB_full.bak' WITH NORECOVERY
GO

 

-- 4. 비상로그 백업을 '2015-02-13 07:39:00' 시간으로 복원
-- STOPAT, RECOVERY 옵션으로 특정시간으로 복원을 끝낸다

 

RESTORE LOG TestDB FROM DISK='F:\DB_backup\temp\TestDB_log.trn'
WITH STOPAT='2015-02-13 07:39:00', RECOVERY
GO


-- 5. 복원 자료 확인
USE TestDB
GO

SELECT * FROM TEST


 

(참고)

http://tshooter.tistory.com/90

http://support.microsoft.com/kb/983139/ko

https://technet.microsoft.com/ko-kr/library/ms179314(v=sql.105).aspx