데이터베이스 스냅샷을 만들기(Transact-SQL)
적용 대상: SQL Server
SQL Server 데이터베이스 스냅샷을 만드는 유일한 방법은 Transact-SQL을 사용하는 것입니다. SQL Server Management Studio는 데이터베이스 스냅샷 만들기를 지원하지 않습니다.
필수 조건
복구 모델을 사용할 수 있는 원본 데이터베이스는 다음 필수 조건을 충족해야 합니다.
서버 인스턴스는 데이터베이스 스냅샷을 지원하는 SQL Server 버전을 실행해야 합니다. SQL Server의 데이터베이스 스냅샷 지원에 대한 자세한 내용은 SQL Server 2022의 버전 및 지원하는 기능을 참조하세요.
데이터베이스가 데이터베이스 미러링 세션 내의 미러 데이터베이스가 아닌 한 원본 데이터베이스는 온라인 상태여야 합니다.
미러 데이터베이스에서 데이터베이스 스냅샷을 만들려면 데이터베이스가 동기화된 미러링 상태여야 합니다.
원본 데이터베이스는 확장 가능한 공유 데이터베이스로 구성할 수 없습니다.
SQL Server 2019(15.x) 이전에는 원본 데이터베이스에
MEMORY_OPTIMIZED_DATA
파일 그룹을 포함할 수 없습니다. 메모리 내 데이터베이스 스냅샷에 대한 지원이 SQL Server 2019(15.x)에 추가되었습니다.
Important
다른 주요 고려 사항에 대한 자세한 내용은 데이터베이스 스냅샷(SQL Server)을 참조하세요.
권장 사항
다음 섹션에서는 다음 모범 사례에 관해 설명합니다.
모범 사례: 데이터베이스 스냅샷 명명
스냅샷을 만들기 전에 스냅샷 이름을 지정하는 방법을 고려해야 합니다. 각 데이터베이스 스냅샷에는 고유한 데이터베이스 이름이 필요합니다. 관리 편의를 위해 스냅샷의 이름은 다음과 같이 데이터베이스를 식별하는 정보를 통합할 수 있습니다.
원본 데이터베이스의 이름입니다.
새 이름이 스냅샷에 대한 것임을 나타냅니다.
스냅샷을 만든 날짜 및 시간, 시퀀스 번호, 자정 이후의 시간 등 지정된 데이터베이스에 대한 스냅샷 순서를 구분하기 위한 정보
예를 들어 AdventureWorks2022
데이터베이스에 대한 일련의 스냅샷을 만든다고 가정합니다. 매일 3개의 스냅샷은 24시간 시계에 따라 오전 6시부터 오후 6시 사이에 6시간 간격으로 만들어집니다. 각 일일 스냅샷은 삭제되고 동일한 이름의 새 스냅샷으로 대체되기 전에 24시간 동안 유지됩니다. 각 스냅샷 이름은 시간을 나타내지만 날짜는 나타내지 않습니다.
AdventureWorks_snapshot_0600
AdventureWorks_snapshot_1200
AdventureWorks_snapshot_1800
또는 이러한 일일 스냅샷의 생성 시간이 날마다 달라지는 경우 다음과 같이 덜 정확한 명명 규칙이 더 적합할 수 있습니다.
AdventureWorks_snapshot_morning
AdventureWorks_snapshot_noon
AdventureWorks_snapshot_evening
모범 사례: 데이터베이스 스냅샷 수 제한
시간이 지남에 따라 일련의 스냅샷을 만들면 원본 데이터베이스의 순차 스냅샷이 캡처됩니다. 각 스냅샷은 명시적으로 삭제될 때까지 유지됩니다. 각 스냅샷은 원래 페이지가 업데이트됨에 따라 계속 증가하므로 새 스냅샷을 만든 후 이전 스냅샷을 삭제하여 디스크 공간을 절약할 수 있습니다.
참고 항목
데이터베이스 스냅샷으로 되돌리려면 해당 데이터베이스에서 다른 스냅샷을 삭제해야 합니다.
모범 사례: 데이터베이스 스냅샷에 대한 클라이언트 연결
데이터베이스 스냅샷을 사용하려면 클라이언트에서 찾을 위치를 알고 있어야 합니다. 사용자는 다른 데이터베이스 스냅샷을 만들거나 삭제하는 동안 한 데이터베이스 스냅샷에서 읽을 수 있습니다. 그러나 기존 스냅샷으로 새 스냅샷을 대체하는 경우 클라이언트를 새 스냅샷으로 리디렉션해야 합니다. 사용자는 SQL Server Management Studio 또는 Azure Data Studio를 사용하여 데이터베이스 스냅샷에 수동으로 연결할 수 있습니다. 하지만 프로덕션 환경을 지원하려면 보고 및 작성 클라이언트를 자동으로 데이터베이스의 최신 데이터베이스 스냅샷으로 리디렉션하는 프로그래밍 솔루션을 만들어야 합니다.
사용 권한
데이터베이스를 만들 수 있는 모든 사용자는 데이터베이스 스냅샷을 만들 수 있습니다. 그러나 미러 데이터베이스의 스냅샷을 만들려면 sysadmin 고정 서버 역할의 구성원이어야 합니다.
Transact-SQL을 이용하여 데이터베이스 스냅샷을 만들기
원본 데이터베이스의 현재 크기에 따라 데이터베이스 스냅샷을 저장할 충분한 디스크 공간이 있는지 확인합니다. 데이터베이스 스냅샷의 최대 크기는 스냅샷을 만들 때 원본 데이터베이스의 크기입니다. 더 자세한 정보는 데이터베이스 스냅샷 스파스 파일의 크기 보기(Transact-SQL)를 참조하세요.
절을
CREATE DATABASE
사용하여 파일에 대한 문을 실행합니다AS SNAPSHOT OF
. 스냅샷을 만들려면 원본 데이터베이스를 구성하는 모든 데이터베이스 파일의 논리적 이름을 지정해야 합니다. 구문은 다음과 같습니다.CREATE DATABASE database_snapshot_name ON ( NAME = logical_file_name , FILENAME = 'os_file_name' ) [ , ...n ] AS SNAPSHOT OF source_database_name [;]
인수는 다음과 같습니다.
인수 설명 database_snapshot_name
데이터베이스를 되돌릴 스냅샷의 이름. logical_file_name
원본 데이터베이스가 파일을 참조할 때 SQL Server에서 사용하는 논리적 이름입니다. os_file_name
파일을 만들 때 운영 체제에서 사용한 경로와 파일 이름입니다. source_database_name
원본 데이터베이스. 이 구문에 대한 전체 설명은 CREATE DATABASE(SQL Server Transact-SQL)를 참조하세요.
참고 항목
데이터베이스 스냅샷을 만들 때 로그 파일, 오프라인 파일, 복원 파일, 소멸된 파일은
CREATE DATABASE
문에 허용되지 않습니다.
예제
이러한 예제에서 사용되는 .ss
확장자는 편의를 위한 것이며 필수가 아닙니다. 여러 파일이 포함된 데이터베이스에서는 구문에 따라 모든 파일을 지정해야 합니다. 파일 그룹은 지정되지 않습니다.
A. AdventureWorks 데이터베이스에 대한 스냅샷 만들기
이 예제에서는 AdventureWorks
데이터베이스에 데이터베이스 스냅샷을 만듭니다. 스냅샷 이름 AdventureWorks_dbss_1800
및 스파스 파일의 파일 이름 AdventureWorks_data_1800.ss
는 생성 시각이 오후 6시(18:00시)임을 나타냅니다.
CREATE DATABASE AdventureWorks_dbss1800 ON (
NAME = AdventureWorks,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss'
) AS SNAPSHOT OF AdventureWorks;
GO
B. Sales 데이터베이스에 대한 스냅샷 만들기
이 예제에서는 Sales
데이터베이스에 데이터베이스 스냅샷 sales_snapshot1200
을 만듭니다. 이 예제는 CREATE DATABASE에 파일 그룹이 있는 데이터베이스 만들기와 동일한 예제 데이터베이스입니다.
--Create sales_snapshot1200 as snapshot of the Sales database:
CREATE DATABASE sales_snapshot1200 ON (
NAME = SPri1_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SPri1dat_1200.ss'
),
(
NAME = SPri2_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SPri2dt_1200.ss'
),
(
NAME = SGrp1Fi1_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\mssql\data\SG1Fi1dt_1200.ss'
),
(
NAME = SGrp1Fi2_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SG1Fi2dt_1200.ss'
),
(
NAME = SGrp2Fi1_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SG2Fi1dt_1200.ss'
),
(
NAME = SGrp2Fi2_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SG2Fi2dt_1200.ss'
) AS SNAPSHOT OF Sales;
GO