DBCC CLONEDATABASE (Transact-SQL)
Применимо к:SQL Server
Создает клон базы данных только для схемы, используя DBCC CLONEDATABASE
для изучения проблем производительности, связанных с оптимизатором запросов.
Соглашения о синтаксисе Transact-SQL
Синтаксис
DBCC CLONEDATABASE
(
source_database_name
, target_database_name
)
[ WITH { [ NO_STATISTICS ] [ , NO_QUERYSTORE ] [ , VERIFY_CLONEDB | SERVICEBROKER ] [ , BACKUP_CLONEDB ] } ]
Примечание.
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
<имя_исходной_базы>
Имя копируемой базы данных.
target_database_name
Имя базы данных, в которую будет скопирована исходная база данных. Эта база данных будет создана DBCC CLONEDATABASE
и не должна существовать.
NO_STATISTICS
Область применения: SQL Server 2014 (12.x) с пакетом обновления 2 (CU 3), SQL Server 2016 (13.x) с пакетом обновления 1 (SP1) и более поздними версиями.
Указывает, необходимо ли исключить статистику по таблицам или индексу из клона. Если этот параметр не указан, статистика таблиц и индексов автоматически включается.
NO_QUERYSTORE
Область применения: SQL Server 2016 (13.x) с пакетом обновления 1 и более поздних версий.
Указывает, необходимо ли исключить хранилище запросов данные из клона. Если этот параметр не указан, хранилище запросов данные будут скопированы в клон, если в базе данных-источнике включена хранилище запросов.
VERIFY_CLONEDB
Область применения: SQL Server 2014 (12.x) с пакетом обновления 3 , SQL Server 2016 (13.x) с пакетом обновления 2, SQL Server 2017 (14.x) CU 8 и более поздних версий.
Проверяет согласованность новой базы данных. Этот параметр обязателен, если клонируемая база данных предназначена для использования в рабочей среде. Включение VERIFY_CLONEDB
также отключает статистику и коллекцию хранилище запросов, поэтому она эквивалентна выполнениюWITH VERIFY_CLONEDB, NO_STATISTICS, NO_QUERYSTORE
.
С помощью следующей команды можно проверить, готова ли клонированная база данных к использованию в рабочей среде:
SELECT DATABASEPROPERTYEX('clone_database_name', 'IsVerifiedClone');
SERVICEBROKER
Область применения: SQL Server 2014 (12.x) с пакетом обновления 3 , SQL Server 2016 (13.x) с пакетом обновления 2, SQL Server 2017 (14.x) CU 8 и более поздних версий.
Указывает, следует ли включать в клон связанные системные каталоги Service Broker. Параметр SERVICEBROKER
нельзя использовать в сочетании с VERIFY_CLONEDB
.
BACKUP_CLONEDB
Область применения: SQL Server 2014 (12.x) с пакетом обновления 3 , SQL Server 2016 (13.x) с пакетом обновления 2, SQL Server 2017 (14.x) CU 8 и более поздних версий.
Создает и проверяет резервную копию клонированной базы данных. При использовании в сочетании с VERIFY_CLONEDB
клонированием базы данных проверяется перед созданием резервного копирования.
Замечания
Следующие проверки выполняются DBCC CLONEDATABASE
. Если хотя бы одна из них не пройдена, команда завершается сбоем.
- База данных-источник должна быть пользовательской базой данных. Клонирование системных баз данных (
master
, ,model
msdb
,distribution
tempdb
баз данных и т. д.) не допускается. - База данных-источник должна находиться в режиме "в сети" и быть доступной для чтения.
- Не должно существовать базы данных с тем же именем, что и у клонированной базы данных.
- Команда не включена в пользовательскую транзакцию.
Если все проверки пройдены успешно, база данных-источник клонируется, для чего выполняются перечисленные ниже операции.
- Создает новую целевую базу данных, которая использует тот же макет файла, что и исходный, но с размерами файлов по умолчанию из
model
базы данных. - Создается внутренний моментальный снимок базы данных-источника.
- Системные метаданные копируются из базы данных-источника в конечную базу данных.
- Схема всех объектов копируется из базы данных-источника в конечную базу данных.
- Статистика всех индексов копируется из базы данных-источника в конечную базу данных.
Примечание.
Новая база данных, созданная из DBCC CLONEDATABASE
, в основном предназначена для устранения неполадок и диагностики. Чтобы клонированная база данных была поддерживается для использования в качестве рабочей базы данных, VERIFY_CLONEDB
необходимо использовать этот параметр.
Все файлы в целевой базе данных наследуют параметры размера и роста из model
базы данных. Имена файлов для целевой базы данных будут соответствовать соглашению <source_file_name_underscore_random number>
. Если созданное имя файла уже существует в целевой папке, DBCC CLONEDATABASE
завершится ошибкой.
DBCC CLONEDATABASE
не поддерживает создание клона, если в базе данных есть объекты пользователя (таблицы, индексы, схемы, роли и т. д.), созданные в model
базе данных. Если объекты пользователя присутствуют в model
базе данных, клон базы данных завершается ошибкой со следующим сообщением об ошибке:
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>
Важно!
Если у вас есть индексы columnstore, ознакомьтесь с рекомендациями по настройке запросов с индексами Columnstore в клонированных базах данных , чтобы обновить статистику индекса columnstore перед выполнением DBCC CLONEDATABASE
команды. Начиная с SQL Server 2019 (15.x), действия вручную, описанные в приведенной выше статье, больше не потребуются, так как DBCC CLONEDATABASE
команда собирает эти сведения автоматически.
BLOB-объект статистики для индексов columnstore
Начиная с SQL Server 2019 (15.x), DBCC CLONEDATABASE
автоматически фиксирует большие двоичные объекты статистики для индексов columnstore, поэтому не требуются инструкции вручную. DBCC CLONEDATABASE
позволяет создать копию только схемы базы данных, содержащую все элементы, необходимые для устранения проблем с производительностью запросов без копирования данных. В предыдущих версиях SQL Server команда не скопировали статистику, необходимую для точного устранения неполадок с запросами индекса columnstore и ручных действий, необходимых для сбора этих сведений.
Сведения о безопасности данных в клонированных базах данных см. в записи блога Сведения о безопасности данных в клонированных базах данных.
Внутренний моментальный снимок базы данных
DBCC CLONEDATABASE
использует внутренний моментальный снимок базы данных-источника для согласованности транзакций, необходимой для выполнения копирования. Тем самым предотвращаются проблемы блокировки и параллелизма при выполнении этих команд. Если не удается создать моментальный снимок, DBCC CLONEDATABASE
завершится сбоем.
Блокировки на уровне базы данных устанавливаются во время следующих этапов процесса копирования:
- проверка базы данных-источника;
- Получение общей блокировки (S) для исходной базы данных
- создание моментального снимка базы данных-источника;
- Создание клонной базы данных (пустая база данных, унаследованная от
model
базы данных) - Получение монопольной блокировки (X) для клонирования базы данных
- копирование метаданных в клонированную базу данных;
- Выпуск всех блокировок базы данных
Как только выполнение команды завершается, внутренний моментальный снимок удаляется. TRUSTWORTHY
и DB_CHAINING
параметры отключены в клонированных базах данных.
Поддерживаемые объекты
В конечной базе данных можно клонировать только перечисленные ниже объекты. Зашифрованные объекты клонируются, но недоступны для использования в клонированной базе данных. Все объекты, которые не перечислены в следующем разделе, не поддерживаются в клоне:
- APPLICATION ROLE
- AVAILABILITY GROUP
- COLUMNSTORE INDEX
- CDB
- CDC
- Отслеживание изменений 6, 7, 8
- CLR 1, 2
- Свойства базы данных
- ПО УМОЛЧАНИЮ
- Файлы и файловые группы
- Полный текст 3
- FUNCTION
- ИНДЕКС
- ВХОД
- PARTITION FUNCTION
- PARTITION SCHEME
- ПРОЦЕДУРА 4
- ХРАНИЛИЩЕ ЗАПРОСОВ 2, 5
- РОЛЬ
- ПРАВИЛО
- СХЕМА
- SEQUENCE
- SPATIAL INDEX
- STATISTICS
- SYNONYM
- TABLE
- ОПТИМИЗИРОВАННЫЕ ДЛЯ ПАМЯТИ ТАБЛИЦЫ 2
- ОБЪЕКТЫ FILESTREAM И FILETABLE 1, 2
- ТРИГГЕР
- ТИП
- Обновленная база данных
- Пользователь
- ВИД
- XML INDEX
- XML SCHEMA COLLECTION
1 Начиная с SQL Server 2014 (12.x) с пакетом обновления 2 (CU 3).
2 Начиная с SQL Server 2016 (13.x) с пакетом обновления 1 (SP1).
3 Начиная с SQL Server 2016 (13.x) с пакетом обновления 1 (CU 2).
4 Процедуры Transact-SQL поддерживаются во всех выпусках, начиная с SQL Server 2014 (12.x) с пакетом обновления 2 (SP2). Процедуры CLR поддерживаются начиная с SQL Server 2014 (12.x) с пакетом обновления 2 (CU 3). Встроенные скомпилированные процедуры поддерживаются начиная с SQL Server 2016 (13.x) с пакетом обновления 1 (SP1).
5 хранилище запросов данные копируются только в том случае, если он включен в исходной базе данных. Чтобы скопировать последнюю статистику среды выполнения в рамках хранилище запросов, выполните очистку sp_query_store_flush_db
статистики среды выполнения до хранилище запросов перед выполнениемDBCC CLONEDATABASE
.
6 Начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (CU 10).
7 Начиная с SQL Server 2017 (14.x) с пакетом обновления 2 (CU 17).
8 Начиная с SQL Server 2019 (15.x) CU 1 и более поздних версий.
Разрешения
Необходимо членство в предопределенной роли сервера sysadmin .
Сообщения в журнале ошибок
Ниже приведены примеры сообщений, которые могут записываться в журнал ошибок во время клонирования.
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'.
Сведения о пакетах обновления для SQL Server
Пакеты обновления являются накопительными. Каждый новый пакет обновления содержит все исправления, которые находятся в предыдущих пакетах обновления, вместе с любыми новыми исправлениями. Мы рекомендуем применить последний пакет обновления и последнее накопительное обновление для этого пакета обновления. Перед установкой последнего пакета обновления вам не нужно устанавливать предыдущий пакет обновления. Дополнительные сведения о последнем пакете обновления и последнем накопительном обновлении см . в таблице 1 в журнале последних обновлений и журнала версий SQL Server .
Примечание.
Созданная база данных, созданная из DBCC CLONEDATABASE, не поддерживается для использования в качестве рабочей базы данных и в основном предназначена для устранения неполадок и диагностики. Мы рекомендуем отключить клонированную базу данных после создания базы данных.
Свойства базы данных
DATABASEPROPERTYEX('dbname', 'IsClone')
возвращает значение 1, если база данных была создана с помощью DBCC CLONEDATABASE
.
DATABASEPROPERTYEX('dbname', 'IsVerifiedClone')
возвращает значение 1, если база данных успешно проверена с помощью WITH VERIFY_CLONEDB
.
Примеры
А. Создание клона базы данных, включающей схему, статистику и хранилище запросов
В следующем примере создается клон AdventureWorks2022
базы данных, которая включает схемы, статистику и хранилище запросов данные (SQL Server 2016 (13.x) с пакетом обновления 1 и более поздних версий):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone);
GO
B. Создание клона базы данных только для схемы без статистики
В следующем примере создается клон AdventureWorks2022
базы данных, которая не включает статистику (SQL Server 2014 (12.x) с пакетом обновления 2 (CU 3) и более поздних версий:
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS;
GO
C. Создание клона базы данных только для схемы без статистики и хранилище запросов
В следующем примере создается клон AdventureWorks2022
базы данных, которая не включает статистику и данные хранилище запросов (SQL Server 2016 (13.x) с пакетом обновления 1 и более поздних версий):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS, NO_QUERYSTORE;
GO
D. Создание клона базы данных, проверенной для использования в рабочей среде
В следующем примере создается клон AdventureWorks2022
базы данных только для схемы без статистики и хранилище запросов данных, проверенных для использования в качестве рабочей базы данных (SQL Server 2016 (13.x) с пакетом обновления 2 и более поздних версий):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB;
GO
Д. Создание клона базы данных, проверенной для использования в рабочей среде, которая включает резервную копию клонированных баз данных.
В следующем примере создается клон AdventureWorks2022
базы данных только для схемы без статистики и хранилище запросов данных, проверенных для использования в качестве рабочей базы данных. Также будет создана проверенная резервная копия клонированных баз данных (SQL Server 2016 (13.x) с пакетом обновления 2 и более поздних версий.
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB, BACKUP_CLONEDB;
GO