MSSQL

[MSSQL] 스냅샷DB가 있는 경우 데이터베이스 백업 오류 현상

띠옹떼옹 2024. 8. 7. 20:02

사용자 db만 백업하고 싶을 때 대상 데이터베이스 리스트업 시, 주로 조건을 아래와 같이 설정하는데
스냅샷 db가 있는 경우 스냅샷 db를 백업하려고 해서 오류가 발생한 경우가 있다.

select *
from master.sys.databases
where database_id > 4		-- system db 제외
and state_desc = 'ONLINE'	-- online 상태인 db 만

 

- 원본 데이터베이스 : test_snapshot

- 데이터베이스 스냅샷 : test_snapshot_202408071045

 

스냅샷db가 is_read_only값이 1이라서 그런가 하고 찾아보니 읽기 전용 db도 백업/복원은 가능하다

msdn을 찾아보자 

https://learn.microsoft.com/ko-kr/sql/relational-databases/databases/view-a-database-snapshot-sql-server?view=sql-server-ver16

위 url 내용중에 

 


스냅샷은 원본 데이터베이스의 상태를 저장하는 것이므로 source_database_id값이 원본 데이터베이스 값을 가진다.
해당 조건을 추가해주자

select	*
from	master.sys.databases
where	database_id > 4				-- system db 제외
and		state_desc = 'ONLINE'		-- online 상태인 db 만 
and		source_database_id is NULL	-- 스냅샷db 제외 조건 추가

 

스냅샷db가 잘 제외되었다.

데이터베이스 스냅샷이 있는 인스턴스의 백업 스크립트 내용중, 데이터베이스 리스트업하는 부분에 해당 조건을 추가하여 백업시 발생하는 오류를 방지할 수 있도록 하자.


테스트 쿼리 전체 

-- 테스트용 db 기본 설정으로 만들어주고 
create database test_snapshot

-- 위에서 만든 db를 원본 db로 하여 스냅샷을 생성해주자
create database test_snapshot_202408071045
on
(	
	-- 원본 db 논리명
	name = test_snapshot	
	-- 스파스 파일의 파일 이름
,	filename = 'D:\test\test_snapshot_202408071045.ss'
)
as snapshot of test_snapshot	-- 원본 db명

-- db 리스트 확인
select *
from master.sys.databases
where database_id > 4		-- system db 제외
and state_desc = 'ONLINE'	-- online 상태인 db 만 

-- 스냅샷 제외 조건 추가 
select	*
from	master.sys.databases
where	database_id > 4			-- system db 제외
and		state_desc = 'ONLINE'	-- online 상태인 db 만 
and		source_database_id is NULL

 


 

참고 url : https://learn.microsoft.com/ko-kr/sql/relational-databases/databases/create-a-database-snapshot-transact-sql?view=sql-server-ver16

 

데이터베이스 스냅샷을 만들기(Transact-SQL) - SQL Server

Transact-SQL을 사용하여 SQL Server 데이터베이스 스냅샷을 만드는 방법을 알아보세요. 스냅샷을 만들기 위한 필수 구성 요소 및 모범 사례에 대해 알아봅니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/sql/relational-databases/databases/view-a-database-snapshot-sql-server?view=sql-server-ver16