Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzo di DBCC CLONEDATABASE per generare solo una copia dello schema e delle statistiche di un database utente in SQL Server 2014 SP2

DBCC CLONEDATABASE è un nuovo comando DBCC introdotto in SQL Server 2014 SP 2 che viene utilizzato per creare il clone di un database utente specificato che aiuta a risolvere i problemi di prestazioni relativi a Query Optimizer.

Quando un clone del database viene creato utilizzando DBCC CLONEDATABASE, creerà solo una copia dello schema e delle statistiche del database specificato e non contiene alcuna copia dei dati.

Creare il clone è semplice come passare l'origine nome del database e clonare il nome del database nel comando DBCC.
DBCC CLONEDATABASE ('SansSQL', 'SansSQL_Clone') 

Output del comando DBCC

Una volta completata la clonazione, il database clonato sarà in modalità di sola lettura.
/>
SELECT name, database_id, is_read_only  
FROM sys.databases 
WHERE name in ('SansSQL', 'SansSQL_Clone') 

Quindi cosa succede effettivamente quando emettiamo il comando DBCC CLONEDATABASE su un database?
Inizierà con alcune convalide prima della creazione del clone, le seguenti convalide vengono eseguite da DBCC CLONEDATABASE. Il comando non riesce se una qualsiasi delle convalide fallisce.
  • Il database di origine deve essere un database utente. La clonazione dei database di sistema (master, modello, msdb, tempdb, database di distribuzione ecc.) non è consentita.
  • Il database di origine deve essere online o leggibile.
  • Un database che utilizza lo stesso nome del database clone non deve esistere già.
  • Il comando non è in una transazione utente.
Se tutte le convalide hanno esito positivo, DBCC CLONEDATABASE eseguirà le seguenti operazioni:
  • Creazione di file di dati primari e file di registro
  • Aggiunta di spazi dati secondari
  • Aggiunta di file secondari
I file del database di destinazione erediteranno le impostazioni di dimensione e crescita dal database del modello e i nomi dei file del database di destinazione seguiranno la convenzione 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') 


Quindi DBCC CLONEDATABASE eseguirà uno snapshot del database interno con i seguenti passaggi
  • Convalida il database di origine
  • Ottieni S lock per il database di origine
  • Crea uno snapshot del database di origine
  • Crea un database clone (questo è un database vuoto che eredita dal modello)
  • Ottieni il blocco X per il database dei cloni
  • Copia i metadati nel database dei cloni
  • Rilascia tutti i blocchi DB
Utilizzando il comando seguente, possiamo verificare se un database è un clone o un normale database.
SELECT DATABASEPROPERTYEX('SansSQL','isClone') AS SansSQL_DB_CloneStatus 
      ,DATABASEPROPERTYEX('SansSQL_Clone','isClone') AS SansSQL_CloneDB_CloneStatus


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