데이터베이스 스냅샷 만들기(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개의 스냅샷 오전 6시부터 오후 6시 사이의 6시간 간격으로 24시간 시계에 따라 만들어집니다. 각 매일 스냅샷 삭제하고 같은 이름의 새 스냅샷 대체되기 전에 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을 사용하여 데이터베이스 스냅샷 만들기

  1. 원본 데이터베이스의 현재 크기에 따라 데이터베이스 스냅샷 저장할 디스크 공간이 충분한지 확인합니다. 데이터베이스 스냅샷 최대 크기는 스냅샷 만들 때 원본 데이터베이스의 크기입니다. 자세한 내용은 데이터베이스 스냅샷의 스파스 파일 크기 보기(Transact-SQL)를 참조하세요.

  2. 절을 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시(1800시간)의 생성 시간을 나타냅니다.

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_snapshot1200만듭니다. 이 예제는 CREATE DATABASE에 파일 그룹이 있는 데이터베이스 만들기와 동일한 예제 데이터베이스입니다.Sales

--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