Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden von DBCC CLONEDATABASE zum Generieren einer reinen Schema- und Statistikkopie einer Benutzerdatenbank in SQL Server 2014 SP2

DBCC CLONEDATABASE ist ein neuer DBCC-Befehl, der in SQL Server 2014 SP 2 eingeführt wurde und zum Erstellen des Klons einer angegebenen Benutzerdatenbank verwendet wird, was bei der Behebung von Leistungsproblemen im Zusammenhang mit dem Abfrageoptimierer hilft.

Wenn ein Klon der Datenbank mit DBCC CLONEDATABASE erstellt wird, erstellt sie eine reine Schema- und Statistikkopie der angegebenen Datenbank und enthält keine Kopie der Daten.

Das Erstellen des Klons ist so einfach wie das Übergeben der Quelle Datenbankname und Klondatenbankname in den DBCC-Befehl.
DBCC CLONEDATABASE ('SansSQL', 'SansSQL_Clone') 

Ausgabe des DBCC-Befehls

Sobald das Klonen abgeschlossen ist, befindet sich die geklonte Datenbank im schreibgeschützten Modus.

SELECT name, database_id, is_read_only FROM sys.databases WHERE name in ('SansSQL ', 'SansSQL_Clone') 

Was passiert also eigentlich, wenn wir den DBCC CLONEDATABASE-Befehl für eine Datenbank ausführen?
Es beginnt mit einige Überprüfungen, bevor der Klon erstellt wird. Die folgenden Überprüfungen werden von DBCC CLONEDATABASE durchgeführt. Der Befehl schlägt fehl, wenn eine der Validierungen fehlschlägt.
  • Die Quelldatenbank muss eine Benutzerdatenbank sein. Das Klonen von Systemdatenbanken (master, model, msdb, tempdb, Distributionsdatenbank etc.) ist nicht erlaubt.
  • Die Quelldatenbank muss online oder lesbar sein.
  • Eine Datenbank, die denselben Namen wie die Klondatenbank verwendet, darf nicht bereits existieren.
  • Der Befehl befindet sich nicht in einer Benutzertransaktion.
Wenn alle Validierungen erfolgreich sind, führt DBCC CLONEDATABASE die folgenden Vorgänge aus:
  • Primäre Datendatei und Protokolldatei erstellen
  • Sekundäre Datenräume hinzufügen
  • Sekundäre Dateien hinzufügen
Die Zieldatenbankdateien erben die Größen- und Wachstumseinstellungen von der Modelldatenbank, und die Dateinamen der Zieldatenbank folgen der Konvention source_file_name _underscore_random_number.
SELECT database_id, file_id, type_desc, name, physical_name FROM sys.master_files WHERE DB_NAME(database_id) in ('SansSQL', 'SansSQL_Clone') 


Dann erstellt DBCC CLONEDATABASE mit den folgenden Schritten einen Snapshot der internen Datenbank
  • Quelldatenbank validieren
  • S-Sperre für die Quelldatenbank abrufen
  • Snapshot der Quelldatenbank erstellen
  • Erstellen Sie eine Klondatenbank (dies ist eine leere Datenbank, die vom Modell erbt)
  • X-Sperre für die Klondatenbank erhalten
  • Kopieren Sie die Metadaten in die Klondatenbank
  • Alle DB-Sperren aufheben
Mit dem folgenden Befehl können wir überprüfen, ob eine Datenbank ein Klon oder eine normale Datenbank ist. vor>

Referenz:https://support.microsoft.com/en-in/kb/3177838