다음을 통해 공유


DBCC CLONEDATABASE(Transact-SQL)

적용 대상: SQL Server

쿼리 최적화 프로그램 관련 성능 문제를 조사하기 위해 사용하여 DBCC CLONEDATABASE 데이터베이스의 스키마 전용 읽기 전용 복사본을 생성합니다.

Transact-SQL 구문 표기 규칙

구문

DBCC CLONEDATABASE
(
    source_database_name
    ,  target_database_name
)
    [ WITH { [ NO_STATISTICS ] [ , NO_QUERYSTORE ] [ , VERIFY_CLONEDB | SERVICEBROKER ] [ , BACKUP_CLONEDB ] } ]

인수

source_database_name

복사할 데이터베이스의 이름입니다.

target_database_name

원본 데이터베이스를 복사할 데이터베이스의 이름입니다. 이 데이터베이스는 DBCC CLONEDATABASE로 만들며, 아직 존재하지 않아야 합니다.

NO_STATISTICS

적용 대상: SQL Server 2014(12.x) 서비스 팩 2 CU 3, SQL Server 2016(13.x) 서비스 팩 1 이상 버전.

클론에서 테이블/인덱스 통계를 제외해야 하는지 여부를 지정합니다. 이 옵션을 지정하지 않으면 테이블/인덱스 통계가 자동으로 포함됩니다.

NO_QUERYSTORE

적용 대상: SQL Server 2016(13.x) 서비스 팩 1 이상 버전.

클론에서 쿼리 저장소 데이터를 제외해야 하는지 여부를 지정합니다. 이 옵션을 지정하지 않으면 원본 데이터베이스에 쿼리 저장소가 사용하도록 설정된 경우 쿼리 저장소 데이터가 클론에 복사됩니다.

VERIFY_CLONEDB

적용 대상: SQL Server 2014(12.x) 서비스 팩 3, SQL Server 2016(13.x) 서비스 팩 2, SQL Server 2017(14.x) CU 8 이상 버전.

새로운 데이터베이스의 일관성을 확인합니다. VERIFY_CLONEDB를 사용하면 통계와 쿼리 저장소 컬렉션이 사용하지 않도록 설정되므로 WITH VERIFY_CLONEDB, NO_STATISTICS, NO_QUERYSTORE를 실행하는 것과 같습니다.

다음 명령을 사용하여 복제된 데이터베이스가 확인되었는지 확인할 수 있습니다.

SELECT DATABASEPROPERTYEX('clone_database_name', 'IsVerifiedClone');

SERVICEBROKER

적용 대상: SQL Server 2014(12.x) 서비스 팩 3, SQL Server 2016(13.x) 서비스 팩 2, SQL Server 2017(14.x) CU 8 이상 버전.

Service broker 관련 시스템 카탈로그에 복제가 포함되어야 하는 경우를 지정합니다. SERVICEBROKER 옵션은 VERIFY_CLONEDB와 함께 사용할 수 없습니다.

BACKUP_CLONEDB

적용 대상: SQL Server 2014(12.x) 서비스 팩 3, SQL Server 2016(13.x) 서비스 팩 2, SQL Server 2017(14.x) CU 8 이상 버전.

복제 데이터베이스의 백업을 만들고 확인합니다. VERIFY_CLONEDB와 함께 사용하는 경우 백업을 수행하기 전에 클론 데이터베이스가 확인됩니다.

설명

생성된 DBCC CLONEDATABASE 데이터베이스의 복제본은 문제 해결 및 진단 목적으로만 사용됩니다. 복제본은 원래 데이터베이스의 읽기 전용 스키마 전용 복사본이며 개체가 복사되는 데 제한이 있습니다. 자세한 내용은 지원되는 개체 섹션을 참조하세요. 복제 데이터베이스의 다른 사용은 지원되지 않습니다.

다음 유효성 검사는 DBCC CLONEDATABASE에 의해 수행됩니다. 유효성 검사 중 하나라도 실패할 경우 명령이 실패합니다.

  • 원본 데이터베이스는 사용자 데이터베이스여야 합니다. 시스템 데이터베이스(master, model, msdb, tempdb, distribution 데이터베이스 등)는 복제할 수 없습니다.
  • 원본 데이터베이스는 온라인 상태이거나 읽을 수 있어야 합니다.
  • 복제 데이터베이스와 동일한 이름을 사용하는 데이터베이스가 없어야 합니다.
  • 이 명령은 사용자 트랜잭션에 없습니다.

모든 유효성 검사가 성공할 경우 다음 작업을 통해 원본 데이터베이스의 복제가 수행됩니다.

  • 원본과 동일한 파일 레이아웃을 사용하되 model 데이터베이스의 기본 파일 크기를 사용하는 새 대상 데이터베이스를 만듭니다.
  • 원본 데이터베이스의 내부 스냅샷을 만듭니다.
  • 원본에서 대상 데이터베이스로 시스템 메타데이터를 복사합니다.
  • 원본에서 대상 데이터베이스로 모든 개체의 모든 스키마를 복사합니다.
  • 원본에서 대상 데이터베이스로 모든 인덱스의 통계를 복사합니다.

대상 데이터베이스의 모든 파일은 model 데이터베이스에서 크기 및 증가 설정을 상속합니다. 대상 데이터베이스의 파일 이름은 <source_file_name_underscore_random number> 규칙을 따릅니다. 생성된 파일 이름이 대상 폴더에 이미 있을 경우 DBCC CLONEDATABASE가 실패합니다.

DBCC CLONEDATABASEmodel 데이터베이스에서 생성된 사용자 개체(테이블, 인덱스, 스키마, 역할 등)가 있는 경우 클론 생성을 지원하지 않습니다. model 데이터베이스에 사용자 개체가 있는 경우 다음 오류 메시지와 함께 데이터베이스 복제가 실패합니다.

Msg 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in object <system table> with unique index 'index name'. The duplicate key value is <key value>

중요

columnstore 인덱스가 있는 경우 복제 데이터베이스에서 columnstore 인덱스로 쿼리를 조정할 때 고려 사항을 참조하여 DBCC CLONEDATABASE 명령을 실행하기 전에 columnstore 인덱스 통계를 업데이트하세요. SQL Server 2019(15.x)부터 DBCC CLONEDATABASE 명령이 이 정보를 자동으로 수집하므로 위 문서에 설명된 수동 단계가 더 이상 필요하지 않습니다.

columnstore 인덱스에 대한 통계 Blob

SQL Server 2019(15.x)부터 DBCC CLONEDATABASE는 columnstore 인덱스에 대한 통계 Blob을 자동으로 캡처하므로 수동 단계가 필요하지 않습니다. DBCC CLONEDATABASE는 데이터를 복사하지 않고 쿼리 성능 문제를 해결하는 데 필요한 모든 요소가 포함된 데이터베이스의 스키마 전용 복사본을 만듭니다. 이전 버전의 SQL Server에서 이 명령은 columnstore 인덱스 쿼리 문제를 정확히 해결하는 데 필요한 통계를 복사하지 않으므로 수동 단계를 통해 이 정보를 캡처해야 했습니다.

복제된 데이터베이스의 데이터 보안과 관련된 자세한 내용은 복제 된 데이터베이스의 데이터 보안 이해를 참조하세요.

내부 데이터베이스 스냅샷

DBCC CLONEDATABASE는 복사를 수행하는 데 필요한 트랜잭션 일관성을 위해 원본 데이터베이스의 내부 데이터베이스 스냅샷을 사용합니다. 이 스냅샷을 사용하면 이러한 명령이 실행될 때 차단 및 동시성 문제를 방지할 수 있습니다. 스냅샷을 만들 수 없는 경우 DBCC CLONEDATABASE가 실패합니다.

복사 프로세스의 다음 단계 동안 데이터베이스 수준 잠금이 유지됩니다.

  • 원본 데이터베이스 유효성 검사
  • 원본 데이터베이스에 대한 공유(S) 잠금 가져오기
  • 원본 데이터베이스의 스냅샷 만들기
  • 클론 데이터베이스 만들기(model 데이터베이스에서 상속되는 빈 데이터베이스)
  • 클론 데이터베이스에 대한 배타적(X) 잠금 가져오기
  • 복제 데이터베이스에 메타데이터 복사
  • 모든 데이터베이스 잠금 해제

명령 실행이 종료되는 즉시 내부 스냅샷이 삭제됩니다. 복제된 데이터베이스에서 TRUSTWORTHYDB_CHAINING 옵션이 해제됩니다.

지원되는 개체

대상 데이터베이스에서 다음 개체만 복제할 수 있습니다. 암호화된 개체가 복제되지만 복제 데이터베이스에서 사용할 수 없습니다. 다음 섹션에 나열되지 않은 모든 개체는 클론에서 지원되지 않습니다.

  • APPLICATION ROLE
  • AVAILABILITY GROUP
  • COLUMNSTORE INDEX
  • CDB
  • CDC
  • 변경 내용 추적 6, 7, 8
  • CLR1, 2
  • DATABASE PROPERTIES
  • DEFAULT
  • FILES AND FILEGROUPS
  • 전체 텍스트3
  • FUNCTION
  • INDEX
  • LOGIN
  • PARTITION FUNCTION
  • PARTITION SCHEME
  • 프로시저4
  • 쿼리 저장소2, 5
  • ROLE
  • RULE
  • SCHEMA
  • SEQUENCE
  • SPATIAL INDEX
  • STATISTICS
  • SYNONYM
  • 9
  • 메모리 최적화 테이블2
  • FILESTREAM 및 FILETABLE 개체1, 2
  • TRIGGER
  • TYPE
  • UPGRADED DB
  • USER
  • VIEW
  • XML INDEX
  • XML SCHEMA COLLECTION

1 SQL Server 2014(12.x) 서비스 팩 2 CU 3부터.

2 SQL Server 2016(13.x) 서비스 팩 1부터.

3 SQL Server 2016(13.x) 서비스 팩 1 CU 2부터.

4 Transact-SQL 프로시저는 SQL Server 2014(12.x) 서비스 팩 2부터 모든 릴리스에서 지원됩니다. CLR 프로시저는 SQL Server 2014(12.x) 서비스 팩 2 CU 3부터 지원됩니다. 고유하게 컴파일된 프로시저는 SQL Server 2016(13.x) 서비스 팩 1부터 지원됩니다.

5 쿼리 저장소 데이터는 원본 데이터베이스에 사용하도록 설정된 경우에만 복사됩니다. 쿼리 저장소의 일부로 최신 런타임 통계를 복사하려면 DBCC CLONEDATABASE를 실행하기 전에 sp_query_store_flush_db를 실행하여 쿼리 저장소에 런타임 통계를 플러시합니다.

6 SQL Server 2016(13.x) 서비스 팩 2 CU 10부터.

7 SQL Server 2017(14.x) 서비스 팩 2 CU 17부터.

8 SQL Server 2019(15.x) CU 1 이상 버전부터.

9 복제되지 않은 것으로 플래그가 is_ms_shipped 지정된 대부분의 시스템 테이블

사용 권한

sysadmin 고정 서버 역할의 멤버 자격이 필요합니다.

오류 로그 메시지

다음 메시지는 복제 프로세스 중에 오류 로그에 기록되는 메시지의 예입니다.

2018-03-26 15:33:56.05 spid53 Database cloning for 'sourcedb' has started with target as 'sourcedb_clone'.

2018-03-26 15:33:56.46 spid53 Starting up database 'sourcedb_clone'.

2018-03-26 15:33:57.80 spid53 Setting database option TRUSTWORTHY to OFF for database 'sourcedb_clone'.

2018-03-26 15:33:57.80 spid53 Setting database option DB_CHAINING to OFF for database 'sourcedb_clone'.

2018-03-26 15:33:57.88 spid53 Starting up database 'sourcedb_clone'.

2018-03-26 15:33:57.91 spid53 Database 'sourcedb_clone' is a cloned database. A cloned database should be used for diagnostic purposes only and is not supported for use in a production environment.

2018-03-26 15:33:57.92 spid53 Database cloning for 'sourcedb' has finished. Cloned database is 'sourcedb_clone'.

SQL Server용 서비스 팩 정보

서비스 팩은 누적됩니다. 각 새 서비스 팩에는 이전 서비스 팩에 있는 모든 수정 사항과 새 수정 사항이 포함되어 있습니다. 최신 서비스 팩과 해당 서비스 팩에 대한 최신 누적 업데이트를 적용하는 것이 좋습니다. 최신 서비스 팩을 설치하기 전에 이전 서비스 팩을 설치할 필요가 없습니다. 최신 서비스 팩 및 최신 누적 업데이트에 대한 자세한 내용은 SQL Server에 대한 최신 업데이트 및 버전 기록의 표 1을 참조하세요.

참고 항목

DBCC CLONEDATABASE에서 생성된 새로 생성된 데이터베이스는 프로덕션 데이터베이스로 사용할 수 없으며 주로 문제 해결 및 진단 목적으로 사용됩니다. 데이터베이스를 만든 후 복제된 데이터베이스를 분리하는 것이 좋습니다.

데이터베이스 속성

DATABASEPROPERTYEX('dbname', 'IsClone')는 데이터베이스가 DBCC CLONEDATABASE를 사용하여 생성된 경우에 1을 반환합니다.

DATABASEPROPERTYEX('dbname', 'IsVerifiedClone')는 데이터베이스가 WITH VERIFY_CLONEDB를 사용하여 성공적으로 확인된 경우에 1을 반환합니다.

예제

A. 스키마, 통계 및 쿼리 저장소를 포함하는 데이터베이스의 클론 만들기

다음 예제에서는 스키마, 통계 및 쿼리 저장소 데이터를 포함하는 AdventureWorks2022 데이터베이스의 클론을 만듭니다(SQL Server 2016(13.x) 서비스 팩 1 이상 버전).

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone);
GO

B. 통계가 없는 데이터베이스의 스키마 전용 클론 만들기

다음 예제에서는 통계를 포함하지 않는 AdventureWorks2022 데이터베이스의 클론을 만듭니다(SQL Server 2014(12.x) 서비스 팩 2 CU 3 이상 버전).

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS;
GO

C. 통계 및 쿼리 저장소가 없는 데이터베이스의 스키마 전용 클론 만들기

다음 예제에서는 통계 및 쿼리 저장소 데이터를 포함하지 않는 AdventureWorks2022 데이터베이스의 클론을 만듭니다(SQL Server 2016(13.x) 서비스 팩 1 이상 버전).

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS, NO_QUERYSTORE;
GO

D. 확인된 데이터베이스의 복제본 만들기

다음 예제에서는 확인된 통계 및 쿼리 저장소 데이터 없이 데이터베이스의 AdventureWorks2022 스키마 전용 복제본을 만듭니다(SQL Server 2016(13.x) 서비스 팩 2 이상 버전).

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB;
GO

E. 복제된 데이터베이스의 백업을 포함하는 용도로 확인된 데이터베이스의 복제본 만들기

다음 예제에서는 통계 및 쿼리 저장소 데이터 없이 데이터베이스의 AdventureWorks2022 스키마 전용 복제본을 만듭니다. 복제된 데이터베이스의 확인된 백업도 생성됩니다(SQL Server 2016(13.x) 서비스 팩 2 이상 버전).

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB, BACKUP_CLONEDB;
GO

추가 정보