Attacher une base de données

S'applique à : SQL Server

Cet article explique comment attacher une base de données dans SQL Server avec SQL Server Management Studio ou Transact-SQL. Vous pouvez utiliser cette fonctionnalité pour copier, déplacer, ou mettre à niveau une base de données SQL Server.

Limitations et restrictions

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

Prérequis

Avant de continuer, vérifiez les conditions préalables suivantes :

  • Si vous déplacez une base de données d’une instance vers une autre, la base de données doit d’abord être détachée de toute instance SQL existante. Toute tentative d'attachement d'une base de données qui n'a pas été détachée retourne une erreur. Pour plus d’informations, consultez Détacher une base de données.

  • Lorsque vous attachez une base de données, tous les fichiers de données pour la base de données doivent être disponibles. Souvent, ces fichiers ont des extensions. mdf ou. ndf (pour les fichiers de données) et. ldf (pour les fichiers journaux de transactions). En outre, tous les groupes de fichiers pour les données FILESTREAM doivent être présents et disponibles. Pour plus d’informations sur l’attachement d’une base de données compatible FILESTREAM, consultez Déplacer une base de données compatible FILESTREAM.

  • 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.

  • Le compte de service du moteur de base de données doit disposer des autorisations nécessaires pour lire les fichiers dans leur nouvel emplacement.

  • Au moment d’attacher une base de données, si les fichiers MDF et LDF se trouvent dans des répertoires différents et qu’un des chemins contient \\?\GlobalRoot, l’opération échoue.

La commande Attacher est-elle le meilleur choix ?

Nous vous recommandons de déplacer les bases de données au sein d’une instance à 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, quand vous déplacez des fichiers de base de données dans la même instance. Pour plus d’informations, consultez Déplacer des bases de données utilisateur.

Il n’est pas recommandé d’utiliser le détachement et l’attachement pour la sauvegarde et la récupération. Aucune sauvegarde de fichier journal ou restauration à un instant dans le passé n’est disponible lors du détachement de fichiers à sauvegarder en externe à partir de SQL Server.

Sécurité

Les autorisations d’accès au fichier sont définies au cours de nombreuses opérations de base de données, notamment lorsqu’une base de données est détachée et attachée. Lors vous détachez ou attachez une base de données, le moteur de base de données essaie d'emprunter l'identité du compte Windows de la connexion qui effectue l'opération pour s'assurer que le compte a l'autorisation d'accéder aux fichiers de la base de données et aux fichiers journaux. Pour les comptes de sécurité mixte qui utilisent les connexions SQL Server, l'emprunt d'identité peut échouer.

Le tableau suivant illustre les autorisations définies sur les fichiers de base de données et les fichiers journaux au terme d'une opération d'attachement ou de détachement, et si le moteur de base de données peut imiter le compte qui se connecte.

Operation L’identité du compte de connexion peut être usurpée Les autorisations de fichiers sont accordées à
Detach Oui Seul le compte effectuant l’opération. D'autres comptes peuvent être ajoutés par un administrateur de système d'exploitation s'ils sont nécessaires après détachement de la base de données.
Detach Non Au compte de service SQL Server (MSSQLSERVER) et aux membres du groupe Administrateurs Windows local.
Joindre Oui Au compte de service SQL Server (MSSQLSERVER) et aux membres du groupe Administrateurs Windows local.
Joindre Non Au compte de service SQL Server (MSSQLSERVER).

Pour plus d’informations sur les autorisations de système de fichiers accordées aux ID de sécurité par service pour le service SQL Server, consultez Configurer les autorisations de système de fichiers pour l’accès au moteur de base de données.

Attention

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 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. Pour plus d’informations sur l’attachement de bases de données et sur les modifications apportées aux métadonnées à cette occasion, consultez Attacher et détacher une base de données (SQL Server).

autorisations

Requiert l’autorisation CREATE DATABASE, CREATE ANY DATABASE ou ALTER ANY DATABASE.

Utiliser SQL Server Management Studio (SSMS)

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, de copie des fichiers et d’attachement de la base de données dans la section suivante. Pour plus d’informations, consultez Détacher une base de données.

Attacher 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 cette vue d’instance dans SSMS.

  2. Cliquez avec le bouton droit sur Bases de données et sélectionnez Attacher.

  3. Dans la boîte de dialogue Attacher des bases de données, sélectionnez Ajouter pour spécifier la base de données à attacher. Dans la boîte de dialogue Rechercher les fichiers de base de données, sélectionnez l’emplacement de la base de données et développez l’arborescence du répertoire pour rechercher et sélectionner le fichier. mdf de la base de données. par exemple :

    C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_Data.mdf

    Important

    Une tentative de sélection d'une base de données déjà attachée génère une erreur.

    Bases de données à attacher
    Affiche des informations sur les bases de données sélectionnées.

    <aucun en-tête de colonne>
    Affiche une icône indiquant l'état de l'opération d'attachement. Les icônes possibles sont décrites dans la section État.

    Emplacement du fichier MDF
    Affiche le chemin d'accès et le nom du fichier MDF sélectionné.

    Database Name
    Affiche le nom de la base de données.

    Attacher en tant que
    Permet de spécifier éventuellement un autre nom sous lequel la base de données doit être attachée.

    Propriétaire
    Fournit une liste déroulante des propriétaires de bases de données possibles dans laquelle vous pouvez sélectionner un autre propriétaire.

    État
    Affiche l'état de la base de données conformément au tableau ci-après :

    Icône Texte d'état Description
    (Aucune icône) (Aucun texte) L'opération d'attachement n'a pas démarré ou est peut-être en attente pour cet objet. Il s'agit de la valeur par défaut lorsque la boîte de dialogue est ouverte.
    Triangle vert dirigé vers la droite En cours L'opération d'attachement a démarré, mais n'est pas terminée.
    Coche verte Réussite L'attachement de l'objet a réussi.
    Cercle rouge contenant une croix blanche Erreur L'opération d'attachement a rencontré une erreur et ne s'est pas terminée correctement.
    Cercle contenant deux quartiers noirs (à gauche et à droite) et deux quartiers blancs (en haut et en bas) Arrêté L'opération d'attachement n'a pas réussi, vous l’avez interrompue.
    Cercle contenant une flèche courbe pointant dans le sens inverse des aiguilles d'une montre Restauré L'opération d'attachement a réussi, mais a été restaurée en raison d'une erreur lors de l'attachement d'un autre objet.

    Message
    Affiche un message vierge ou un lien hypertexte «Fichier introuvable».

    Ajouter
    Permet de rechercher les principaux fichiers de base de données nécessaires. Lorsque vous sélectionnez un fichier .mdf, les informations applicables sont automatiquement remplies dans les champs respectifs de la grille Bases de données à attacher.

    Remove
    Supprime le fichier sélectionné de la grille Bases de données à attacher .

    Détails de la base de données «  <nom_base_de_données>  »
    Affiche le nom des fichiers à attacher. Pour vérifier ou modifier le nom du chemin d’un fichier, sélectionnez le bouton Parcourir (...).

    Remarque

    Si un fichier n’existe pas, la colonne Message affiche « Introuvable ». Si un fichier d'historique est introuvable, il existe dans un autre annuaire ou a été supprimé. Vous devez mettre à jour le chemin d'accès du fichier dans la grille Détails de la base de données pour désigner l'emplacement correct ou supprimer le fichier journal de la grille. Si un fichier de données .ndf est introuvable, vous devez mettre à jour son chemin d'accès dans la grille pour désigner l'emplacement correct.

    Nom du fichier d'origine
    Affiche le nom du fichier attaché appartenant à la base de données.

    Type de fichier
    Indique le type du fichier, Données ou Journal.

    Chemin d'accès au fichier actuel
    Affiche le chemin d'accès au fichier de base de données sélectionné. Le chemin d'accès peut être modifié manuellement.

    Message
    Affiche un message vierge ou un lien hypertexte «Fichier introuvable».

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 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, de copie des fichiers et d’attachement de la base de données dans la section suivante. Pour plus d’informations, consultez Détacher une base de données.

Pour attacher 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. Utilisez l’instruction CREATE DATABASE avec la clause FOR ATTACH.

    Copiez et collez l’exemple suivant dans la fenêtre de requête, puis sélectionnez Exécuter. Cet exemple attache tous les fichiers de la base de données AdventureWorks2022 et renomme la base de données MyAdventureWorks.

    CREATE DATABASE MyAdventureWorks   
        ON (FILENAME = 'C:\MySQLServer\AdventureWorks_Data.mdf'),   
        (FILENAME = 'C:\MySQLServer\AdventureWorks_Log.ldf')   
        FOR ATTACH;  
    

    Votre base de données peut contenir des fichiers de données supplémentaires (communément . mdf ou. ndf) et nécessiter des fichiers supplémentaires à inclure dans l’instruction CREATE DATABASE ... FOR ATTACH. En outre, tous les groupes de fichiers de données FILESTREAM doivent également être inclus dans l’instruction. Pour plus d’informations sur l’attachement d’une base de données compatible FILESTREAM, consultez Déplacer une base de données compatible FILESTREAM.

    Remarque

    Vous pouvez aussi utiliser la procédure stockée sp_attach_db ou sp_attach_single_file_db . Toutefois, ces procédures seront supprimées dans une future version de Microsoft 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 ... FOR ATTACH à la place.

Après la mise à niveau d’une base de données SQL Server

Niveau de compatibilité de la base de données

Après avoir mis à niveau une base de données en utilisant la méthode d'attachement, la base de données devient disponible. La base de données sera automatiquement mise à niveau vers le niveau de version interne de la nouvelle instance. Si la base de données comprend des index de recherche en texte intégral, la mise à niveau les importe, les réinitialise ou les reconstruit, selon le paramètre de la propriété de serveur Option de mise à niveau des index de recherche en texte intégral . Si l’option de mise à niveau a la valeur Importer ou Reconstruire, les index de recherche en texte intégral ne sont pas disponibles pendant la mise à niveau. Selon le volume de données indexé, l’importation peut prendre plusieurs heures et la reconstruction peut durer jusqu’à dix fois plus longtemps. Notez également que quand l’option de mise à niveau est Importer, si un catalogue de texte intégral n’est pas disponible, les index de recherche en texte intégral associés sont reconstruits.

Après la mise à niveau, le niveau de compatibilité des bases de données reste au niveau de compatibilité avant la mise à niveau, sauf si le niveau de compatibilité précédent n’est pas pris en charge dans la nouvelle version. Dans ce cas, le niveau de compatibilité des bases de données mises à niveau est défini sur le niveau de compatibilité le plus bas pris en charge. Par exemple, si vous attachez une base de données qui avait le niveau de compatibilité 90 avant de l’attacher à une instance de SQL Server 2019 (15.x), après la mise à niveau, le niveau de compatibilité est défini sur 100, qui est le niveau de compatibilité le plus bas pris en charge dans SQL Server 2019 (15.x). Pour plus d’informations, consultez Niveau de compatibilité ALTER DATABASE (Transact-SQL).

Capture de données modifiées (CDC)

Si vous attachez une base de données située sur une instance qui exécute SQL Server 2014 (12.x) ou antérieure, et sur laquelle la capture des changements de données est activée, vous devez exécuter la commande suivante pour mettre à niveau les métadonnées de la capture des changements de données :

USE <database name>
EXEC sys.sp_cdc_vupgrade  

Pour plus d’informations, consultez Erreur lors de l’attachement d’une base de données CDC à une instance SQL 2016 ou SQL 2017 sur Windows.

Voir aussi

Étapes suivantes