Partage via


sp_attach_db (Transact-SQL)

S'applique à : SQL Server

Attache une base de données à un serveur.

Important

Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Nous vous recommandons d'utiliser CREATE DATABASE <database_name> FOR ATTACH à la place. Pour plus d’informations, consultez CREATE DATABASE. Pour reconstruire plusieurs fichiers journaux lorsqu’un ou plusieurs ont un nouvel emplacement, utilisez CREATE DATABASE <database_name> FOR ATTACH_REBUILD_LOG.

N’attachez pas ou ne restaurez pas de bases de données à partir 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 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.

Syntaxe

sp_attach_db
    [ @dbname = ] N'dbname'
    , [ { @filename1 ... @filename16 } = ] { N'*filename1*' ... N'*filename16*' }
[ ; ]

Arguments

[ @dbname = ] N’dbname'

Nom de la base de données à attacher au serveur. @dbname est sysname, sans valeur par défaut.

[ { @filename1 ... @filename16 } = ] { N’filename1' ... N’filename16' }

Nom physique, y compris le chemin d’accès, d’un fichier de base de données. Ce paramètre est nvarchar(260), avec la valeur par défaut NULL. Vous pouvez spécifier jusqu’à 16 noms de fichiers. Les noms de paramètres commencent à @filename1 et incrémentent vers @filename16. La liste des noms de fichier doit inclure au moins le fichier principal (.mdf). Le fichier primaire contient les tables système pointant vers d'autres fichiers dans la base de données. Elle doit aussi comprendre tous les fichiers qui ont été déplacés après que la base de données fut détachée.

Ce paramètre est mappé au FILENAME paramètre de l’instruction CREATE DATABASE . Pour plus d’informations, consultez CREATE DATABASE.

Remarque

Lorsque vous attachez une base de données SQL Server 2005 (9.x) qui contient des fichiers catalogue de texte intégral sur une version plus récente de SQL Server, les fichiers catalogue sont attachés à partir de leur emplacement précédent, ainsi que les autres fichiers de base de données, identiques à ceux de SQL Server 2005 (9.x). Pour plus d’informations, consultez Mise à niveau de la fonction de recherche en texte intégral.

Valeurs des codes de retour

0 (réussite) or 1 (échec).

Jeu de résultats

Aucune.

Notes

La sp_attach_db procédure stockée ne doit être exécutée que sur des bases de données précédemment détachées du serveur de base de données à l’aide d’une opération explicite sp_detach_db ou sur des bases de données copiées. Si vous devez spécifier plus de 16 fichiers, utilisez CREATE DATABASE <database_name> FOR ATTACH ou CREATE DATABASE <database_name> FOR_ATTACH_REBUILD_LOG. Pour plus d’informations, consultez CREATE DATABASE.

Tout fichier non spécifié est considéré comme se trouvant à son dernier emplacement identifié. Pour utiliser un fichier à un emplacement différent, vous devez spécifier ce nouvel emplacement.

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.

Remarque

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

Lorsque vous attachez une base de données répliquée qui a été copiée au lieu d’être détachée, tenez compte des conditions suivantes :

  • Si vous attachez la base de données à la même instance de serveur et à la même version que la base de données d’origine, aucune autre étape n’est requise.

  • Si vous attachez la base de données à la même instance de serveur alors que sa version a été mise à niveau, vous devez exécuter sp_vupgrade_replication pour mettre à jour la réplication à la fin de l’opération de rattachement.

  • Si vous attachez la base de données à une instance de serveur différente, sans tenir compte de la version, vous devez exécuter sp_removedbreplication pour supprimer la réplication, une fois l’opération de rattachement effectuée.

Lorsqu’une base de données est attachée ou restaurée pour une nouvelle instance de SQL Server, une copie de la clé principale de base de données (DMK) - chiffrée par la clé principale du service (SMK) - n’est pas encore stockée sur le serveur. Vous devez utiliser l’instruction OPEN MASTER KEY pour déchiffrer le DMK. Une fois que le DMK a été déchiffré, vous avez la possibilité d’activer le déchiffrement automatique à l’avenir à l’aide de l’instruction ALTER MASTER KEY REGENERATE pour fournir au serveur une copie du DMK, chiffrée avec le SMK. Lorsqu’une base de données est mise à niveau à partir d’une version antérieure, la DMK doit être régénérée pour utiliser l’algorithme AES plus récent. Pour plus d’informations sur la régénération de la clé DMK, consultez l’article ALTER MASTER KEY. La durée nécessaire pour régénérer la clé DMK à mettre à niveau vers AES dépend du nombre d'objets protégés par la clé DMK. La régénération de la clé DMK à mettre à niveau vers AES n’est nécessaire qu’une seule fois et n’a aucun effet sur les régénérations futures dans le cadre d’une stratégie de rotation de clé.

autorisations

Pour plus d’informations sur la façon dont les autorisations sont gérées lorsqu’une base de données est attachée, consultez CREATE DATABASE.

Exemples

Dans l'exemple suivant, des fichiers sont attachés depuis AdventureWorks2022 au serveur en cours.

EXEC sp_attach_db @dbname = N'AdventureWorks2022',
    @filename1 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_Data.mdf',
    @filename2 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_log.ldf';