Détacher une base de données

S’applique à :SQL Server

Cet article explique comment détacher une base de données dans SQL Server avec SQL Server Management Studio ou Transact-SQL. Les fichiers détachés ne sont pas supprimés et restent dans le système de fichiers. Les fichiers peuvent être rattachés à l’aide des options CREATE DATABASE ... FOR ATTACH ou FOR ATTACH_REBUILD_LOG. Les fichiers peuvent également être déplacés vers un autre serveur et attachés à une instance ayant la même version ou une version plus récente.

Limites

Pour obtenir la liste des limitations et restrictions, consultez Attacher et détacher une base de données (SQL Server).

Autorisations

Nécessite l'appartenance au rôle de base de données fixe db_owner.

Utiliser SQL Server Management Studio

Avant de déplacer une base de données

Si vous déplacez une base de données, avant de la détacher de son instance SQL existante, utilisez la page Propriétés de la base de données pour examiner les fichiers associés à la base de données ainsi que leurs emplacements actuels.

  1. Dans l’explorateur d’objets SQL Server Management Studio, connectez-vous à l’instance du moteur de base de données SQL Server, puis étendez l’instance.

  2. Développez Bases de données, puis sélectionnez le nom de la base de données utilisateur que vous souhaitez détacher.

  3. Cliquez avec le bouton droit sur la base de données et sélectionnez Propriétés. Sélectionnez la page Fichiers et examinez les entrées de la table Fichiers de base de données :.

Veillez à prendre en compte tous les fichiers associés à la base de données avant de la détacher, de la déplacer et de l’attacher. Procédez ensuite aux étapes de détachement dans la section suivante. Pour en savoir plus sur comment attacher une base de données à un nouvel emplacement, consultez Attacher une base de données.

Détacher une base de données

  1. Dans l’explorateur d’objets SQL Server Management Studio, connectez-vous à l’instance du moteur de base de données SQL Server, puis étendez l’instance.

  2. Développez Bases de données, puis sélectionnez le nom de la base de données utilisateur que vous souhaitez détacher.

  3. Cliquez avec le bouton droit sur le nom de la base de données, pointez sur Tâches, puis sélectionnez Détacher. La boîte de dialogue Détacher la base de données apparaît.

    • Bases de données à détacher : répertorie les bases de données à détacher.

    • Nom de la base de données : affiche le nom de la base de données à détacher.

    • Supprimer les connexions : permet de déconnecter les connexions à la base de données spécifiée.

      Remarque

      Vous ne pouvez pas détacher une base de données avec des connexions actives.

    • Mettre à jour les statistiques : par défaut, l’opération de détachement conserve toutes les statistiques d’optimisation obsolètes avant de procéder au détachement ; pour actualiser les statistiques existantes, activez cette case à cocher.

    • Conserver les catalogues de texte intégral : par défaut, l’opération de détachement conserve tous les catalogues de texte intégral associés à la base de données. Pour les supprimer, décochez la case Conserver les catalogues de texte intégral . Cette option s’affiche uniquement lorsque vous mettez à niveau une base de données à partir de SQL Server 2005 (9.x).

    • État : affiche l’un des états suivants : Prêt ou Non prêt.

    • Message : la colonne Message peut indiquer des informations sur la base de données comme suit :

      • Lorsqu'une base de données est impliquée dans la réplication, l' État est Non prêt et la colonne Message indique Base de données répliquée.

      • Quand une base de données a une ou plusieurs connexions actives, l’État est Non prêt et la colonne Message indique <nombre_de_connexions_actives>connexion(s) active(s). Par exemple : 1 connexion active. Pour pouvoir détacher la base de données, vous devez déconnecter toutes les connexions actives en sélectionnant Supprimer les connexions.

      Pour obtenir plus d'informations sur un message, sélectionnez le texte du lien hypertexte pour ouvrir le Moniteur d'activité.

  4. Lorsque vous êtes prêt à lancer le processus, sélectionnez OK.

Remarque

La base de données ainsi détachée reste toujours visible dans le nœud Bases de données de l'explorateur d'objets jusqu'à ce que la vue soit actualisée. Actualisez la vue à tout moment en cliquant dans le volet de l’explorateur d’objets et en sélectionnant, dans la barre des menus, les éléments Affichage puis Actualiser.

Utiliser Transact-SQL

Avant de déplacer une base de données

Si vous déplacez une base de données, avant de la détacher de son instance SQL Server existante, utilisez la vue de catalogue système sys.database_files pour examiner les fichiers associés à la base de données ainsi que leurs emplacements actuels. Pour plus d’informations, consultez sys.database_files (Transact-SQL).

  1. Dans SQL Server Management Studio, sélectionnez Nouvelle requête pour ouvrir l’éditeur de requête.

  2. Copiez le script Transact-SQL suivant dans l’éditeur de requête, puis sélectionnez Exécuter. Ce script affiche l’emplacement des fichiers physiques de base de données. Veillez à prendre en compte l’ensemble des fichiers lors du déplacement de la base de données par détachement/attachement.

    USE [database_name]
    GO
    
    SELECT type_desc, name, physical_name
    FROM sys.database_files;
    

Veillez à prendre en compte tous les fichiers associés à la base de données avant de la détacher, de la déplacer et de l’attacher. Procédez ensuite aux étapes de détachement dans la section suivante. Pour en savoir plus sur comment attacher une base de données à un nouvel emplacement, consultez Attacher une base de données.

Détacher une base de données

  1. Connectez-vous au Moteur de base de données.

  2. Dans la barre d’outils standard, sélectionnez Nouvelle requête.

  3. Copiez et collez l’exemple suivant dans la fenêtre de requête, puis sélectionnez Exécuter. Cet exemple détache la base de données AdventureWorks2022 avec l’option skipchecks définie sur la valeur true. Pour plus d’informations, consultez sp_detach_db.

    EXEC sp_detach_db 'AdventureWorks2022', 'true';