Dela via


DBCC CLONEDATABASE (Transact-SQL)

gäller för:SQL Server

Genererar en schemabaserad, skrivskyddad kopia av en databas med hjälp av DBCC CLONEDATABASE för att undersöka prestandaproblem som rör frågeoptimeraren.

Transact-SQL syntaxkonventioner

Syntax

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

Argument

source_database_name

Namnet på databasen som ska kopieras.

target_database_name

Namnet på databasen som källdatabasen kopieras till. Den här databasen skapas av DBCC CLONEDATABASE och bör inte redan finnas.

NO_STATISTICS

gäller för: SQL Server 2014 (12.x) Service Pack 2 CU 3, SQL Server 2016 (13.x) Service Pack 1 och senare versioner.

Anger om tabell-/indexstatistik måste undantas från klonen. Om det här alternativet inte anges inkluderas tabell-/indexstatistik automatiskt.

NO_QUERYSTORE

gäller för: SQL Server 2016 (13.x) Service Pack 1 och senare versioner.

Anger om Query Store-data måste undantas från klonen. Om det här alternativet inte har angetts kopieras Query Store-data till klonen om Query Store är aktiverat i källdatabasen.

VERIFY_CLONEDB

gäller 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 och senare versioner.

Verifierar konsekvensen i den nya databasen. Om du aktiverar VERIFY_CLONEDB inaktiveras även statistik och Query Store-samlingen, vilket motsvarar körningen av WITH VERIFY_CLONEDB, NO_STATISTICS, NO_QUERYSTORE.

Följande kommando kan användas för att avgöra om den klonade databasen har verifierats:

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

SERVICEBROKER

gäller 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 och senare versioner.

Anger om service broker-relaterade systemkataloger ska ingå i klonen. Det SERVICEBROKER alternativet kan inte användas i kombination med VERIFY_CLONEDB.

BACKUP_CLONEDB

gäller 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 och senare versioner.

Skapar och verifierar en säkerhetskopia av klondatabasen. Om den används i kombination med VERIFY_CLONEDBverifieras klondatabasen innan säkerhetskopieringen görs.

Anmärkningar

En klon av en databas som genereras med DBCC CLONEDATABASE är endast avsedd för felsökning och diagnostik. Klonen är en skrivskyddad, schemaspecifik kopia av den ursprungliga databasen och har begränsningar för vilka objekt som kopieras över. Mer information finns i avsnittet objekt som stöds. All annan användning av en klondatabas stöds inte.

Följande valideringar utförs av DBCC CLONEDATABASE. Kommandot misslyckas om någon av valideringarna misslyckas.

  • Källdatabasen måste vara en användardatabas. Kloning av systemdatabaser (master, model, msdb, tempdb, distribution databas och så vidare) tillåts inte.
  • Källdatabasen måste vara online eller läsbar.
  • En databas som använder samma namn som klondatabasen får inte redan finnas.
  • Kommandot finns inte i en användartransaktion.

Om alla valideringar lyckas utförs kloningen av källdatabasen av följande åtgärder:

  • Skapar en ny måldatabas som använder samma fillayout som källan men med standardfilstorlekar från model-databasen.
  • Skapar en intern ögonblicksbild av källdatabasen.
  • Kopierar systemmetadata från källan till måldatabasen.
  • Kopierar alla scheman för alla objekt från källan till måldatabasen.
  • Kopierar statistik för alla index från källan till måldatabasen.

Alla filer i måldatabasen ärver storleks- och tillväxtinställningarna från model-databasen. Filnamnen för måldatabasen följer <source_file_name_underscore_random number> konventionen. Om det genererade filnamnet redan finns i målmappen misslyckas DBCC CLONEDATABASE.

DBCC CLONEDATABASE stöder inte skapande av en klon om det finns några användarobjekt (tabeller, index, scheman, roller och så vidare) som har skapats i model-databasen. Om användarobjekt finns i model databas misslyckas databaskloningen med följande felmeddelande:

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>

Viktig

Om du har kolumnlagringsindex kan du läsa Överväganden när du justerar frågorna med Columnstore-index på klondatabaser för att uppdatera kolumnlagringsindexstatistik innan du kör kommandot DBCC CLONEDATABASE. Från och med SQL Server 2019 (15.x) krävs inte längre de manuella stegen som beskrivs i artikeln ovan eftersom kommandot DBCC CLONEDATABASE samlar in den här informationen automatiskt.

Statistikblob för columnstore-index

Från och med SQL Server 2019 (15.x) samlar DBCC CLONEDATABASE automatiskt in statistikblobar för kolumnlagringsindex, så inga manuella steg krävs. DBCC CLONEDATABASE skapar en endast schemakopia av en databas som innehåller alla element som krävs för att felsöka problem med frågeprestanda utan att kopiera data. I tidigare versioner av SQL Server kopierade kommandot inte den statistik som krävs för att felsöka kolumnlagringsindexfrågor och manuella steg krävdes för att samla in den här informationen.

Information om datasäkerhet på klonade databaser finns i Förstå datasäkerhet i klonade databaser.

Intern databasögonblicksbild

DBCC CLONEDATABASE använder en intern databasögonblicksbild av källdatabasen för den transaktionskonsekvens som krävs för att utföra kopian. Om du använder den här ögonblicksbilden förhindras blockerings- och samtidighetsproblem när dessa kommandon körs. Om det inte går att skapa en ögonblicksbild misslyckas DBCC CLONEDATABASE.

Lås på databasnivå hålls under följande steg i kopieringsprocessen:

  • Verifiera källdatabasen
  • Hämta delat lås (S) för källdatabasen
  • Skapa en ögonblicksbild av källdatabasen
  • Skapa en klondatabas (en tom databas som ärvts från model-databasen)
  • Hämta exklusivt lås (X) för klondatabasen
  • Kopiera metadata till klondatabasen
  • Släpp alla databaslås

Så snart kommandot har körts tas den interna ögonblicksbilden bort. TRUSTWORTHY och DB_CHAINING är inaktiverade på en klonad databas.

Objekt som stöds

Endast följande objekt kan klonas i måldatabasen. Krypterade objekt klonas men kan inte användas i klondatabasen. Objekt som inte visas i följande avsnitt stöds inte i klonen:

  • PROGRAMROLL
  • TILLGÄNGLIGHETSGRUPP
  • COLUMNSTORE-INDEX
  • CDB
  • CDC
  • Ändringsspårning 6, 7, 8
  • CLR 1, 2
  • DATABASEGENSKAPER
  • STANDARD
  • FILER OCH FILGRUPPER
  • Fulltext 3
  • FUNKTION
  • INDEX
  • LOGGA IN
  • PARTITIONSFUNKTION
  • PARTITIONSSCHEMA
  • FÖRFARANDE 4
  • QUERY STORE 2, 5
  • ROLL
  • REGEL
  • SCHEMAT
  • SEKVENS
  • SPATIAL INDEX
  • STATISTIK
  • SYNONYM
  • TABELL 9
  • MINNESOPTIMERADE TABELLER 2
  • FILESTREAM- OCH FILTABELLOBJEKT 1, 2
  • UTLÖSA
  • TYP
  • UPPGRADERAD DATABAS
  • ANVÄNDARE
  • UTSIKT
  • XML-INDEX
  • XML-SCHEMASAMLING

1 Från och med SQL Server 2014 (12.x) Service Pack 2 CU 3.

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

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

4 Transact-SQL procedurer stöds i alla versioner från och med SQL Server 2014 (12.x) Service Pack 2. CLR-procedurer stöds från och med SQL Server 2014 (12.x) Service Pack 2 CU 3. Inbyggda kompilerade procedurer stöds från och med SQL Server 2016 (13.x) Service Pack 1.

5 Query Store-data kopieras endast om de är aktiverade i källdatabasen. Om du vill kopiera den senaste körningsstatistiken som en del av Query Store kör du sp_query_store_flush_db för att tömma körningsstatistiken till Query Store innan du kör DBCC CLONEDATABASE.

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

7 Från och med SQL Server 2017 (14.x) Service Pack 2 CU 17.

8 Från och med SQL Server 2019 (15.x) CU 1 och senare versioner.

9 De flesta systemtabeller som flaggas som is_ms_shipped klonas inte.

Behörigheter

Kräver medlemskap i sysadmin fast serverroll.

Felmeddelanden i loggen

Följande meddelanden är ett exempel på de meddelanden som loggas i felloggen under kloningsprocessen:

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

Om Service Pack för SQL Server

Service pack är kumulativa. Varje nytt Service Pack innehåller alla korrigeringar som finns i tidigare service pack tillsammans med eventuella nya korrigeringar. Vår rekommendation är att tillämpa det senaste servicepaketet och den senaste kumulativa uppdateringen för det servicepaketet. Du behöver inte installera ett tidigare Service Pack innan du installerar det senaste Service Pack. Se tabell 1 i Senaste uppdateringarna och versionshistoriken för SQL Server för att hitta mer information om det senaste servicepaketet och den senaste kumulativa uppdateringen.

Not

Den nyligen genererade databasen som genererats från DBCC CLONEDATABASE stöds inte för att användas som en produktionsdatabas och är främst avsedd för felsökning och diagnostik. Vi rekommenderar att du kopplar från den klonade databasen när databasen har skapats.

Databasegenskaper

DATABASEPROPERTYEX('dbname', 'IsClone') returnerar 1 om databasen genererades med hjälp av DBCC CLONEDATABASE.

DATABASEPROPERTYEX('dbname', 'IsVerifiedClone') returnerar 1 om databasen har verifierats med hjälp av WITH VERIFY_CLONEDB.

Exempel

A. Skapa en klon av en databas som innehåller schema, statistik och Query Store

I följande exempel skapas en klon av AdventureWorks2022 databas som innehåller schema, statistik och Query Store-data (SQL Server 2016 (13.x) Service Pack 1 och senare versioner):

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone);
GO

B. Skapa en schemabaserad klon av en databas utan statistik

I följande exempel skapas en klon av AdventureWorks2022 databas som inte innehåller statistik (SQL Server 2014 (12.x) Service Pack 2 CU 3 och senare versioner):

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS;
GO

C. Skapa en schemabaserad klon av en databas utan statistik och Query Store

I följande exempel skapas en klon av AdventureWorks2022 databas som inte innehåller statistik och Query Store-data (SQL Server 2016 (13.x) Service Pack 1 och senare versioner):

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

D. Skapa en klon av en databas som är verifierad

I följande exempel skapas en schemabaserad klon av AdventureWorks2022-databasen utan statistik och Query Store-data som verifieras (SQL Server 2016 (13.x) Service Pack 2 och senare versioner):

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB;
GO

E. Skapa en klon av en databas som har verifierats för användning som innehåller en säkerhetskopia av den klonade databasen

I följande exempel skapas en schemabaserad klon av AdventureWorks2022-databasen utan statistik och Query Store-data som har verifierats för användning. En verifierad säkerhetskopia av den klonade databasen skapas också (SQL Server 2016 (13.x) Service Pack 2 och senare versioner).

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

Se även