sql >> Databáze >  >> RDS >> Sqlserver

Použití DBCC CLONEDATABASE ke generování kopie schématu a statistik pouze uživatelské databáze v SQL Server 2014 SP2

DBCC CLONEDATABASE je nový příkaz DBCC představený v SQL Server 2014 SP 2, který se používá k vytvoření klonu zadané uživatelské databáze, což pomáhá při řešení problémů s výkonem souvisejících s optimalizátorem dotazů.

Při klonu databáze je vytvořena pomocí DBCC CLONEDATABASE, vytvoří pouze kopii schématu a statistiky zadané databáze a neobsahuje žádnou kopii dat.

Vytvoření klonu je stejně jednoduché jako předání zdroje název databáze a název databáze naklonovat do příkazu DBCC.
DBCC CLONEDATABASE ('SansSQL', 'SansSQL_Clone') 

Výstup příkazu DBCC

Po dokončení klonování bude klonovaná databáze v režimu pouze pro čtení.

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

Co se tedy vlastně stane, když v databázi zadáme příkaz DBCC CLONEDATABASE?
Začne to několik validací před vytvořením klonu. Následující validace jsou prováděny pomocí DBCC CLONEDATABASE. Příkaz selže, pokud selže některá z ověření.
  • Zdrojová databáze musí být uživatelská databáze. Klonování systémových databází (master, model, msdb, tempdb, distribuční databáze atd.) není povoleno.
  • Zdrojová databáze musí být online nebo čitelná.
  • Databáze, která používá stejný název jako databáze klonů, ještě nesmí existovat.
  • Příkaz není součástí uživatelské transakce.
Pokud budou všechna ověření úspěšná, DBCC CLONEDATABASE provede následující operace:
  • Vytvoření primárního datového souboru a souboru protokolu
  • Přidání sekundárních datových prostorů
  • Přidání sekundárních souborů
Soubory cílové databáze zdědí nastavení velikosti a růstu z modelové databáze a názvy souborů cílové databáze se budou řídit konvencí název_zdrojového_souboru _podtržítko_náhodné_číslo.
SELECT database_id, file_id, type_desc, name, Physical_name FROM sys.master_files WHERE DB_NAME(database_id) in ('SansSQL', 'SansSQL_Clone') 


Poté DBCC CLOENDATABASE provede snímek interní databáze podle následujících kroků
  • Ověřte zdrojovou databázi
  • Získejte S lock pro zdrojovou databázi
  • Vytvořte snímek zdrojové databáze
  • Vytvořte klonovou databázi (toto je prázdná databáze, která dědí z modelu)
  • Získejte zámek X pro databázi klonů
  • Zkopírujte metadata do databáze klonů
  • Uvolněte všechny zámky DB
Pomocí níže uvedeného příkazu můžeme zkontrolovat, zda je databáze klonem nebo normální databází.
SELECT DATABASEPROPERTYEX('SansSQL','isClone') AS SansSQL_DB_CloneStatus ,DATABASEPROPERTYEX('SansSQL_Clone','isClone') AS SansSQL_CloneDB_CloneStatus 

Odkaz:https://support.microsoft.com/en-in/kb/3177838
  1. Jak funguje ORIGINAL_DB_NAME() na serveru SQL Server

  2. Připojení .NET na Linuxu ke zdroji dat ODBC

  3. Uživatelsky definovaná rutina s DBMS_STATS, část II

  4. Jak změnit uživatele na superuživatele v PostgreSQL