sql >> Databasteknik >  >> RDS >> Sqlserver

Använda DBCC CLONEDATABASE för att generera ett schema och enbart statistikkopia av en användardatabas i SQL Server 2014 SP2

DBCC CLONEDATABASE är ett nytt DBCC-kommando som introducerats i SQL Server 2014 SP 2 som används för att skapa klonen av en specificerad användardatabas som hjälper till att felsöka prestandaproblem relaterade till frågeoptimeraren.

När en klon av databasen skapas med DBCC CLONEDATABASE, den kommer att skapa ett schema och endast en statistikkopia av den angivna databasen och innehåller ingen kopia av data.

Att skapa klonen är lika enkelt som att skicka källan databasnamn och klondatabasnamn till DBCC-kommandot.
DBCC CLONEDATABASE ('SansSQL', 'SansSQL_Clone') 

Utmatning av DBCC-kommandot

När kloningen är klar kommer den klonade databasen att vara i skrivskyddat läge.

VÄLJ namn, databas_id, är_skrivskyddad FRÅN sys.databases WHERE namn i ('SansSQL ', 'SansSQL_Clone') 

Så vad händer egentligen när vi utfärdar kommandot DBCC CLONEDATABASE på en databas?
Det börjar med några valideringar innan klonen skapas. 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, modell, msdb, tempdb, distributionsdatabas etc.) är inte tillåten.
  • Källdatabasen måste vara online eller läsbar.
  • En databas som använder samma namn som klondatabasen får inte redan existera.
  • Kommandot finns inte i en användartransaktion.
Om alla valideringar lyckas kommer DBCC CLONEDATABASE att utföra följande operationer:
  • Skapar primär datafil och loggfil
  • Lägga till sekundära datautrymmen
  • Lägger till sekundära filer
Måldatabasfilerna kommer att ärva inställningarna för storlek och tillväxt från modelldatabasen och filnamnen på destinationsdatabasen kommer att följa konventionen source_file_name _underscore_random_number.
VÄLJ database_id, file_id, type_desc, name, physical_name FROM sys.master_files WHERE DB_NAME(database_id) in ('SansSQL', 'SansSQL_Clone') 


Då kommer DBCC CLONEDATABASE att göra en ögonblicksbild av intern databas med följande steg
  • Verifiera källdatabasen
  • Hämta S-lås för källdatabasen
  • Skapa ögonblicksbild av källdatabasen
  • Skapa en klondatabas (detta är en tom databas som ärver från modellen)
  • Hämta X-lås för klondatabasen
  • Kopiera metadata till klondatabasen
  • Släpp alla DB-lås
Med kommandot nedan kan vi kontrollera om en databas är en klon eller en normal databas.
SELECT DATABASEPROPERTYEX('SansSQL','isClone') AS SansSQL_DB_CloneStatus ,DATABASEPROPERTYEX('SansSQL_Clone','isClone') AS SansDBSQLoneStatus före> 

Referens:https://support.microsoft.com/en-in/kb/3177838
  1. COS() Funktion i Oracle

  2. SQL:hur man använder UNION och beställer efter ett specifikt urval?

  3. PostgreSQL 12:Implementering av K-Nearest Neighbor Space Partitioned Generalized Search Tree Index

  4. Hur ökar man dbms_output buffert?