Udostępnij za pomocą


Baza danych DBCC CLONEDATABASE (Transact-SQL)

Dotyczy:programu SQL Server

Generuje kopię bazy danych tylko do odczytu tylko do odczytu, używając polecenia DBCC CLONEDATABASE w celu zbadania problemów z wydajnością związanych z optymalizatorem zapytań.

Transact-SQL konwencje składni

Składnia

DBCC CLONEDATABASE
(
    source_database_name
    ,  target_database_name
)
    [ WITH { [ NO_STATISTICS ] [ , NO_QUERYSTORE ] [ , VERIFY_CLONEDB | SERVICEBROKER ] [ , BACKUP_CLONEDB ] } ]

Argumenty (w programowaniu)

source_database_name

Nazwa bazy danych do skopiowania.

target_database_name

Nazwa bazy danych źródłowej bazy danych zostanie skopiowana. Ta baza danych zostanie utworzona przez DBCC CLONEDATABASE program i nie powinna jeszcze istnieć.

NO_STATISTICS

Dotyczy: SQL Server 2014 (12.x) Service Pack 2 CU 3, SQL Server 2016 (13.x) z dodatkiem Service Pack 1 i nowszymi wersjami.

Określa, czy należy wykluczyć statystyki tabeli/indeksu z klonu. Jeśli ta opcja nie zostanie określona, zostaną automatycznie uwzględnione statystyki tabeli/indeksu.

NO_QUERYSTORE

Dotyczy: programu SQL Server 2016 (13.x) z dodatkiem Service Pack 1 lub nowszym.

Określa, czy dane magazynu zapytań muszą być wykluczone z klonu. Jeśli ta opcja nie zostanie określona, dane magazynu zapytań zostaną skopiowane do klonu, jeśli magazyn zapytań jest włączony w źródłowej bazie danych.

VERIFY_CLONEDB

Dotyczy: Sql Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8 i nowsze wersje.

Sprawdza spójność nowej bazy danych. VERIFY_CLONEDB Włączenie powoduje również wyłączenie statystyk i kolekcji magazynu zapytań, co jest równoważne z uruchomionym poleceniem WITH VERIFY_CLONEDB, NO_STATISTICS, NO_QUERYSTORE.

Następujące polecenie może służyć do określenia, czy sklonowana baza danych została zweryfikowana:

SELECT DATABASEPROPERTYEX('clone_database_name', 'IsVerifiedClone');

BROKER SERWISOWY

Dotyczy: Sql Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8 i nowsze wersje.

Określa, czy katalogi systemu powiązane z brokerem usług powinny być uwzględnione w klonie. Opcji SERVICEBROKER nie można używać w połączeniu z VERIFY_CLONEDB.

BACKUP_CLONEDB

Dotyczy: Sql Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8 i nowsze wersje.

Tworzy i weryfikuje kopię zapasową klonowej bazy danych. W przypadku użycia w połączeniu z klonowaną bazą VERIFY_CLONEDBdanych jest weryfikowana przed wykonaniem kopii zapasowej.

Uwagi

Klon bazy danych wygenerowanej DBCC CLONEDATABASE przy użyciu jest przeznaczony tylko do rozwiązywania problemów i diagnostyki. Klon jest kopią tylko do odczytu, tylko schemat oryginalnej bazy danych i ma ograniczenia dotyczące kopiowania obiektów. Aby uzyskać więcej informacji, zobacz sekcję Obsługiwane obiekty . Żadne inne użycie klonowej bazy danych nie jest obsługiwane.

Następujące weryfikacje są wykonywane przez DBCC CLONEDATABASEprogram . Polecenie kończy się niepowodzeniem, jeśli którakolwiek z weryfikacji zakończy się niepowodzeniem.

  • Źródłowa baza danych musi być bazą danych użytkownika. Klonowanie systemowych baz danych (master, model, msdb, tempdb, distribution bazy danych itd.) nie jest dozwolone.
  • Źródłowa baza danych musi być w trybie online lub może być czytelna.
  • Baza danych, która używa tej samej nazwy co klonowanie bazy danych, nie może jeszcze istnieć.
  • Polecenie nie znajduje się w transakcji użytkownika.

Jeśli wszystkie walidacje kończą się powodzeniem, klonowanie źródłowej bazy danych jest wykonywane przez następujące operacje:

  • Tworzy nową docelową bazę danych, która używa tego samego układu pliku co źródło, ale z domyślnymi rozmiarami plików z model bazy danych.
  • Tworzy wewnętrzną migawkę źródłowej bazy danych.
  • Kopiuje metadane systemu ze źródła do docelowej bazy danych.
  • Kopiuje cały schemat dla wszystkich obiektów ze źródła do docelowej bazy danych.
  • Kopiuje statystyki dla wszystkich indeksów ze źródła do docelowej bazy danych.

Wszystkie pliki w docelowej bazie danych będą dziedziczyć rozmiar i ustawienia wzrostu z model bazy danych. Nazwy plików docelowej bazy danych będą zgodne z konwencją <source_file_name_underscore_random number> . Jeśli wygenerowana nazwa pliku już istnieje w folderze docelowym, DBCC CLONEDATABASE zakończy się niepowodzeniem.

DBCC CLONEDATABASE Program nie obsługuje tworzenia klonu, jeśli istnieją obiekty użytkownika (tabele, indeksy, schematy, role itd.), które zostały utworzone w model bazie danych. Jeśli obiekty użytkownika znajdują się w model bazie danych, klon bazy danych kończy się niepowodzeniem z następującym komunikatem o błędzie:

Msg 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in object <system table> with unique index 'index name'. The duplicate key value is <key value>

Ważne

Jeśli masz indeksy magazynu kolumn, zobacz Zagadnienia dotyczące dostosowywania zapytań z indeksami magazynu kolumn w klonowaniach baz danych w celu zaktualizowania statystyk indeksu magazynu kolumn przed uruchomieniem DBCC CLONEDATABASE polecenia. Począwszy od programu SQL Server 2019 (15.x), czynności ręczne opisane w powyższym artykule nie będą już wymagane, ponieważ DBCC CLONEDATABASE polecenie automatycznie zbiera te informacje.

Statystyka obiektu blob dla indeksów magazynu kolumn

Począwszy od programu SQL Server 2019 (15.x), DBCC CLONEDATABASE automatycznie przechwytuje statystyki obiektów blob dla indeksów magazynu kolumn, więc nie są wymagane żadne kroki ręczne. DBCC CLONEDATABASE Tworzy kopię bazy danych tylko do schematu, która zawiera wszystkie elementy niezbędne do rozwiązywania problemów z wydajnością zapytań bez kopiowania danych. W poprzednich wersjach programu SQL Server polecenie nie skopiowało statystyk niezbędnych do dokładnego rozwiązywania problemów z zapytaniami indeksu magazynu kolumn i czynnościami ręcznymi w celu przechwycenia tych informacji.

Aby uzyskać informacje dotyczące zabezpieczeń danych w sklonowanych bazach danych, zobacz Omówienie zabezpieczeń danych w sklonowanych bazach danych.

Wewnętrzna migawka bazy danych

DBCC CLONEDATABASE używa wewnętrznej migawki bazy danych źródłowej bazy danych na potrzeby spójności transakcyjnej wymaganej do wykonania kopii. Użycie tej migawki uniemożliwia blokowanie i problemy ze współbieżnością podczas wykonywania tych poleceń. Jeśli nie można utworzyć migawki, DBCC CLONEDATABASE zakończy się niepowodzeniem.

Blokady na poziomie bazy danych są przechowywane podczas wykonywania następujących kroków procesu kopiowania:

  • Weryfikowanie źródłowej bazy danych
  • Uzyskiwanie blokady udostępnionej (S) dla źródłowej bazy danych
  • Tworzenie migawki źródłowej bazy danych
  • Tworzenie klonowanej bazy danych (pusta baza danych dziedziczona z model bazy danych)
  • Uzyskiwanie blokady wyłącznej (X) dla klonowania bazy danych
  • Kopiowanie metadanych do klonowania bazy danych
  • Zwolnij wszystkie blokady bazy danych

Po zakończeniu działania polecenia migawka wewnętrzna zostanie porzucona. TRUSTWORTHY opcje i DB_CHAINING są wyłączone w sklonowanej bazie danych.

Obsługiwane obiekty

W docelowej bazie danych można sklonować tylko następujące obiekty. Zaszyfrowane obiekty są klonowane, ale nie mogą być używane w klonowanej bazie danych. Wszystkie obiekty, które nie są wymienione w poniższej sekcji, nie są obsługiwane w klonie:

  • ROLA APLIKACJI
  • GRUPA DOSTĘPNOŚCI
  • INDEKS MAGAZYNU KOLUMN
  • CDB
  • przechwytywanie zmian danych
  • Śledzenie zmian 6, 7, 8
  • CLR 1, 2
  • WŁAŚCIWOŚCI BAZY DANYCH
  • DOMYŚLNY
  • PLIKI I GRUPY PLIKÓW
  • Pełny tekst 3
  • FUNKCJA
  • INDEKS
  • LOGIN
  • FUNKCJA PODZIAŁU
  • SCHEMAT PARTYCJI
  • PROCEDURA 4
  • MAGAZYN ZAPYTAŃ 2, 5
  • ROLA
  • REGUŁA
  • SCHEMAT
  • KOLEJNOŚĆ
  • INDEKS PRZESTRZENNY
  • STATYSTYKA
  • SYNONIM
  • TABELA 9
  • TABELE ZOPTYMALIZOWANE POD KĄTEM PAMIĘCI 2
  • FILESTREAM I FILETABLE OBJECTS 1, 2
  • WYZWALACZ
  • TYP
  • UAKTUALNIONA BAZA DANYCH
  • UŻYTKOWNIK
  • WIDOK
  • Indeks XML
  • KOLEKCJA SCHEMATÓW XML

1 Począwszy od programu SQL Server 2014 (12.x) z dodatkiem Service Pack 2 CU 3.

2 Począwszy od programu SQL Server 2016 (13.x) z dodatkiem Service Pack 1.

3 Począwszy od programu SQL Server 2016 (13.x) z dodatkiem Service Pack 1 CU 2.

4 procedury Transact-SQL są obsługiwane we wszystkich wersjach, począwszy od programu SQL Server 2014 (12.x) z dodatkiem Service Pack 2. Procedury CLR są obsługiwane począwszy od programu SQL Server 2014 (12.x) z dodatkiem Service Pack 2 CU 3. Natywnie skompilowane procedury są obsługiwane począwszy od programu SQL Server 2016 (13.x) z dodatkiem Service Pack 1.

5 Dane magazynu zapytań są kopiowane tylko wtedy, gdy są włączone w źródłowej bazie danych. Aby skopiować najnowsze statystyki środowiska uruchomieniowego w ramach magazynu zapytań, wykonaj polecenie sp_query_store_flush_db , aby opróżnić statystyki środowiska uruchomieniowego do magazynu zapytań przed wykonaniem DBCC CLONEDATABASEpolecenia .

6 Począwszy od programu SQL Server 2016 (13.x) z dodatkiem Service Pack 2 CU 10.

7 Począwszy od programu SQL Server 2017 (14.x) z dodatkiem Service Pack 2 CU 17.

8 Począwszy od programu SQL Server 2019 (15.x) CU 1 i nowszych wersji.

9 Większość tabel systemowych oflagowanych jako is_ms_shipped nie są klonowane.

Uprawnienia

Wymaga członkostwa w stałej roli serwera sysadmin.

Komunikaty dziennika błędów

Następujące komunikaty są przykładem komunikatów zarejestrowanych w dzienniku błędów podczas procesu klonowania:

2018-03-26 15:33:56.05 spid53 Database cloning for 'sourcedb' has started with target as 'sourcedb_clone'.

2018-03-26 15:33:56.46 spid53 Starting up database 'sourcedb_clone'.

2018-03-26 15:33:57.80 spid53 Setting database option TRUSTWORTHY to OFF for database 'sourcedb_clone'.

2018-03-26 15:33:57.80 spid53 Setting database option DB_CHAINING to OFF for database 'sourcedb_clone'.

2018-03-26 15:33:57.88 spid53 Starting up database 'sourcedb_clone'.

2018-03-26 15:33:57.91 spid53 Database 'sourcedb_clone' is a cloned database. A cloned database should be used for diagnostic purposes only and is not supported for use in a production environment.

2018-03-26 15:33:57.92 spid53 Database cloning for 'sourcedb' has finished. Cloned database is 'sourcedb_clone'.

Informacje o pakietach Service Pack dla programu SQL Server

Pakiety serwisowe są kumulatywne. Każdy nowy dodatek Service Pack zawiera wszystkie poprawki, które znajdują się w poprzednich pakietach Service Pack, wraz z nowymi poprawkami. Naszym zaleceniem jest zastosowanie najnowszego dodatku Service Pack i najnowszej aktualizacji zbiorczej dla tego dodatku Service Pack. Nie musisz instalować poprzedniego dodatku Service Pack przed zainstalowaniem najnowszego dodatku Service Pack. Aby uzyskać więcej informacji na temat najnowszej aktualizacji i najnowszej aktualizacji zbiorczej, zobacz Tabela 1 w historii najnowszych aktualizacji i historii wersji programu SQL Server .

Uwaga / Notatka

Nowo wygenerowana baza danych wygenerowana na podstawie bazy danych DBCC CLONEDATABASE nie jest obsługiwana jako produkcyjna baza danych i jest przeznaczona głównie do rozwiązywania problemów i celów diagnostycznych. Zalecamy odłączenie sklonowanej bazy danych po utworzeniu bazy danych.

Właściwości bazy danych

DATABASEPROPERTYEX('dbname', 'IsClone') funkcja zwróci wartość 1, jeśli baza danych została wygenerowana przy użyciu polecenia DBCC CLONEDATABASE.

DATABASEPROPERTYEX('dbname', 'IsVerifiedClone') Funkcja zwróci wartość 1, jeśli baza danych została pomyślnie zweryfikowana przy użyciu polecenia WITH VERIFY_CLONEDB.

Przykłady

Odp. Tworzenie klonu bazy danych zawierającej schemat, statystyki i magazyn zapytań

Poniższy przykład tworzy klon AdventureWorks2025 bazy danych, która zawiera schemat, statystyki i dane magazynu zapytań (SQL Server 2016 (13.x) z dodatkiem Service Pack 1 lub nowszym):

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone);
GO

B. Tworzenie klonu bazy danych tylko do schematu bez statystyk

Poniższy przykład tworzy klon AdventureWorks2025 bazy danych, która nie zawiera statystyk (SQL Server 2014 (12.x) z dodatkiem Service Pack 2 CU 3 lub nowszym):

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS;
GO

C. Tworzenie klonu bazy danych tylko do schematu bez statystyk i magazynu zapytań

Poniższy przykład tworzy klon AdventureWorks2025 bazy danych, która nie zawiera statystyk i danych magazynu zapytań (SQL Server 2016 (13.x) z dodatkiem Service Pack 1 lub nowszym):

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS, NO_QUERYSTORE;
GO

D. Tworzenie klonu bazy danych, która jest weryfikowana

Poniższy przykład tworzy klon AdventureWorks2025 bazy danych tylko schemat bez statystyk i danych magazynu zapytań zweryfikowanych (SQL Server 2016 (13.x) z dodatkiem Service Pack 2 lub nowszym):

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB;
GO

E. Utwórz klon bazy danych zweryfikowanej do użycia, która zawiera kopię zapasową sklonowanej bazy danych

Poniższy przykład tworzy klon AdventureWorks2025 bazy danych tylko schemat bez statystyk i danych magazynu zapytań, które są weryfikowane do użycia. Zostanie również utworzona zweryfikowana kopia zapasowa sklonowanej bazy danych (SQL Server 2016 (13.x) z dodatkiem Service Pack 2 lub nowszym.

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB, BACKUP_CLONEDB;
GO

Zobacz także