데이터베이스 스냅숏 만들기(Transact-SQL)Create a Database Snapshot (Transact-SQL)

SQL ServerSQL Server 데이터베이스 스냅숏은 Transact-SQLTransact-SQL을 사용해서만 만들 수 있습니다.The only way to create a SQL ServerSQL Server database snapshot is to use Transact-SQLTransact-SQL. SQL Server Management StudioSQL Server Management Studio 는 데이터베이스 스냅숏 만들기를 지원하지 않습니다. does not support the creation of database snapshots.

시작하기 전에 Before You Begin

필수 구성 요소 Prerequisites

복구 모델을 사용할 수 있는 원본 데이터베이스는 다음 사전 요구 사항을 충족해야 합니다.The source database, which can use any recovery model, must meet the following prerequisites:

  • 서버 인스턴스는 데이터베이스 스냅숏을 지원하는 SQL ServerSQL Server 버전을 실행해야 합니다.The server instance must be running an edition of SQL ServerSQL Server that supports database snapshot. SQL Server 2017SQL Server 2017의 데이터베이스 스냅숏 지원에 대한 자세한 내용은 [SQL Server 2016 버전에서 지원하는 기능](~/sql-server/editions-and-supported-features-for-sql-server-2016.md)을 참조하세요.For information about support for database snapshots in SQL Server 2017SQL Server 2017, see Features Supported by the Editions of SQL Server 2016.

  • 데이터베이스 미러링 세션의 미러 데이터베이스가 아닌 경우 원본 데이터베이스는 온라인 상태여야 합니다.The source database must be online, unless the database is a mirror database within a database mirroring session.

  • 미러 데이터베이스에서 데이터베이스 스냅숏을 만들려면 데이터베이스가 동기화된 미러링 상태여야 합니다.To create a database snapshot on a mirror database, the database must be in the synchronized mirroring state.

  • 원본 데이터베이스는 확장 가능한 공유 데이터베이스로 구성할 수 없습니다.The source database cannot be configured as a scalable shared database.

  • 원본 데이터베이스에는 MEMORY_OPTIMIZED_DATA 파일 그룹이 포함될 수 없습니다.The source database must not contain a MEMORY_OPTIMIZED_DATA filegroup. 자세한 내용은 메모리 내 OLTP에 대한 지원되지 않는 SQL Server 기능을 참조하세요.For more information, see Unsupported SQL Server Features for In-Memory OLTP.

중요

다른 주요 고려 사항에 대한 자세한 내용은 데이터베이스 스냅숏(SQL Server)을 사용해서만 만들 수 있습니다.For information about other significant considerations, see Database Snapshots (SQL Server).

권장 사항 Recommendations

이 섹션에서는 다음과 같은 최상의 방법에 대해 설명합니다.This section discusses the following best practices:

최선의 구현 방법: 데이터베이스 스냅숏 명명 Best Practice: Naming Database Snapshots

스냅숏의 이름은 중요하므로 스냅숏을 만들기 전에 고려해야 합니다.Before creating snapshots, it is important to consider how to name them. 각 데이터베이스 스냅숏에는 고유한 데이터베이스 이름이 필요합니다.Each database snapshot requires a unique database name. 쉬운 관리를 위해 데이터베이스를 식별하는 다음과 같은 정보를 스냅숏 이름에 첨가할 수 있습니다.For administrative ease, the name of a snapshot can incorporate information that identifies the database, such as:

  • 원본 데이터베이스의 이름입니다.The name of the source database.

  • 스냅숏 이름임을 나타내는 부분An indication that the new name is for a snapshot.

  • 스냅숏을 만든 날짜 및 시간, 시퀀스 번호, 자정 이후의 시간 등 지정된 데이터베이스에 대한 스냅숏 순서를 구분하기 위한 정보The creation date and time of the snapshot, a sequence number, or some other information, such as time of day, to distinguish sequential snapshots on a given database.

    예를 들어 AdventureWorks2012AdventureWorks2012 데이터베이스에 대한 일련의 스냅숏을 만든다고 가정합니다.For example, consider a series of snapshots for the AdventureWorks2012AdventureWorks2012 database. 24시간 표기법을 기준으로 오전 6시와 오후 6시 사이에 6시간 간격으로Three daily snapshots are created at 6-hour intervals between 6 A.M. 세 개의 일일 스냅숏을 만듭니다.and 6 P.M., based on a 24-hour clock. 각 일일 스냅숏은 삭제 전 24시간 동안 보존되며 이후에 같은 이름의 새 스냅숏으로 대체됩니다.Each daily snapshot is kept for 24 hours before being dropped and replaced by a new snapshot of the same name. 각 스냅숏 이름은 날짜가 아닌 시간만 나타냅니다.Note that each snapshot name indicates the hour, but not the day:

AdventureWorks_snapshot_0600  
AdventureWorks_snapshot_1200  
AdventureWorks_snapshot_1800  

이러한 일일 스냅숏을 만드는 시간이 일정하지 않을 경우 보다 덜 정확한 명명 규칙을 사용하는 것이 좋습니다. 예를 들면 다음과 같습니다.Alternatively, if the creation time of these daily snapshots varies from day to day, a less precise naming convention might be preferable, for example:

AdventureWorks_snapshot_morning  
AdventureWorks_snapshot_noon  
AdventureWorks_snapshot_evening  

최선의 구현 방법: 데이터베이스 스냅숏 수 제한 Best Practice: Limiting the Number of Database Snapshots

원본 데이터베이스의 순차적 스냅숏을 캡처하기 위해 일정 기간 동안 일련의 스냅숏을 만들 수 있습니다.Creating a series of snapshots over time captures sequential snapshots of the source database. 각 스냅숏은 명시적으로 삭제할 때까지 유지됩니다.Each snapshot persists until it is explicitly dropped. 원본 페이지를 업데이트함에 따라 각 스냅숏의 크기도 증가하므로 새 스냅숏을 만든 후에는 디스크 공간 유지를 위해 기존의 스냅숏을 지울 수 있습니다.Because each snapshot will continue to grow as original pages are updated, you may want to conserve disk space by deleting an older snapshot after creating a new snapshot.

참고!Note! 데이터베이스 스냅숏으로 되돌리려면 해당 데이터베이스의 다른 스냅숏을 삭제해야 합니다.To revert to a database snapshot, you need to delete any other snapshots from that database.

최선의 구현 방법: 데이터베이스 스냅숏에 대한 클라이언트 연결 Best Practice: Client Connections to a Database Snapshot

클라이언트가 데이터베이스 스냅숏을 사용하려면 그 위치를 알아야 합니다.To use a database snapshot, clients need to know where to find it. 사용자가 데이터베이스 스냅숏을 읽는 동안 다른 스냅숏이 생성되거나 삭제될 수 있습니다.Users can read from one database snapshot while another is being created or deleted. 따라서 기존의 스냅숏을 새 스냅숏으로 대체하면 클라이언트를 새 스냅숏으로 리디렉션해야 합니다.However, when you substitute a new snapshot for an existing one, you need to redirect clients to the new snapshot. 사용자는 SQL Server Management StudioSQL Server Management Studio를 이용해 수동으로 데이터베이스 스냅숏에 연결할 수 있습니다.Users can manually connect to a database snapshot by means of SQL Server Management StudioSQL Server Management Studio. 하지만 프로덕션 환경을 지원하려면 보고 및 작성 클라이언트를 자동으로 데이터베이스의 최신 데이터베이스 스냅숏으로 리디렉션하는 프로그래밍 솔루션을 만들어야 합니다.However, to support a production environment, you should create a programmatic solution that transparently directs report-writing clients to the latest database snapshot of the database.

사용 권한 Permissions

데이터베이스를 만들 수 있는 모든 사용자는 데이터베이스 스냅숏을 만들 수 있습니다. 그러나 미러 데이터베이스의 스냅숏을 만들려면 sysadmin 고정 서버 역할의 멤버여야 합니다.Any user who can create a database can create a database snapshot; however, to create a snapshot of a mirror database, you must be a member of the sysadmin fixed server role.

데이터베이스 스냅숏을 만드는 방법(Transact-SQL 사용) How to Create a Database Snapshot (Using Transact-SQL)

데이터베이스 스냅숏을 만들려면To create a database snapshot

이 프로시저의 예는 이 섹션의 뒷부분에 나오는 예제(Transact-SQL)을 참조하세요.For an example of this procedure, see Examples (Transact-SQL), later in this section.

  1. 원본 데이터베이스의 현재 크기를 기준으로 데이터베이스 스냅숏을 저장할 수 있는 충분한 디스크 공간이 있는지 확인합니다.Based on the current size of the source database, ensure that you have sufficient disk space to hold the database snapshot. 데이터베이스 스냅숏의 최대 크기는 스냅숏을 생성할 때의 원본 데이터베이스 크기입니다.The maximum size of a database snapshot is the size of the source database at snapshot creation. 자세한 내용은 데이터베이스 스냅숏 스파스 파일의 크기 보기(Transact-SQL)를 참조하세요.For more information, see View the Size of the Sparse File of a Database Snapshot (Transact-SQL).

  2. AS SNAPSHOT OF 절을 사용하여 파일에서 CREATE DATABASE 문을 실행합니다.Issue a CREATE DATABASE statement on the files using the AS SNAPSHOT OF clause. 스냅숏을 만들려면 원본 데이터베이스를 구성하는 모든 데이터베이스 파일의 논리적 이름을 지정해야 합니다.Creating a snapshot requires specifying the logical name of every database file of the source database. 구문은 다음과 같습니다.The syntax is as follows:

    CREATE DATABASE database_snapshot_nameCREATE DATABASE database_snapshot_name

    ONON

    ((

    NAME =logical_file_name,NAME =logical_file_name,

    FILENAME ='os_file_name'FILENAME ='os_file_name'

    ) [ ,...n ]) [ ,...n ]

    AS SNAPSHOT OF source_database_nameAS SNAPSHOT OF source_database_name

    [;][;]

    여기서 source_database_name 은 원본 데이터베이스이고, logical_file_name은 SQL Server에서 파일을 참조할 때 사용되는 논리적 이름이고, os_file_name 은 운영 체제에서 파일을 만드는 데 사용되는 경로 및 파일 이름이고, database_snapshot_name 은 데이터베이스를 되돌릴 스냅숏의 이름입니다.Where source_database_name is the source database, logical_file_name is the logical name used in SQL Server when referencing the file, os_file_name is the path and file name used by the operating system when you create the file, and database_snapshot_name is the name of the snapshot to which you want to revert the database. 이 구문에 대한 자세한 내용은 CREATE DATABASE(SQL Server Transact-SQL)을 사용해서만 만들 수 있습니다.For a full description of this syntax, see CREATE DATABASE (SQL Server Transact-SQL).

    참고

    데이터베이스 스냅숏을 만들 때 로그 파일, 오프라인 파일, 복원 파일 및 존재하지 않는 파일은 CREATE DATABASE 문에 사용할 수 없습니다.When you create a database snapshot, log files, offline files, restoring files, and defunct files are not allowed in the CREATE DATABASE statement.

예제(Transact-SQL) Examples (Transact-SQL)

참고

이 예에서 사용된 .ss 확장명은 임의로 지정됩니다.The .ss extension used in the examples is arbitrary.

이 섹션에서는 다음과 같은 예를 보여 줍니다.This section contains the following examples:

1. A. AdventureWorks 데이터베이스에 대한 스냅숏 만들기Creating a snapshot on the AdventureWorks database

이 예에서는 AdventureWorks 데이터베이스에 대한 데이터베이스 스냅숏을 만듭니다.This example creates a database snapshot on the AdventureWorks database. 스냅숏 이름 AdventureWorks_dbss_1800및 스파스 파일의 파일 이름 AdventureWorks_data_1800.ss는 생성 시간이 오후 6시(18:00시)임을 나타냅니다.The snapshot name, AdventureWorks_dbss_1800, and the file name of its sparse file, AdventureWorks_data_1800.ss, indicate the creation time, 6 P.M (1800 hours).

CREATE DATABASE AdventureWorks_dbss1800 ON  
( NAME = AdventureWorks_Data, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss' )  
AS SNAPSHOT OF AdventureWorks;  
GO  

2. B. Sales 데이터베이스에 대한 스냅숏 만들기Creating a snapshot on the Sales database

이 예에서는 sales_snapshot1200데이터베이스에 대한 데이터베이스 스냅숏 Sales 을 만듭니다.This example creates a database snapshot, sales_snapshot1200, on the Sales database. 이 데이터베이스는 CREATE DATABASE(SQL Server Transact-SQL)의 "파일 그룹을 가진 데이터베이스 만들기" 예제에서 만들었습니다.This database was created in the example, "Creating a database that has filegroups," in CREATE DATABASE (SQL Server Transact-SQL).

--Creating sales_snapshot1200 as snapshot of the  
--Sales database:  
CREATE DATABASE sales_snapshot1200 ON  
( NAME = SPri1_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SPri1dat_1200.ss'),  
( NAME = SPri2_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SPri2dt_1200.ss'),  
( NAME = SGrp1Fi1_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\mssql\data\SG1Fi1dt_1200.ss'),  
( NAME = SGrp1Fi2_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SG1Fi2dt_1200.ss'),  
( NAME = SGrp2Fi1_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SG2Fi1dt_1200.ss'),  
( NAME = SGrp2Fi2_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SG2Fi2dt_1200.ss')  
AS SNAPSHOT OF Sales;  
GO  

참고 항목See Also

CREATE DATABASE(SQL Server Transact-SQL) CREATE DATABASE (SQL Server Transact-SQL)
데이터베이스 스냅숏(SQL Server) Database Snapshots (SQL Server)