여태까지 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(NULLNULL) 했을 때 조회 자체가 안 됐던 거 같아서.....

 

근데 트랜잭션 로그를 꾸준히 백업을 받는다는 가정하에...

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