Attachement et détachement des bases de données

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.

[!REMARQUE]

Le format de stockage sur disque de SQL Server est le même dans les environnements 64 bits et 32 bits. Par conséquent, l'attachement fonctionne sur les environnements 32 bits et 64 bits. Une base de données détachée d'une instance serveur s'exécutant dans un environnement peut être attachée à une instance serveur qui s'exécute dans un autre environnement.

Sécurité

Les autorisations d'accès aux fichiers sont définies lors de nombreuses opérations de base de données, notamment lorsque vous détachez ou attachez une base de données. Pour plus d'informations sur les autorisations de fichier définies lors du détachement et de l'attachement d'une base de données, consultez Sécurisation des fichiers de données et des fichiers journaux.

Remarque relative à la sécuritéRemarque relative à la sécurité

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 provenant d'une source inconnue ou non approuvée, exécutez DBCC CHECKDB sur la base de données sur un serveur qui n'est pas un serveur de production et examinez le code (par exemple les procédures stockées ou le code défini par l'utilisateur) dans la base de données.

Détachement d'une base de données

Détacher une base de données consiste à la supprimer de l'instance 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.

  • Une capture instantanée existe sur la base de données.

    Avant de pouvoir détacher la base de données, vous devez supprimer toutes ses captures instantanées. Pour plus d'informations, consultez Procédure : 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 ou attachée.

  • 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 d'une mise en miroir des bases de données.

  • La base de données est suspecte. Dans SQL Server 2005 et versions ultérieures, 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 mise en mode urgence d'une base de données, consultez ALTER DATABASE (Transact-SQL).

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

Pour détacher une base de données

Sauvegarde et restauration et détachement

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 Sauvegarde des bases de données en lecture seule.

Réponse 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.

Attachement d'une base de données

Vous pouvez attacher une base de données SQL Server copiée ou détachée. Lorsque vous attachez une base de données SQL Server 2005 qui contient des fichiers catalogue de texte intégral à une instance de serveur SQL Server 2008, 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. 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 en exécutant l'instruction suivante : OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'. Nous vous recommandons d'activer le déchiffrement automatique de la clé principale 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. S'il est trouvé, l'ancien fichier journal 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. Pour plus d'informations, consultez Architecture logique du journal des transactions et Architecture physique du journal des transactions.

  • 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 apportées aux 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 ; par conséquent, 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, consultez Base d'une sauvegarde différentielle.

À 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, dans SQL Server 2005 et versions ultérieures, 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 la manière d'activer le chaînage, consultez Option cross db ownership chaining. En outre, TRUSTWORTHY prend la valeur OFF chaque fois que la base de données est attachée. Pour plus d'informations sur l'affectation de la valeur ON à TRUSTWORTHY, consultez ALTER DATABASE (Transact-SQL).

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. Ensuite, vous pouvez redémarrer la séquence de restauration.

Attachement d'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.

Lorsque vous attachez une base de données à une autre instance de serveur et si vous souhaitez offrir une expérience cohérente aux utilisateurs et aux applications, il est possible que vous deviez recréer une partie ou l'ensemble des métadonnées de la base de données, telles que les connexions et les travaux, sur cette autre instance de serveur. Pour plus d'informations, consultez Gestion des métadonnées lors de la mise à disposition d'une base de données sur une autre instance de serveur.

Pour attacher une base de données

Pour mettre à niveau une base de données à partir d'une version antérieure de SQL Server

Dans SQL Server 2008, vous pouvez utiliser les opérations de détachement et d'attachement pour mettre à niveau une base de données utilisateur à partir de SQL Server 2000 ou SQL Server 2005. Cependant, les restrictions suivantes s'appliquent :

  • Les copies de la base de données master, model ou msdb créées à l'aide de SQL Server 2000 ou SQL Server 2005 ne peuvent pas être attachées.

  • Si vous attachez une base de données répliquée qui a été copiée et non pas détachée :

    • Si vous attachez la base de données à une version mise à niveau de la même instance de serveur, vous devez exécuter sp_vupgrade_replication pour mettre à niveau la réplication, une fois l'opération d'attachement terminée. Pour plus d'informations, consultez sp_vupgrade_replication (Transact-SQL).

    • Si vous l'attachez à une autre instance de serveur, quelle que soit la version, vous devez exécuter sp_removedbreplication pour supprimer la réplication, une fois l'opération d'attachement terminée. Pour plus d'informations, consultez sp_removedbreplication (Transact-SQL).

Pour mettre à niveau une base de données à l'aide des opérations de détachement et d'attachement

Déplacement d'une base de données ou d'un fichier de base de données

Important

Nous vous recommandons de déplacer les bases de données à l'aide de la procédure de déplacement planifié ALTER DATABASE, plutôt qu'à l'aide des opérations de détachement et d'attachement. Pour plus d'informations, consultez Déplacement des fichiers de bases de données.

En général, vous pouvez utiliser les opérations de détachement et d'attachement pour déplacer une base de données. Les scénarios standard sont notamment le déplacement d'une base de données vers un des emplacements suivants :

  • un disque physique différent sur le même ordinateur ; par exemple lorsque le disque contenant un fichier de données est plein et que vous préférez étendre le fichier existant plutôt qu'étendre la base de données par l'ajout d'un nouveau fichier sur un autre disque ;

  • un autre ordinateur, sans avoir à recréer la base de données pour y restaurer la sauvegarde.

Le déplacement d'une base de données à l'aide d'opérations de détachement et d'attachement suppose les étapes suivantes :

  1. détachement de la base de données ;

  2. déplacement des fichiers de base de données vers l'autre serveur ou disque ;

  3. attachement de la base de données en précisant le nouvel emplacement des fichiers déplacés.

Pour déplacer une base de données à l'aide des opérations de détachement et d'attachement