사용자 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
'MSSQL' 카테고리의 다른 글
[MSSQL] ERROR CODE 666. UNIQUIFIER 고유 식별자 최대값 초과 (0) | 2024.08.22 |
---|---|
[MSSQL] SET TRUSTWORTHY ON 옵션 DB 복원 시 주의점 (0) | 2024.08.21 |
[MSSQL] 데이터베이스 offline 처리 후 drop하면 mdf, ldf 파일은 지워질까 안지워질까? (0) | 2024.07.31 |
[MSSQL] 주석 없는 개체 생성 스크립트 (0) | 2024.07.31 |
[MSSQL] 인덱스 없는(HEAP) 테이블 조회 (0) | 2024.07.17 |