sql >> Database >  >> RDS >> Sqlserver

DBCC CLONEDATABASE gebruiken om een ​​schema en alleen statistieken te genereren van een gebruikersdatabase in SQL Server 2014 SP2

DBCC CLONEDATABASE is een nieuwe DBCC-opdracht die is geïntroduceerd in SQL Server 2014 SP 2 en die wordt gebruikt voor het maken van de kloon van een opgegeven gebruikersdatabase die helpt bij het oplossen van prestatieproblemen met betrekking tot de query-optimizer.

Wanneer een kloon van de database is gemaakt met behulp van DBCC CLONEDATABASE, het zal een schema en een statistische kopie van de opgegeven database maken en bevat geen enkele kopie van de gegevens.

Het maken van de kloon is net zo eenvoudig als het doorgeven van de bron databasenaam en kloon databasenaam naar de DBCC-opdracht.
DBCC CLONEDATABASE ('SansSQL', 'SansSQL_Clone') 

Uitvoer van het DBCC-commando

Zodra het klonen is voltooid, bevindt de gekloonde database zich in de modus Alleen-lezen.

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

Dus wat gebeurt er eigenlijk als we het DBCC CLONEDATABASE-commando op een database geven?
Het begint met enkele validaties voordat de kloon wordt gemaakt, De volgende validaties worden uitgevoerd door DBCC CLONEDATABASE. De opdracht mislukt als een van de validaties mislukt.
  • De brondatabase moet een gebruikersdatabase zijn. Het klonen van systeemdatabases (master, model, msdb, tempdb, distributiedatabase enz.) is niet toegestaan.
  • De brondatabase moet online of leesbaar zijn.
  • Een database die dezelfde naam gebruikt als de kloondatabase mag nog niet bestaan.
  • De opdracht zit niet in een gebruikerstransactie.
Als alle validaties slagen, voert DBCC CLONEDATABASE de volgende bewerkingen uit:
  • Primair gegevensbestand en logbestand maken
  • Secundaire dataruimten toevoegen
  • Secundaire bestanden toevoegen
De doeldatabasebestanden nemen de instellingen voor grootte en groei over van de modeldatabase en de bestandsnamen van de doeldatabase volgen de conventie 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') 


Vervolgens zal de DBCC CLONEDATABASE een interne database-snapshot maken met de volgende stappen
  • Valideer de brondatabase
  • Slock ophalen voor de brondatabase
  • Snapshot maken van de brondatabase
  • Maak een kloondatabase aan (dit is een lege database die van het model erft)
  • Verkrijg X lock voor de kloondatabase
  • Kopieer de metadata naar de kloondatabase
  • Alle DB-vergrendelingen vrijgeven
Met behulp van de onderstaande opdracht kunnen we controleren of een database een kloon of een normale database is.
SELECT DATABASEPROPERTYEX('SansSQL','isClone') AS SansSQL_DB_CloneStatus 
      ,DATABASEPROPERTYEX('SansSQL_Clone','isClone') AS SansSQL_CloneDB_CloneStatus


Referentie:https://support.microsoft.com/en-in/kb/3177838
  1. MariaDB JSON_CONTAINS() uitgelegd

  2. DATEDIFF() geeft verkeerde resultaten in SQL Server? Lees dit.

  3. Verschil tussen een gebruiker en een login in SQL Server

  4. Item verwijderen uit ListView en Database met OnItemClickListener