여태까지 Full Backup + Transaction Log + 차등 Transaction Log 해서
총 3개의 파일이 있어야 (bak - 1, trn - 2) 특정시점이 가능한 줄 알았는데
책 읽다가 이렇게도 되는 거 같아서 해보니 되네
근데 인터넷 검색을 해보면 Full Backup + Transaction Log + 차등 Transaction Log
이런 식으로 하시던데 이유를 아는 분????
무튼 타 사이트에 지금 02시 풀백업, 03시30분부터 4시간 단위로 Trn log 백업을 하는데
하마터면 백업 계획을 바꿔야 할 뻔...........................
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
--테스트용 테이블 생성
CREATE TABLE RestoreTable
(
Seq bigint
,Val1 VARCHAR(10)
,Val2 VARCHAR(20)
,Val3 VARCHAR(20)
,MakeDate Datetime
)
--테스트용 데이터 삽입
INSERT INTO RestoreTable
VALUES
(1,'1','HJH','Computer',GETDATE())
,(2,'2','NEJ','DataAnalysis',GETDATE()-1)
,(3,'3','HGP','Caps',GETDATE()-2)
--데이터 확인
SELECT * FROM RestoreTable WITH(NOLOCK);
BACKUP DATABASE RestoreSpecificPointTestDataBase TO DISK = 'D:\Database\RestoreSpecificPoint_210223.bak'
--정상 삭제
DELETE FROM RestoreTable WHERE Seq = 2; -- 쿼리 실행 시간 22:39:09
--이건 실수로 삭제한 경우
--처음 Full Backup을 복원하게되면 Seq 2, 3이 모두 나옴.
--정상적인 삭제 상황 이후에 대해 복원 불가
--22시39분09초에 정상적인 삭제가 이루어졌고
--22시40분51초에 실수로 잘못 삭제했으니
--그 사이 시간으로 복원하면 됨.
--당황하지 말고 아래 쿼리를 이용하여 트랜잭션 로그 백업
DELETE FROM RestoreTable WHERE Seq = 3; -- 쿼리 실행 시간 22:40:51
--트랜잭션 로그 백업 22:41:01
BACKUP LOG RestoreSpecificPointTestDataBase TO DISK = 'D:\Database\RestoreSpecificPoint_210223.trn'
RESTORE DATABASE RestoredDB
FROM DISK = 'D:\Database\RestoreSpecificPoint_210223.bak'
WITH REPLACE,
NORECOVERY,
MOVE 'RestoreSpecificPointTestDatabase' TO 'D:\Database\RestoredDB.mdf',
MOVE 'RestoreSpecificPointTestDatabase_log' TO 'D:\Database\RestoredDB_log.ldf'
RESTORE DATABASE RestoredDB
FROM DISK = 'D:\Database\RestoreSpecificPoint_210223.trn'
WITH RECOVERY,
STOPAT = '2021-02-23 22:40:01' -- 복원하고자 하는 시간
--짠~~
SELECT * FROM RestoredDB.DBO.RestoreTable
|
cs |
근데 만약에 내가 쓴 글에 있는 프로시저를 이용해서 하는 경우(그래도 위의 방법이 좋은듯^^..)
--> scalability.tistory.com/39?category=755854
1
2
3
4
5
|
EXEC dbo.DELETED_RECOVERY_STEP_1 'RestoreTable'
--0x30001400020000000000000063327501D7AC00000500000300200023002F00324E454A44617461416E616C79736973
--0x30001400030000000000000063327501D6AC000005000003002000230027003348475043617073
EXEC dbo.DELETED_RECOVERY_STEP_2 'RestoreTable',0x30001400020000000000000063327501D7AC00000500000300200023002F00324E454A44617461416E616C79736973
EXEC dbo.DELETED_RECOVERY_STEP_2 'RestoreTable',0x30001400030000000000000063327501D6AC000005000003002000230027003348475043617073
|
cs |
STEP_1 프로시저를 실행하면 2개의 행이 나왔음
--> Seq 2, 3 두 개의 ROW 를 삭제 했으니 그거에 대한 Transaction Log
RowLog Contents 0 컬럼의 값이 두번째 행, 세번째 행에 있는 값이고
STEP_2 프로시저에 넣어서 실행하면 아래처럼 조회가 되긴 함
다만 해당 글 본문에 있듯이 실제로 운영하는 서버는 트랜잭션이 무수히 많이 일어나기 때문에..
SELECT * FROM fn_dblog(NULL, NULL) 했을 때 조회 자체가 안 됐던 거 같아서.....
근데 트랜잭션 로그를 꾸준히 백업을 받는다는 가정하에...
fn_dblog 여기에도 그럼 데이터가 줄어드나? 나중에 확인해봐야지! 아니면 알려주시면 ㄳ!
--> 트랜잭션 로그 백업을 하면 줄어드는게 맞는거 같기도 하고.. 아닌 거 같기도 하고?
21시에 트랜잭션 로그 백업한 기록이 있는데 데이터는 20시35분정도부터 존재 함
근데 사용자가 그렇게 많지도 않은데.. 자동화창고라 트랜잭션이 많아서 그런가
3시간 마다 트랜잭션 로그 백업 중인데 여기는 데이터 건 수가 한 110만 건 되는듯?
조회 하는 데에만 6~7분 소요 됨
'DB > MS-SQL' 카테고리의 다른 글
test (0) | 2023.02.23 |
---|---|
MSSQL 각 테이블 별로 MODEL 생성 for C# (1) | 2021.06.16 |
MSSQL DELETE 복원 (0) | 2021.02.23 |
MSSQL 특정 테이블 스키마 생성 스크립트 (0) | 2021.02.23 |
MSSQL FULL 백업 및 TRANSACTION LOG 백업 프로시저 (0) | 2021.02.23 |