Attacher et détacher une base de données (SQL Server)

S’applique à :SQL Server

Les données et les journaux de transactions d’une base de données peuvent être détachés, puis rattachés à la même instance ou à une autre instance de SQL Server. Le détachement et l’attachement d’une base de données sont utiles pour transférer la base de données dans une instance différente de SQL Server sur le même ordinateur ou pour la déplacer.

Autorisations

Les autorisations d’accès au fichier sont définies au cours de plusieurs opérations de base de données, notamment le détachement ou l’attachement d’une base de données.

Important

Nous vous recommandons de ne pas attacher ni restaurer de bases de données provenant de sources inconnues ou non approuvées. Ces bases de données peuvent contenir du code malveillant susceptible d'exécuter du code Transact-SQL indésirable ou de provoquer des erreurs en modifiant le schéma ou la structure physique des bases de données. Avant d’utiliser une base de données issue d’une source inconnue ou non approuvée, exécutez DBCC CHECKDB (Transact-SQL) sur la base de données sur un serveur autre qu’un serveur de production et examinez également le code, notamment les procédures stockées ou le code défini par l’utilisateur, de la base de données.

Détacher une base de données

Détacher une base de données consiste à la supprimer de l’instance de SQL Server sans toucher à ses fichiers de données et à ses journaux de transactions. Ces fichiers peuvent ensuite servir à rattacher la base de données à n’importe quelle instance de SQL Server, y compris le serveur d’où la base de données a été détachée.

Une base de données ne peut pas être détachée si l’une des conditions suivantes est vraie :

  • La base de données est répliquée et publiée. Si elle est répliquée, la base de données ne doit pas être publiée. Avant de pouvoir la détacher, vous devez désactiver la publication en exécutant sp_replicationdboption.

    Remarque

    Si vous ne pouvez pas utiliser sp_replicationdboption, vous pouvez supprimer la réplication en exécutant sp_removedbreplication.

  • Un instantané existe sur la base de données.

    Avant de pouvoir détacher la base de données, vous devez supprimer tous ses instantanés. Pour plus d’informations, consultez Supprimer une capture instantanée de base de données (Transact-SQL).

    Remarque

    Une capture instantanée de base de données ne peut pas être détachée ni attachée.

  • Cette base de données fait partie d’un groupe de disponibilité Always On.

    La base de données ne peut pas être détachée tant qu’elle n’est pas supprimée du groupe de disponibilité. Pour plus d’informations, consultez Supprimer une base de données primaire d’un groupe de disponibilité Always On.

  • La base de données est en cours de mise en miroir dans une session de mise en miroir de bases de données.

    La base de données ne peut pas être détachée tant que la session n’est pas interrompue. Pour plus d’informations, consultez Suppression de la mise en miroir des bases de données (SQL Server).

  • La base de données est suspecte. Une base de données suspecte ne peut pas être détachée ; avant de pouvoir le faire, vous devez la mettre en mode urgence. Pour plus d’informations sur la manière de mettre une base de données en mode urgence, consultez ALTER DATABASE (Transact-SQL).

  • La base de données est une base de données système.

Sauvegarder, restaurer et détacher

Le détachement d'une base de données en lecture seule provoque la perte des informations relatives aux bases différentielles des sauvegardes différentielles. Pour plus d’informations, consultez Sauvegardes différentielles (SQL Server).

Répondre aux erreurs de détachement

Les erreurs générées à l'occasion du détachement d'une base de données peuvent empêcher la fermeture correcte de la base de données et la reconstruction du journal des transactions. Si vous obtenez un message d'erreur, procédez comme suit pour corriger le problème :

  1. Rattachez tous les fichiers associés à la base de données, en plus du fichier primaire.

  2. Résolvez le problème à l'origine de l'affichage du message d'erreur.

  3. Détachez la base de données de nouveau.

Attacher une base de données

Vous pouvez attacher une base de données SQL Server copiée ou détachée. Quand vous attachez une base de données SQL Server 2005 (9.x) qui contient des fichiers catalogue de texte intégral à une instance de serveur SQL Server, les fichiers catalogue sont attachés à partir de leur emplacement précédent avec les autres fichiers de base de données, les mêmes que dans SQL Server 2005 (9.x). Pour plus d’informations, consultez Mise à niveau de la fonction de recherche en texte intégral.

Lorsque vous attachez une base de données, tous les fichiers de données (fichiers .mdf et .ndf) doivent être disponibles. Si un fichier de données possède un chemin différent de celui qui existait lorsque la base de données a été créée pour la première fois ou attachée pour la dernière fois, vous devez spécifier le chemin actuel du fichier.

Remarque

Si le fichier de données primaires attaché est en lecture seule, le moteur de base de données suppose que la base de données est en lecture seule.

La première fois qu’une base de données chiffrée est attachée à une instance de SQL Server, le propriétaire de cette base de données doit ouvrir la clé principale de la base de données (DMK) en exécutant l’instruction suivante : OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'. Nous vous recommandons d’activer le déchiffrement automatique de la DMK en exécutant l’instruction suivante : ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY. Pour plus d’informations, consultez CREATE MASTER KEY (Transact-SQL) et ALTER MASTER KEY (Transact-SQL).

Les conditions requises pour attacher des fichiers journaux dépendent en partie des autorisations de lecture-écriture ou de lecture seule de la base de données. Elles sont exposées ci-dessous.

  • Pour une base de données en lecture-écriture, vous pouvez généralement attacher un fichier journal dans un nouvel emplacement. Toutefois, dans certains cas, le rattachement d'une base de données nécessite ses fichiers journaux existants. Par conséquent, il est important de toujours conserver tous les fichiers journaux détachés tant que la base de données n’a pas été attachée sans eux.

    Si une base de données en lecture-écriture possède un seul fichier journal dont vous ne précisez pas le nouvel emplacement, l’opération d’attachement le recherche dans son emplacement précédent. Si l’ancien fichier journal est trouvé, il est utilisé, que la base de données ait été fermée correctement ou non. Toutefois, si l’ancien fichier journal n’est pas trouvé et si la base de données a été fermée correctement sans séquence de journaux de transactions active, l’opération d’attachement tente de créer un nouveau fichier journal pour la base de données.

  • Si le fichier de données primaires attaché est en lecture seule, le moteur de base de données suppose que la base de données est en lecture seule. Pour une base de données en lecture seule, les fichiers journaux doivent être disponibles à l'emplacement spécifié dans le fichier primaire de la base de données. La création d’un nouveau fichier journal est impossible, car SQL Server ne peut pas mettre à jour son emplacement stocké dans le fichier primaire.

Modifications des métadonnées lors de l’attachement d’une base de données

Lorsqu'une base de données en lecture seule est détachée puis rattachée, les informations de sauvegarde sur la base différentielle active sont perdues. La base différentielle est la sauvegarde complète la plus récente de toutes les données de la base de données ou d'un sous-ensemble des fichiers ou groupes de fichiers de la base de données. Sans les informations de sauvegarde de la base, la base de données master est désynchronisée par rapport à la base de données en lecture seule ; ainsi, les sauvegardes différentielles effectuées ultérieurement peuvent produire des résultats inattendus. C’est la raison pour laquelle, si vous utilisez des sauvegardes différentielles avec une base de données en lecture seule, vous devez établir une nouvelle base différentielle en effectuant une sauvegarde complète après le rattachement de la base de données. Pour plus d’informations sur les sauvegardes différentielles, consultez Sauvegardes différentielles (SQL Server).

À l'attachement, la base de données démarre. En général, l'attachement d'une base de données la place dans le même état où elle se trouvait au moment de son détachement ou de sa copie. Toutefois, les opérations d'attachement et de détachement désactivent le chaînage des propriétés des bases de données croisées de la base de données. Pour plus d’informations sur l’activation du chaînage, consultez Chaînage des propriétés des bases de données croisées (option de configuration de serveur).

Important

Par défaut et pour des raisons de sécurité, les options pour is_broker_enabled, is_honor_broker_priority_on et is_trustworthy_on sont définies sur OFF chaque fois que la base de données est attachée. Pour plus d’informations sur l’activation de ces options, consultez ALTER DATABASE (Transact-SQL). Pour plus d’informations sur les métadonnées, consultez Gérer les métadonnées lors de la mise à disposition d’une base de données sur un autre serveur.

Sauvegarder, restaurer et attacher

Comme toutes les bases de données complètement ou partiellement hors connexion, une base de données contenant des fichiers de restauration ne peut pas être attachée. Pour attacher la base de données, arrêtez la séquence de restauration. Puis, vous pouvez redémarrer la séquence de restauration.

Attacher une base de données à une autre instance de serveur

Important

Une base de données créée dans une version plus récente de SQL Server ne peut pas être attachée à des versions antérieures. Ainsi, la base de données ne peut pas être utilisée physiquement avec une version antérieure du moteur de base de données. Toutefois, cela concerne l’état des métadonnées et n’affecte pas le niveau de compatibilité de la base de données. Pour plus d’informations, consultez Niveau de compatibilité ALTER DATABASE (Transact-SQL).

Pour offrir une expérience cohérente aux utilisateurs et aux applications, lorsque vous attachez une base de données à une autre instance de serveur, vous devrez peut-être recréer une partie ou l’ensemble des métadonnées de la base de données sur l’autre instance de serveur. Ces métadonnées incluent notamment des connexions et des travaux. Pour plus d’informations, consultez Gérer les métadonnées lors de la mise à disposition d’une base de données sur un autre serveur.

Tâche Article
Détacher une base de données - sp_detach_db (Transact-SQL)
- Détacher une base de données
Attacher une base de données - CREATE DATABASE
- Attacher une base de données
- sp_attach_db (Transact-SQL)
- sp_attach_single_file_db (Transact-SQL)
Mettre à niveau une base de données à l’aide des opérations de détachement et d’attachement - Mettre à niveau une base de données avec la méthode d’attachement et de détachement (Transact-SQL)
Déplacer une base de données à l’aide des opérations de détachement et d’attachement - Déplacer une base de données à l’aide de la méthode de détachement et d’attachement (Transact-SQL)
Supprimer une capture instantanée de base de données - supprimer un instantané de base de données (Transact-SQL)