DBCC CLONEDATABASE (Transact-SQL)

Gilt für:SQL Server

Unter Verwendung von DBCC CLONEDATABASE wird ein reiner Schemaklon einer Datenbank generiert, um Leistungsprobleme zu untersuchen, die mit dem Abfrageoptimierer zusammenhängen.

Transact-SQL-Syntaxkonventionen

Syntax

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

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

source_database_name

Der Name der zu kopierenden Datenbank.

target_database_name

Der Name der Datenbank, in die die Quelldatenbank kopiert wird. Diese Datenbank wird von DBCC CLONEDATABASE erstellt und darf noch nicht vorhanden sein.

NO_STATISTICS

Gilt für: SQL Server 2014 (12.x) Service Pack 2 CU 3, SQL Server 2016 (13.x) Service Pack 1 und höhere Versionen

Gibt an, ob Tabellen-/Indexstatistiken aus dem Klon ausgeschlossen werden müssen. Ist diese Option nicht angegeben, werden Tabellen- bzw. Indexstatistiken automatisch eingeschlossen.

NO_QUERYSTORE

Gilt für: SQL Server 2016 (13.x) Service Pack 1 und höhere Versionen

Hiermit wird angegeben, ob Abfragespeicher-Daten aus dem Klon ausgeschlossen werden müssen. Ist diese Option nicht angegeben, werden Abfragespeicher-Daten in den Klon kopiert, wenn der Abfragespeicher in der Quelldatenbank aktiviert ist.

VERIFY_CLONEDB

Gilt für: SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8 und höhere Versionen

Überprüft die Konsistenz der neuen Datenbank. Diese Option ist erforderlich, wenn die geklonte Datenbank als Produktionsdatenbank verwendet werden soll. Wenn VERIFY_CLONEDB aktiviert wird, werden Statistiken und Abfragespeicher-Sammlungen ebenfalls deaktiviert, sodass dies mit der Ausführung von WITH VERIFY_CLONEDB, NO_STATISTICS, NO_QUERYSTORE identisch ist.

Der folgende Befehl kann dazu verwendet werden sicherzustellen, dass die geklonte Datenbank als Produktionsdatenbank verwendet werden kann:

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

SERVICEBROKER

Gilt für: SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8 und höhere Versionen

Gibt an, ob Systemkataloge, die mit dem Service Broker in Verbindung stehen, zum Klon hinzugefügt werden sollen. Die SERVICEBROKER-Option kann nicht in Kombination mit VERIFY_CLONEDB verwendet werden.

BACKUP_CLONEDB

Gilt für: SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8 und höhere Versionen

Erstellt und überprüft eine Sicherung der Klondatenbank. Wird dieses Argument zusammen mit VERIFY_CLONEDB verwendet, wird die Klondatenbank überprüft, bevor die Sicherung erstellt wird.

Bemerkungen

Die folgenden Überprüfungen werden von DBCC CLONEDATABASE ausgeführt. Der Befehl schlägt fehl, wenn bei einer der Überprüfungen ein Fehler auftritt.

  • Die Quelldatenbank muss eine Benutzerdatenbank sein. Das Klonen von Systemdatenbanken (master-, model-, msdb-, tempdb-, distribution-Datenbank usw.) ist nicht zulässig.
  • Die Quelldatenbank muss online geschaltet oder lesbar sein.
  • Es darf keine Datenbank vorhanden sein, die denselben Namen hat wie die Klondatenbank.
  • Der Befehl befindet sich nicht in einer Benutzertransaktion.

Wenn alle Validierungen erfolgreich waren, wird das Klonen der Quelldatenbank in folgenden Vorgängen ausgeführt:

  • Es wird eine neue Zieldatenbank erstellt, die dasselbe Dateilayout wie die Quelle verwendet, aber Standarddateigrößen aus der model-Datenbank aufweist.
  • Es wird eine interne Momentaufnahme der Quelldatenbank erstellt.
  • Die Systemmetadaten aus der Quelldatenbank werden in die Zieldatenbank kopiert.
  • Das gesamte Schema für alle Objekte wird aus der Quelldatenbank in die Zieldatenbank kopiert.
  • Die Statistiken für alle Indizes werden aus der Quelldatenbank in die Zieldatenbank kopiert.

Hinweis

Eine mit DBCC CLONEDATABASE generierte neue Datenbank ist hauptsächlich für Problembehandlungs- und Diagnosezwecke vorgesehen. Sie müssen die VERIFY_CLONEDB-Option verwenden, damit die geklonte Datenbank als Produktionsdatenbank verwendet werden kann.

Für alle Dateien in der Zieldatenbank werden die Größen- und Vergrößerungseinstellungen aus der model-Datenbank übernommen. Die Dateinamen für die Zieldatenbank befolgen die <source_file_name_underscore_random number>-Konvention. Wenn der generierte Dateiname bereits im Zielordner vorhanden ist, tritt bei DBCC CLONEDATABASE ein Fehler auf.

DBCC CLONEDATABASE kann keinen Klon erstellen, wenn Benutzerobjekte (Tabellen, Indizes, Schemas, Rollen usw.) vorhanden sind, die in der model-Datenbank erstellt wurden. Wenn Benutzerobjekte in der model-Datenbank vorhanden sind, tritt beim Klonen der Datenbank ein Fehler auf, und die folgende Fehlermeldung wird angezeigt:

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>

Wichtig

Sind Columnstore-Indizes vorhanden, müssen Sie die Columnstore-Statistikindizes gemäß Überlegungen, wenn Sie die Abfragen mit Columnstore-Indizes für Klondatenbanken optimieren aktualisieren, bevor Sie den DBCC CLONEDATABASE-Befehl ausführen. Ab SQL Server 2019 (15.x) sind die im zuvor genannten Artikel beschriebenen manuellen Schritte nicht mehr erforderlich, da der DBCC CLONEDATABASE-Befehl diese Informationen automatisch erfasst.

Statistikblobs für Columnstore-Indizes

Ab SQL Server 2019 (15.x) erfasst DBCC CLONEDATABASE automatisch die Statistikblobs für Columnstore-Indizes, sodass keine manuellen Schritte erforderlich sind. DBCC CLONEDATABASE erstellt eine rein schemabasierte Kopie einer Datenbank, die alle Elemente enthält, die zum Behandeln von Problemen mit der Abfrageleistung erforderlich sind, ohne das Daten kopiert werden. In vorherigen Versionen von SQL Server wurden durch den Befehl nicht die Statistiken kopiert, die für eine genaue Problembehandlung bei Columnstore-Indexabfragen erforderlich sind, weshalb manuelle Schritte zur Erfassung dieser Informationen nötig waren.

Informationen bezüglich der Datensicherheit bei geklonten Datenbanken finden Sie unter Understanding data security in cloned databases created using DBCC CLONEDATABASE.

Interne Datenbankmomentaufnahme

DBCC CLONEDATABASE verwendet eine interne Datenbankmomentaufnahme der Quelldatenbank, um die Transaktionskonsistenz zu erzielen, die zum Ausführen des Kopiervorgangs erforderlich ist. Durch Verwenden dieser Momentaufnahme werden beim Ausführen dieser Befehle Blockierungs- und Parallelitätsprobleme verhindert. Wenn eine Momentaufnahme nicht erstellt werden kann, tritt bei DBCC CLONEDATABASE ein Fehler auf.

Sperren auf Datenbankebene sind während der folgenden Schritte des Kopiervorgang wirksam:

  • Überprüfen der Quelldatenbank
  • Abrufen der freigegebenen Sperre (S) für die Quelldatenbank
  • Erstellen der Momentaufnahme der Quelldatenbank
  • Erstellen einer Klondatenbank (leere Datenbank, die aus der model-Datenbank abgeleitet wird)
  • Abrufen der exklusiven Sperre (X) für die Klondatenbank
  • Kopieren der Metadaten in die Klondatenbank
  • Aufheben aller Datenbanksperren

Sobald der Befehl vollständig ausgeführt wurde, wird die interne Momentaufnahme gelöscht. Die Optionen TRUSTWORTHY und DB_CHAINING sind für eine geklonte Datenbank deaktiviert.

Unterstützte Objekte

Nur die folgenden Objekte können in die Zieldatenbank geklont werden. Verschlüsselte Objekte werden geklont, können in der Klondatenbank aber nicht verwendet werden. Objekte, die nicht im folgenden Abschnitt aufgeführt sind, werden im Klon nicht unterstützt:

  • APPLICATION ROLE
  • AVAILABILITY GROUP
  • COLUMNSTORE INDEX
  • CDB
  • CDC
  • Änderungsnachverfolgung 6, 7, 8
  • CLR 1, 2
  • DATABASE PROPERTIES
  • DEFAULT
  • FILES AND FILEGROUPS
  • Volltext 3
  • FUNCTION
  • INDEX
  • LOGIN
  • PARTITION FUNCTION
  • PARTITION SCHEME
  • Prozedur 4
  • Abfragespeicher 2, 5
  • ROLE
  • RULE
  • SCHEMA
  • SEQUENCE
  • SPATIAL INDEX
  • STATISTICS
  • SYNONYM
  • TABLE
  • Arbeitsspeicheroptimierte Tabellen 2
  • FILESTREAM- und FILETABLE-Objekte 1, 2
  • TRIGGER
  • TYPE
  • UPGRADED DB
  • USER
  • VIEW
  • XML INDEX
  • XML SCHEMA COLLECTION

1 Ab SQL Server 2014 (12.x) Service Pack 2 CU 3

2 Ab SQL Server 2016 (13.x) Service Pack 1

3 Ab SQL Server 2016 (13.x) Service Pack 1 CU 2

4 Transact-SQL-Prozeduren werden in allen Releases ab SQL Server 2014 (12.x) Service Pack 2 unterstützt. CLR-Prozeduren werden ab SQL Server 2014 (12.x) Service Pack 2 CU 3 unterstützt. Nativ kompilierte Prozeduren werden ab SQL Server 2016 (13.x) Service Pack 1 unterstützt.

5 Abfragespeicher-Daten werden nur kopiert, wenn sie in der Quelldatenbank aktiviert sind. Wenn Sie die neuesten Laufzeitstatistiken als Teil des Abfragespeichers kopieren möchten, müssen Sie sp_query_store_flush_db vor der Ausführung von DBCC CLONEDATABASE ausführen, um die Laufzeitstatistiken in den Abfragespeicher zu verschieben.

6 Ab SQL Server 2016 (13.x) Service Pack 2 CU 10.

7Ab SQL Server 2017 (14.x) Service Pack 2 CU 17.

8 Starten in SQL Server 2019 (15.x) CU 1 und höhere Versionen.

Berechtigungen

Erfordert die Mitgliedschaft in der festen Serverrolle sysadmin .

Fehlerprotokollmeldungen

Die folgenden Meldungen zeigen ein Beispiel für die Meldungen, die während eines Klonvorgangs im Fehlerprotokoll protokolliert werden:

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

Informationen zu Service Packs für SQL Server

Service Packs sind kumulativ. Jedes neue Service Pack enthält alle Fixes, die sich in früheren Service Packs befinden, zusammen mit allen neuen Fixes. Wir empfehlen, das neueste Service Pack und das neueste kumulative Update für dieses Service Pack anzuwenden. Sie müssen kein vorheriges Service Pack installieren, bevor Sie das neueste Service Pack installieren. Weitere Informationen zum neuesten Service Pack und dem neuesten kumulativen Update finden Sie in Tabelle 1 in der neuesten Version und im Versionsverlauf für SQL Server.

Hinweis

Die neu generierte Datenbank, die von DBCC CLONEDATABASE generiert wird, wird nicht unterstützt, um als Produktionsdatenbank verwendet zu werden und ist in erster Linie für Problembehandlungs- und Diagnosezwecke vorgesehen. Es wird empfohlen, die geklonte Datenbank nach dem Erstellen der Datenbank zu trennen.

Datenbankeigenschaften

DATABASEPROPERTYEX('dbname', 'IsClone') gibt 1 zurück, wenn die Datenbank mit DBCC CLONEDATABASE generiert wurde.

DATABASEPROPERTYEX('dbname', 'IsVerifiedClone') gibt 1 zurück, wenn die Datenbank mit VERIFY_CLONEDB erfolgreich überprüft wurde.

Beispiele

A. Erstellen eines Klons einer Datenbank, der das Schema, Statistiken und Abfragespeicher-Daten enthält

Im folgenden Beispiel wird ein Klon der AdventureWorks2022-Datenbank erstellt, der das Schema, Statistiken und Abfragespeicher-Daten enthält (SQL Server 2016 (13.x) Service Pack 1 und höhere Versionen):

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone);
GO

B. Erstellen eines reinen Schemaklons einer Datenbank ohne Statistiken

Im folgenden Beispiel wird ein Klon der AdventureWorks2022-Datenbank erstellt, der keine Statistiken enthält (SQL Server 2014 (12.x) Service Pack 2 CU 3 und höhere Versionen):

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS;
GO

C. Erstellen eines reinen Schemaklons einer Datenbank ohne Statistiken und Abfragespeicher-Daten

Im folgenden Beispiel wird ein Klon der AdventureWorks2022-Datenbank erstellt, der keine Statistiken und Abfragespeicher-Daten enthält (SQL Server 2016 (13.x) Service Pack 1 und höhere Versionen):

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

D: Erstellen eines Klons einer Datenbank, der zur Verwendung als Produktionsdatenbank überprüft wird

Im folgenden Beispiel wird ein reiner Schemaklon der AdventureWorks2022-Datenbank ohne Statistiken und Abfragespeicher-Daten erstellt, der zur Verwendung als Produktionsdatenbank überprüft wird (SQL Server 2016 (13.x) Service Pack 2 und höhere Versionen):

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB;
GO

E. Erstellen eines Klons einer Datenbank, der zur Verwendung als Produktionsdatenbank überprüft wird, einschließlich einer Sicherung der geklonten Datenbank

Im folgenden Beispiel wird ein reiner Schemaklon der AdventureWorks2022-Datenbank ohne Statistiken und Abfragespeicher-Daten erstellt, der zur Verwendung als Produktionsdatenbank überprüft wird. Außerdem wird eine überprüfte Sicherung der geklonten Datenbank erstellt (SQL Server 2016 (13.x) Service Pack 2 und höhere Versionen).

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

Weitere Informationen