DB (데이터베이스)/MS-SQL

[ms-sql] 복구모델 '단순' 일 때 복원방법

뜽배 2024. 2. 2. 11:02
728x90
반응형


우선 ms-sql에서 복구모델이 '단순'일 때는 트랜잭션 로그 백업을 받을 수 없다. 

복구모델이 '단순'일 때 백업화면을 보면

 

 


위와 같이 '전체', '차등' 두 개의 백업을 선택할 수 있다.


내가 궁금해 한 것은 이 부분이다. 복구모델이 '단순'이더라도 트랜잭션 로그가 쌓이는 건 분명하다.

복구모델이 '단순'이면 트랜잭션이 완료되었을 때 사라진다. 

그럼 트랜잭션이 완료 되지 않고 트랜잭션 로그에 쌓인 상태에 전체백업을 받으면 어떻게 될까?

이게 내가 가진 의문이였다. 따라서 테스트를 진행해본 결과를 공유하고자 한다.

DB에서 transaction을 수행 후 종료하지 않았다.

1. 트랜잭션 시작 후 종료하지 않음

/* 트랜잭션 시작*/
create table a (a varchar(100), b varchar(100));

begin tran

insert into a values (REPLICATE('A', 100), REPLICATE('A', 100));

select count(*) from a;
--> '1'

/* 현재 트랜잭션이 있는지 확인하는 쿼리*/
dbcc opentran
--> 실행중인 트랜잭션이 있다고 나온다



이 상태 일 때 DB 전체백업을 받은 후 백업받은 파일로 복원을 하면 어떻게 될까?

 

2. 전체백업 복원


전체 백업 이후

복원할 때 '옵션'탭에서
* 기존 데이터베이스 덮어쓰기 (with replace)
* 대상 데이터베이스에 대한 기존 연결 닫기
옵션을 선택해서 복원을 진행 하였다.


select count(*) from a
--> '0'

/* 현재 트랜잭션이 있는지 확인하는 쿼리*/
dbcc opentran
--> 실행중인 트랜잭션이 없다고 나온다



위와 같이 복구모델이 '단순'일 때는 완료되지 않은 트랜잭션은 복구 할 수 없으며, 

백업하기 전 진행중인 트랜잭션이 있는지 확인하고, session을 전부 끊고 백업을 받도록 하여야 한다.
물론 완벽하게 복구하려면 복구모델을 '전체'로 하는것을 권장한다.

728x90
반응형