DBCC CLONEDATABASE (Transact-SQL)
S’applique à :SQL Server
Génère un clone de schéma uniquement d’une base de données avec DBCC CLONEDATABASE
pour identifier la cause des problèmes de performances liés à l’optimiseur de requête.
Conventions de la syntaxe Transact-SQL
Syntaxe
DBCC CLONEDATABASE
(
source_database_name
, target_database_name
)
[ WITH { [ NO_STATISTICS ] [ , NO_QUERYSTORE ] [ , VERIFY_CLONEDB | SERVICEBROKER ] [ , BACKUP_CLONEDB ] } ]
Notes
Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.
Arguments
source_database_name
Nom de la base de données à copier.
target_database_name
Nom de la base de données dans laquelle la base de données est copiée. Cette base de données est créée par DBCC CLONEDATABASE
et ne doit pas déjà exister.
NO_STATISTICS
S’applique à : SQL Server 2014 (12.x) Service Pack 2 CU 3, SQL Server 2016 (13.x) Service Pack 1 et versions ultérieures.
Indique si les statistiques de table/index doivent être exclues du clone. Si cette option n’est pas spécifiée, les statistiques de table/index sont automatiquement incluses.
NO_QUERYSTORE
S’applique à : SQL Server 2016 (13.x) Service Pack 1 et versions ultérieures.
Précise si les données du magasin des requêtes doivent être exclues du clone. Quand cette option n’est pas spécifiée, les données du magasin des requêtes sont copiées dans le clone si le magasin des requêtes est activé dans la base de données source.
VERIFY_CLONEDB
S’applique à : SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8, et versions ultérieures.
Vérifie la cohérence de la nouvelle base de données. Cette option est obligatoire si la base de données clonée est censée être utilisée en production. De plus, l’activation de VERIFY_CLONEDB
désactive la collecte des statistiques et des données du magasin des requêtes, ce qui équivaut à exécuter WITH VERIFY_CLONEDB, NO_STATISTICS, NO_QUERYSTORE
.
La commande suivante peut être utilisée pour vérifier que la base de données clonée est prête pour la production :
SELECT DATABASEPROPERTYEX('clone_database_name', 'IsVerifiedClone');
SERVICEBROKER
S’applique à : SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8, et versions ultérieures.
Spécifie si les catalogues système liés à Service Broker doivent être inclus dans le clone. L’option SERVICEBROKER
ne peut pas être utilisée en combinaison avec VERIFY_CLONEDB
.
BACKUP_CLONEDB
S’applique à : SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8, et versions ultérieures.
Crée et vérifie une sauvegarde de la base de données de clonage. Dans le cas d’une utilisation avec VERIFY_CLONEDB
, la base de données de clonage est vérifiée avant que la sauvegarde soit effectuée.
Notes
Les validations suivantes sont effectuées par DBCC CLONEDATABASE
. La commande échoue si l’une des validations échoue.
- La base de données source doit être une base de données utilisateur. Le clonage des bases de données système (
master
,model
,msdb
,tempdb
,distribution
, etc.) n’est pas autorisé. - La base de données source doit être en ligne ou accessible en lecture.
- Une base de données qui utilise le même nom que la base de données de clonage ne doit pas déjà exister.
- La commande n’est pas une transaction utilisateur.
Si toutes les validations réussissent, le clonage de la base de données source est effectué par les opérations suivantes :
- Crée une base de données de destination qui utilise la même structure de fichier que la source, mais avec les tailles de fichier par défaut de la base de données
model
. - Crée un instantané interne de la base de données source.
- Copie les métadonnées système de la base de données source vers la base de données de destination.
- Copie l’intégralité du schéma pour tous les objets de la base de données source vers la base de données de destination.
- Copie les statistiques pour tous les index de la base de données source vers la base de données de destination.
Notes
La nouvelle base de données générée à partir de DBCC CLONEDATABASE
est destinée principalement au dépannage et au diagnostic. Pour que la base de données clonée puisse être utilisée comme base de données de production, l’option VERIFY_CLONEDB
doit être utilisée.
Tous les fichiers dans la base de données cible héritent des paramètres de taille et de croissance de la base de données model
. Les noms de fichier pour la base de données de destination respectent la convention <source_file_name_underscore_random number>
. Si le nom de fichier généré existe déjà dans le dossier de destination, DBCC CLONEDATABASE
échoue.
DBCC CLONEDATABASE
ne prend pas en charge la création d’un clone si des objets utilisateur (tables, index, schémas, rôles, etc.) ont déjà été créés dans la base de données model
. Si des objets utilisateur sont présents dans la base de données model
, le clone de base de données échoue avec le message d’erreur suivant :
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>
Important
Si vous avez des index columnstore, consultez Remarques à prendre en compte lors de l'optimisation des requêtes avec des index Columnstore sur des bases de données clones pour mettre à jour les statistiques d’index columnstore avant d’exécuter la commande DBCC CLONEDATABASE
. À compter de SQL Server 2019 (15.x), les étapes manuelles listées dans l’article ci-dessus ne sont plus nécessaires, car la commande DBCC CLONEDATABASE
collecte automatiquement ces informations.
Objets blob de statistiques pour les index columnstore
À compter de SQL Server 2019 (15.x), DBCC CLONEDATABASE
capture automatiquement les objets blob de statistiques pour les index columnstore. Aucune étape manuelle n’est donc nécessaire. DBCC CLONEDATABASE
crée une copie de schéma uniquement d’une base de données qui inclut tous les éléments nécessaires pour résoudre les problèmes de performances de requête sans copier les données. Dans les versions précédentes de SQL Server, la commande ne copiait pas les statistiques permettant de résoudre avec précision les problèmes des requêtes d’index columnstore, ce qui obligeait l’utilisateur à effectuer des étapes manuelles pour capturer ces informations.
Pour plus d’informations sur la sécurité des données dans les bases de données clonées, consultez Understanding data security in cloned databases.
Instantané de base de données interne
DBCC CLONEDATABASE
utilise un instantané de base de données interne de la base de données source pour assurer la cohérence transactionnelle nécessaire à l’exécution de la copie. L’utilisation de cet instantané évite les problèmes de blocage et de concurrence pendant l’exécution de ces commandes. Si un instantané ne peut pas être créé, DBCC CLONEDATABASE
échoue.
Les verrous au niveau de la base de données sont conservés pendant les étapes suivantes du processus de copie :
- Validation de la base de données source
- Obtention du verrou (S) partagé pour la base de données source
- Création d’un instantané de la base de données source
- Création d’une base de données de clonage (base de données vide héritée de la base de données
model
) - Obtention du verrou (X) exclusif pour la base de données de clonage
- Copie des métadonnées dans la base de données de clonage
- Libération de tous les verrous de base de données
Dès lors que l’exécution de la commande est terminée, l’instantané interne est supprimé. Les options TRUSTWORTHY
et DB_CHAINING
sont désactivées sur une base de données clonée.
Objets pris en charge
Seuls les objets suivants peuvent être clonés dans la base de données de destination. Les objets chiffrés sont clonés, mais ne peuvent pas être utilisés dans la base de données de clonage. Les objets qui ne sont pas répertoriés dans la section suivante ne sont pas pris en charge dans le clone :
- APPLICATION ROLE
- AVAILABILITY GROUP
- COLUMNSTORE INDEX
- CDB
- CDC
- Suivi des modifications 6, 7, 8
- CLR 1, 2
- DATABASE PROPERTIES
- DEFAULT
- FILES AND FILEGROUPS
- Texte intégral 3
- FUNCTION
- INDEX
- Connexion
- PARTITION FUNCTION
- PARTITION SCHEME
- PROCEDURE 4
- QUERY STORE 2, 5
- ROLE
- RULE
- SCHEMA
- SEQUENCE
- SPATIAL INDEX
- STATISTICS
- SYNONYM
- TABLE
- MEMORY OPTIMIZED TABLES 2
- FILESTREAM AND FILETABLE OBJECTS 1, 2
- TRIGGER
- TYPE
- UPGRADED DB
- Utilisateur
- VIEW
- XML INDEX
- XML SCHEMA COLLECTION
1 À compter de SQL Server 2014 (12.x) Service Pack 2 CU 3.
2 À compter de SQL Server 2016 (13.x) Service Pack 1.
3 À compter de SQL Server 2016 (13.x) Service Pack 1 CU 2.
4 Les procédures Transact-SQL sont prises en charge dans toutes les versions à compter de SQL Server 2014 (12.x) Service Pack 2. Les procédures CLR sont prises en charge à partir de SQL Server 2014 (12.x) Service Pack 2 CU 3. Les procédures compilées en mode natif sont prises en charge à compter de SQL Server 2016 (13.x) Service Pack 1.
5 Les données du magasin des requêtes sont copiées uniquement si cette fonction est activée dans la base de données source. Pour copier les statistiques d’exécution les plus récentes dans le magasin des requêtes, exécutez sp_query_store_flush_db
pour effacer les statistiques d’exécution dans le magasin des requêtes avant d’exécuter DBCC CLONEDATABASE
.
6 À partir de SQL Server 2016 (13.x) Service Pack 2 CU 10.
7 À partir de SQL Server 2017 (14.x) Service Pack 2 CU 17.
8 À compter de SQL Server 2019 (15.x) CU 1 et versions ultérieures.
Autorisations
Nécessite l'appartenance au rôle serveur fixe sysadmin .
Messages du journal des erreurs
Les messages suivants sont un exemple des messages enregistrés dans le journal des erreurs pendant le processus de clonage :
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'.
À propos des Service Packs pour SQL Server
Les Service Packs sont cumulatifs. Chaque nouveau Service Pack contient tous les correctifs qui se trouvent dans les Service Packs précédents, ainsi que les nouveaux correctifs. Nous vous recommandons d’appliquer le dernier Service Pack et la dernière mise à jour cumulative pour ce Service Pack. Vous n’avez pas besoin d’installer un Service Pack précédent avant d’installer le dernier Service Pack. Consultez le tableau 1 dans l’historique des dernières mises à jour et versions de SQL Server pour obtenir plus d’informations sur le dernier Service Pack et la dernière mise à jour cumulative.
Remarque
La base de données nouvellement générée à partir de DBCC CLONEDATABASE n’est pas prise en charge pour être utilisée comme base de données de production et est principalement destinée à des fins de dépannage et de diagnostic. Nous vous recommandons de détacher la base de données clonées une fois la base de données créée.
Propriétés de la base de données
DATABASEPROPERTYEX('dbname', 'IsClone')
retourne 1 si la base de données a été générée à l’aide de DBCC CLONEDATABASE
.
DATABASEPROPERTYEX('dbname', 'IsVerifiedClone')
retourne 1 si la base de données a été vérifiée avec succès avec WITH VERIFY_CLONEDB
.
Exemples
R. Créer un clone d’une base de données qui inclut un schéma, des statistiques et un magasin des requêtes
L’exemple suivant crée un clone de la base de données AdventureWorks2022
qui inclut un schéma, des statistiques et des données du magasin des requêtes (SQL Server 2016 (13.x) Service Pack 1 et versions ultérieures) :
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone);
GO
B. Créer un clone de schéma uniquement d’une base de données sans statistiques
L’exemple suivant crée un clone de la base de données AdventureWorks2022
qui n’inclut pas de statistiques (SQL Server 2014 (12.x) Service Pack 2 CU3 et versions ultérieures) :
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS;
GO
C. Créer un clone de schéma uniquement d’une base de données sans statistiques ni magasin des requêtes
L’exemple suivant crée un clone de la base de données AdventureWorks2022
qui n’inclut pas de statistiques ni de données du magasin des requêtes (SQL Server 2016 (13.x) Service Pack 1 et versions ultérieures) :
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS, NO_QUERYSTORE;
GO
D. Créer un clone d’une base de données qui est vérifié pour une utilisation en production
L’exemple suivant crée un clone de schéma uniquement de la base de données AdventureWorks2022
qui n’inclut pas de statistiques ni de données du magasin des requêtes et qui est vérifié pour une utilisation comme base de données de production (SQL Server 2016 (13.x) Service Pack 2 et versions ultérieures) :
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB;
GO
E. Créer un clone d’une base de données qui est vérifié pour une utilisation en production, avec une sauvegarde de la base de données clonée
L’exemple suivant crée un clone de schéma uniquement de la base de données AdventureWorks2022
sans statistiques ni données du magasin des requêtes qui est vérifié pour une utilisation comme base de données de production. Une sauvegarde vérifiée de la base de données clonée est également créée (SQL Server 2016 (13.x) Service Pack 2 et versions ultérieures).
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB, BACKUP_CLONEDB;
GO