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

Voir aussi