티스토리 뷰
실수로 데이터를 지워 먹고 긴급하게 백업본으로 복원을 할 때가 종종 있다.
난 아직까진 없었다.
[시나리오]
새벽에 전체백업 스케즐이 동작을 하였고, 데이터베이스 용량이 너무 커서 SHRINKFILE 작업을 하기 위해서
특정 대용량테이블을 TRUNCATE TABLE 후에 DBCC SHRINKFILE(로그)을 날렸다.
몇시간 후에 땀 삐질삐질 상황이 되버렸다.
자 복원하자. TRAUNCATE TABLE 이전 시점으로 복원이 가능할까?
[결론]
최종로그 백업 후에 시점(STOPAT)으로 복원이 가능하다. 상황에 따라 조금씩 다를 수 있을 것 같기도 하다.
[테스트]
SQL SERVER 2014에서 테스트
-- 테스트 데이터 만들기
CREATE DATABASE TESTDB
USE TESTDB
GO
CREATE TABLE DBO.TBL (COL1 INT, COLDATE DATETIME DEFAULT GETDATE())
INSERT INTO DBO.TBL(COL1) VALUES (1)
INSERT INTO DBO.TBL(COL1) VALUES (2)
INSERT INTO DBO.TBL(COL1) VALUES (3)
SELECT * FROM DBO.TBL
/*
COL1 COLDATE
1 2016-02-22 10:25:10.583
2 2016-02-22 10:25:27.760
3 2016-02-22 10:25:27.763
*/
-- 전체백업
BACKUP DATABASE TESTDB to disk='E:\SQLData9\TESTDB.bak'
-- 데이터 입력
INSERT INTO DBO.TBL(COL1) VALUES (4)
INSERT INTO DBO.TBL(COL1) VALUES (5)
INSERT INTO DBO.TBL(COL1) VALUES (6)
SELECT * FROM DBO.TBL
/*
COL1 COLDATE
1 2016-02-22 10:26:21.147
2 2016-02-22 10:26:21.147
3 2016-02-22 10:26:21.150
4 2016-02-22 10:26:59.457
5 2016-02-22 10:26:59.460
6 2016-02-22 10:26:59.460
*/
-- 데이터 삭제 - 휴먼에러 띠띵~ 삐질
SELECT GETDATE()
TRUNCATE TABLE TBL
SELECT GETDATE() -- 2016-02-22 10:28:43.267
SELECT * FROM DBO.TBL
/* NULL */
-- 로그삭제 SHRINKFILE 을 하고 나서 로그백업으로 시점 복원이 가능하냐???
SP_HELPDB TESTDB
DBCC SHRINKFILE(TESTDB_log)
-- 장애복구 하자 : 최종로그백으로 시점 복원해보자.
BACKUP LOG TESTDB to disk='E:\SQLData9\TESTDB.trn'
-- 다른 디비일음으로 시점 복원해보자.
USE [master]
RESTORE DATABASE TESTDB_RE FROM DISK = N'E:\SQLData9\TESTDB.bak' WITH FILE = 1,
MOVE N'TESTDB' TO N'E:\Program Files\Microsoft SQL Server\MSSQL12.GHOST\MSSQL\DATA\TESTDB_RE.mdf',
MOVE N'TESTDB_log' TO N'E:\Program Files\Microsoft SQL Server\MSSQL12.GHOST\MSSQL\DATA\TESTDB_RE_log.ldf', NORECOVERY, NOUNLOAD, STATS = 5
GO
RESTORE LOG TESTDB_RE FROM DISK = N'E:\SQLData9\TESTDB.trn' WITH NOUNLOAD, STATS = 10
, STOPAT = '2016-02-22 10:26:59.470' -- 마지막 정상 트랜재션시간으로 입력
GO
-- 시점 복원한 데이터가 있는지 확인하자.
SELECT * FROM TESTDB_RE.DBO.TBL
/*
COL1 COLDATE
1 2016-02-22 10:26:21.147
2 2016-02-22 10:26:21.147
3 2016-02-22 10:26:21.150
4 2016-02-22 10:26:59.457
5 2016-02-22 10:26:59.460
6 2016-02-22 10:26:59.460
*/
'SQL Server' 카테고리의 다른 글
SQL 미러링 SET 와 복제기능 추가하는 방법 (0) | 2016.03.21 |
---|---|
SQL Server 백업 및 복원 시나리오 스크립트 (0) | 2016.03.17 |
SQL SSMS를 다른 윈도우계정으로 접속하는 방법 (0) | 2016.02.17 |
SQL Server 단일 사용자 모드로 시작 시, 클라이언트 응용 프로그램 제한하기 (0) | 2016.02.12 |
MSDTC 재 설치하는 방법 (0) | 2016.02.11 |
- Total
- Today
- Yesterday