Attacher et détacher une base de données (SQL Server)Database Detach and Attach (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 ServerSQL Server.The data and transaction log files of a database can be detached and then reattached to the same or another instance of SQL ServerSQL 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 ServerSQL Server sur le même ordinateur ou pour la déplacer.Detaching and attaching a database is useful if you want to change the database to a different instance of SQL ServerSQL Server on the same computer or to move the database.

Sécurité Security

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.File access permissions are set during a number of database operations, including detaching or attaching a database.

Important

Nous vous recommandons de ne pas attacher ni restaurer de bases de données provenant de sources inconnues ou non approuvées.We recommend that you do not attach or restore databases from unknown or untrusted sources. Ces bases de données peuvent contenir du code malveillant susceptible d'exécuter du code Transact-SQLTransact-SQL indésirable ou de provoquer des erreurs en modifiant le schéma ou la structure physique des bases de données.Such databases could contain malicious code that might execute unintended Transact-SQLTransact-SQL code or cause errors by modifying the schema or the physical database structure. Avant d’utiliser une base de données issue d’une source inconnue ou non approuvée, exécutez DBCC CHECKDB 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.Before you use a database from an unknown or untrusted source, run DBCC CHECKDB on the database on a nonproduction server and also examine the code, such as stored procedures or other user-defined code, in the database.

Détachement d'une base de données Detaching a Database

Détacher une base de données consiste à la supprimer de l'instance SQL ServerSQL Server sans toucher à ses fichiers de données et à ses journaux de transactions.Detaching a database removes it from the instance of SQL ServerSQL Server but leaves the database intact within its data files and transaction log files. Ces fichiers peuvent ensuite servir à rattacher la base de données à n'importe quelle instance de SQL ServerSQL Server, y compris le serveur d'où la base de données a été détachée.These files can then be used to attach the database to any instance of SQL ServerSQL Server, including the server from which the database was detached.

Une base de données ne peut pas être détachée si l'une des conditions suivantes est vraie :You cannot detach a database if any of the following are true:

  • La base de données est répliquée et publiée.The database is replicated and published. Si elle est répliquée, la base de données ne doit pas être publiée.If replicated, the database must be unpublished. Avant de pouvoir la détacher, vous devez désactiver la publication en exécutant sp_replicationdboption.Before you can detach it, you must disable publishing by running sp_replicationdboption.

    Note

    Si vous ne pouvez pas utiliser sp_replicationdboption, vous pouvez supprimer la réplication en exécutant sp_removedbreplication.If you cannot use sp_replicationdboption, you can remove replication by running sp_removedbreplication.

  • Un instantané existe sur la base de données.A database snapshot exists on the database.

    Avant de pouvoir détacher la base de données, vous devez supprimer tous ses instantanés.Before you can detach the database, you must drop all of its snapshots. Pour plus d’informations, consultez Supprimer un instantané de base de données (Transact-SQL).For more information, see Drop a Database Snapshot (Transact-SQL).

    Note

    Un instantané de base de données ne peut pas être détaché ni attaché.A database snapshot cannot be detached or attached.

  • La base de données est en cours de mise en miroir dans une session de mise en miroir de bases de données.The database is being mirrored in a database mirroring session.

    La base de données ne peut pas être détachée tant que la session n'est pas interrompue.The database cannot be detached unless the session is terminated. Pour plus d’informations, consultez Suppression d’une mise en miroir des bases de données (SQL Server).For more information, see Removing Database Mirroring (SQL Server).

  • La base de données est suspecte.The database is suspect. 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.A suspect database cannot be detached; before you can detach it, you must put it into emergency mode. Pour plus d’informations sur la manière de mettre une base de données en mode urgence, consultez ALTER DATABASE (Transact-SQL).For more information about how to put a database into emergency mode, see ALTER DATABASE (Transact-SQL).

  • La base de données est une base de données système.The database is a system database.

Sauvegarde et restauration et détachementBackup and Restore and Detach

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.Detaching a read-only database loses information about the differential bases of differential backups. Pour plus d’informations, consultez Sauvegardes différentielles (SQL Server).For more information, see Differential Backups (SQL Server).

Réponse aux erreurs de détachementResponding to Detach Errors

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.Errors produced while detaching a database can prevent the database from closing cleanly and the transaction log from being rebuilt. Si vous obtenez un message d'erreur, procédez comme suit pour corriger le problème :If you receive an error message, perform the following corrective actions:

  1. Rattachez tous les fichiers associés à la base de données, en plus du fichier primaire.Reattach all files associated with the database, not just the primary file.

  2. Résolvez le problème à l'origine de l'affichage du message d'erreur.Resolve the problem that caused the error message.

  3. Détachez la base de données de nouveau.Detach the database again.

Attachement d'une base de données Attaching a Database

Vous pouvez attacher une base de données SQL ServerSQL Server copiée ou détachée.You can attach a copied or detached SQL ServerSQL Server database. Quand vous attachez une base de données SQL Server 2005SQL Server 2005 qui contient des fichiers catalogue de texte intégral à une instance de serveur SQL Server 2016SQL Server 2016 , 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 2005SQL Server 2005.When you attach a SQL Server 2005SQL Server 2005 database that contains full-text catalog files onto a SQL Server 2016SQL Server 2016 server instance, the catalog files are attached from their previous location along with the other database files, the same as in SQL Server 2005SQL Server 2005. Pour plus d’informations, consultez Mise à niveau de la fonction de recherche en texte intégral.For more information, see Upgrade Full-Text Search.

Lorsque vous attachez une base de données, tous les fichiers de données (fichiers MDF et NDF) doivent être disponibles.When you attach a database, all data files (MDF and NDF files) must be available. 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.If any data file has a different path from when the database was first created or last attached, you must specify the current path of the file.

Note

Si le fichier de données primaires attaché est en lecture seule, le Moteur de base de donnéesDatabase Engine suppose que la base de données est en lecture seule.If the primary data file being attached is read-only, the Moteur de base de donnéesDatabase Engine assumes that the database is read-only.

La première fois qu’une base de données chiffrée est attachée à une instance de SQL ServerSQL 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 = mot de passe.When an encrypted database is first attached to an instance of SQL ServerSQL Server, the database owner must open the master key of the database by executing the following statement: 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.We recommend that you enable automatic decryption of the master key by executing the following statement: 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).For more information, see CREATE MASTER KEY (Transact-SQL) and 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.The requirement for attaching log files depends partly on whether the database is read-write or read-only, as follows:

  • Pour une base de données en lecture-écriture, vous pouvez généralement attacher un fichier journal dans un nouvel emplacement.For a read-write database, you can usually attach a log file in a new location. Toutefois, dans certains cas, le rattachement d'une base de données nécessite ses fichiers journaux existants.However, in some cases, reattaching a database requires its existing log files. 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.Therefore, it is important to always keep all the detached log files until the database has been successfully attached without them.

    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.If a read-write database has a single log file and you do not specify a new location for the log file, the attach operation looks in the old location for the file. S'il est trouvé, l'ancien fichier journal est utilisé, que la base de données ait été fermée correctement ou non.If it is found, the old log file is used, regardless of whether the database was shut down cleanly. 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.However, if the old log file is not found and if the database was shut down cleanly and has no active log chain, the attach operation attempts to build a new log file for the database.

  • Si le fichier de données primaires attaché est en lecture seule, le Moteur de base de donnéesDatabase Engine suppose que la base de données est en lecture seule.If the primary data file being attached is read-only, the Moteur de base de donnéesDatabase Engine assumes that the database is read-only. 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.For a read-only database, the log file or files must be available at the location specified in the primary file of the database. La création d'un nouveau fichier journal est impossible car SQL ServerSQL Server ne peut pas mettre à jour son emplacement stocké dans le fichier primaire.A new log file cannot be built because SQL ServerSQL Server cannot update the log location stored in the primary file.

Modifications des métadonnées lors de l'attachement d'une base de données Metadata Changes on Attaching a Database

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.When a read-only database is detached and then reattached, the backup information about the current differential base is lost. 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.The differential base is the most recent full backup of all the data in the database or in a subset of the files or filegroups of the database. 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.Without the base-backup information, the master database becomes unsynchronized with the read-only database, so differential backups taken thereafter may provide unexpected results. 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.Therefore, if you are using differential backups with a read-only database, you should establish a new differential base by taking a full backup after you reattach the database. Pour plus d’informations sur les sauvegardes différentielles, consultez Sauvegardes différentielles (SQL Server).For information about differential backups, see Differential Backups (SQL Server).

À l'attachement, la base de données démarre.On attach, database startup occurs. 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.Generally, attaching a database places it in the same state that it was in when it was detached or copied. 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.However, attach-and-detach operations both disable cross-database ownership chaining for the database. 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).For information about how to enable chaining, see cross db ownership chaining Server Configuration Option. En outre, TRUSTWORTHY prend la valeur OFF à chaque fois que la base de données est attachée.Also, TRUSTWORTHY is set to OFF whenever the database is attached. Pour plus d’informations sur la façon d’affecter la valeur ON à TRUSTWORTHY, consultez ALTER DATABASE (Transact-SQL).For information about how to set TRUSTWORTHY to ON, see ALTER DATABASE (Transact-SQL).

Sauvegarder, restaurer et attacherBackup and Restore and Attach

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.Like any database that is fully or partially offline, a database with restoring files cannot be attached. Pour attacher la base de données, arrêtez la séquence de restauration.If you stop the restore sequence, you can attach the database. Puis, vous pouvez redémarrer la séquence de restauration.Then, you can restart the restore sequence.

Attachement d'une base de données à une autre instance de serveur Attaching a Database to Another Server Instance

Important

Une base de données créée dans une version plus récente de SQL ServerSQL Server ne peut pas être attachée à des versions antérieures.A database created by a more recent version of SQL ServerSQL Server cannot be attached in earlier versions.

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.When you attach a database onto another server instance, to provide a consistent experience to users and applications, you might have to re-create some or all of the metadata for the database, such as logins and jobs, on the other server instance. Pour plus d’informations, consultez Gérer les métadonnées lors de la mise à disposition d’une base de données sur une autre instance de serveur (SQL Server).For more information, see Manage Metadata When Making a Database Available on Another Server Instance (SQL Server).

Pour détacher une base de donnéesTo detach a database

Voir aussiSee Also

Groupes de fichiers et fichiers de base de donnéesDatabase Files and Filegroups