Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Używanie DBCC CLONEDATABASE do generowania schematu i tylko kopii statystyk bazy danych użytkownika w programie SQL Server 2014 z dodatkiem SP2

DBCC CLONEDATABASE to nowe polecenie DBCC wprowadzone w SQL Server 2014 SP 2, które służy do tworzenia klonu określonej bazy danych użytkownika, co pomaga w rozwiązywaniu problemów z wydajnością związanych z optymalizatorem zapytań.

Kiedy klon bazy danych jest tworzony przy użyciu DBCC CLONEDATABASE, utworzy schemat i tylko kopię statystyki określonej bazy danych i nie zawiera żadnej kopii danych.

Utworzenie klonu jest tak proste, jak przekazanie źródła nazwa bazy danych i sklonuj nazwę bazy danych do polecenia DBCC.
DBCC CLONEDATABASE ('SansSQL', 'SansSQL_Clone') 

Wyjście polecenia DBCC

Po zakończeniu klonowania sklonowana baza danych będzie w trybie tylko do odczytu.

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

Co się właściwie dzieje, gdy wydamy polecenie DBCC CLONEDATABASE w bazie danych?
Zacznie się od kilka walidacji przed utworzeniem klonu, Następujące walidacje są wykonywane przez DBCC CLONEDATABASE. Polecenie nie powiedzie się, jeśli którakolwiek z walidacji się nie powiedzie.
  • Źródłowa baza danych musi być bazą danych użytkownika. Klonowanie systemowych baz danych (master, model, msdb, tempdb, dystrybucyjna baza danych itp.) jest niedozwolone.
  • Źródłowa baza danych musi być online lub czytelna.
  • Baza danych, która używa tej samej nazwy co baza danych klonu, nie może już istnieć.
  • Polecenie nie znajduje się w transakcji użytkownika.
Jeśli wszystkie walidacje powiodą się, DBCC CLONEDATABASE wykona następujące operacje:
  • Tworzenie podstawowego pliku danych i pliku dziennika
  • Dodawanie dodatkowych przestrzeni danych
  • Dodawanie plików pomocniczych
Docelowe pliki bazy danych odziedziczą ustawienia rozmiaru i wzrostu z bazy danych modelu, a nazwy plików docelowej bazy danych będą zgodne z konwencją nazwa_pliku_źródłowego _podkreślenie_liczba_losowa.
SELECT database_id, file_id, type_desc, name, physical_name 
FROM sys.master_files 
WHERE DB_NAME(database_id) in ('SansSQL', 'SansSQL_Clone') 


Następnie DBCC CLONEDATABASE wykona migawkę wewnętrznej bazy danych z następującymi krokami
  • Zweryfikuj źródłową bazę danych
  • Pobierz S lock dla źródłowej bazy danych
  • Utwórz zrzut źródłowej bazy danych
  • Utwórz bazę danych klonów (jest to pusta baza danych, która dziedziczy z modelu)
  • Pobierz blokadę X dla bazy danych klonów
  • Skopiuj metadane do bazy danych klonów
  • Zwolnij wszystkie blokady DB
Używając poniższego polecenia, możemy sprawdzić, czy baza danych jest klonem, czy zwykłą bazą danych.
SELECT DATABASEPROPERTYEX('SansSQL','isClone') AS SansSQL_DB_CloneStatus 
      ,DATABASEPROPERTYEX('SansSQL_Clone','isClone') AS SansSQL_CloneDB_CloneStatus


Odniesienie:https://support.microsoft.com/en-in/kb/3177838
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest PROFIL STATYSTYKI w SQL Server?

  2. Czy powinienem używać !=lub <> dla not equal w T-SQL?

  3. POWER() Przykłady w SQL Server

  4. Napraw problem oczekujący na odzyskanie bazy danych SQL z odmową dostępu

  5. Procedura składowana lub funkcja oczekuje parametru, który nie jest dostarczany