Déplacer des bases de données utilisateur

S'applique à : SQL Server

Dans SQL Server, vous pouvez déplacer les fichiers de données, les fichiers journaux et les fichiers de catalogues de texte intégral d’une base de données utilisateur vers un nouvel emplacement, en spécifiant le nouvel emplacement de fichier dans la clause FILENAME de l’instruction ALTER DATABASE. Cette méthode s'applique au déplacement des fichiers de base de données dans la même instance SQL Server. Pour déplacer une base de données vers une autre instance de SQL Server ou vers un autre serveur, utilisez les opérations de sauvegarde et restauration ou de détachement et attachement.

Remarque

Cet article traite du déplacement des fichiers de base de données utilisateur. Pour déplacer des fichiers de base de données système, consultez Déplacer des bases de données système.

À propos de l’installation

Lorsque vous déplacez une base de données sur une autre instance de serveur, pour garantir une expérience cohérente aux utilisateurs et aux applications, vous devrez peut-être recréer tout ou partie des métadonnées de la base de données. 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.

Certaines fonctionnalités du moteur de base de données de SQL Server modifient la façon dont le moteur de base de données stocke les informations dans les fichiers de base de données. Ces fonctionnalités sont limitées à des éditions spécifiques de SQL Server. Une base de données qui contient ces fonctionnalités ne peut pas être déplacée vers une édition de SQL Server qui ne les prend pas en charge. Utilisez la vue de gestion dynamique sys.dm_db_persisted_sku_features pour lister toutes les fonctions spécifiques à l’édition qui sont activées dans la base de données actuelle.

Les procédures de cet article nécessitent le nom logique des fichiers de base de données. Pour obtenir ce nom, interrogez la colonne name dans l’affichage catalogue sys.master_files .

Les catalogues de texte intégral sont intégrés dans la base de données plutôt que stockés dans le système de fichiers. Les catalogues de texte intégral se déplacent automatiquement lorsque vous déplacez une base de données.

Remarque

Assurez-vous que le compte de service pour Configurer les comptes de service et les autorisations Windows disposent des autorisations nécessaires pour accéder au nouvel emplacement de fichier dans le système de fichiers. Pour plus d’informations, consultez Configuration des autorisations du système de fichiers pour l’accès au moteur de base de données.

Procédure de déplacement planifié

Pour déplacer un fichier journal ou un fichier de données dans le cadre d'un déplacement planifié, procédez comme suit :

  1. Pour chaque fichier à déplacer, exécutez la commande suivante.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    
  2. Exécutez l’instruction suivante pour mettre la base de données hors connexion.

    ALTER DATABASE database_name
        SET OFFLINE;
    

    Cette action demande un accès exclusif à la base de données. Si une autre connexion est ouverte à la base de données, l’instruction ALTER DATABASE est bloquée jusqu’à ce que toutes les connexions soient fermées. Pour changer ce comportement, utilisez la clause WITH <termination>. Par exemple, pour restaurer et déconnecter automatiquement toutes les autres connexions à la base de données, utilisez :

    ALTER DATABASE database_name
         SET OFFLINE
         WITH ROLLBACK IMMEDIATE;
    
  3. Déplacez le ou les fichiers vers le nouvel emplacement.

  4. Exécutez la commande suivante.

    ALTER DATABASE database_name
        SET ONLINE;
    
  5. Vérifiez le changement de fichier en exécutant la requête suivante.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    

Déplacement en vue d'une maintenance de disque planifiée

Pour déplacer un fichier dans le cadre d'un processus de maintenance de disque planifié, procédez comme suit :

  1. Pour chaque fichier à déplacer, exécutez la commande suivante.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    
  2. Pour effectuer la maintenance, arrêtez l'instance de SQL Server ou éteignez le système. Pour plus d’informations, consultez Démarrer, arrêter, suspendre, reprendre et redémarrer les services SQL Server.

  3. Déplacez le ou les fichiers vers le nouvel emplacement.

  4. Redémarrez l’instance du SQL Server ou le serveur. Pour plus d’informations, consultez Démarrer, arrêter, suspendre, reprendre et redémarrer les services SQL Server

  5. Vérifiez le changement de fichier en exécutant la requête suivante.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    

Procédure de récupération après défaillance

Si un fichier doit être déplacé dans un nouvel emplacement en raison d'une défaillance matérielle, suivez la procédure décrite ci-dessous.

Important

Si la base de données ne démarre pas – elle est en mode suspect ou dans un état de non récupération, seuls les membres du rôle fixe sysadmin peuvent déplacer le fichier.

  1. Arrêtez l'instance SQL Server si elle est déjà démarrée.

  2. Démarrez l'instance de SQL Server en mode de récupération de la base de données master uniquement en tapant une des commandes suivantes à l'invite de commandes.

  3. Pour chaque fichier à déplacer, utilisez les commandes sqlcmd ou SQL Server Management Studio pour exécuter l’instruction suivante.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    

    Pour plus d’informations sur l’utilisation de l’utilitaire sqlcmd, consultez Utiliser l’utilitaire sqlcmd.

  4. Sortez de l'utilitaire sqlcmd ou de SQL Server Management Studio.

  5. Arrêtez l’instance de SQL Server.

  6. Déplacez le ou les fichiers vers le nouvel emplacement.

  7. Démarrez l’instance de SQL Server. Par exemple, exécutez : NET START MSSQLSERVER.

  8. Vérifiez le changement de fichier en exécutant la requête suivante.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    

Exemples

L'exemple suivant déplace le fichier journal AdventureWorks2022 vers un nouvel emplacement dans le cadre d'un déplacement planifié.

  1. Assurez-vous que vous êtes dans le contexte de la base de données master.

    USE master;
    GO
    
  2. Retournez le nom du fichier logique.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'AdventureWorks2022')
          AND type_desc = N'LOG';
    GO
    
  3. Déconnectez la base de données.

    ALTER DATABASE AdventureWorks2022
        SET OFFLINE;
    GO
    
  4. Déplacez physiquement le fichier vers un nouvel emplacement. Dans l’instruction suivante, modifiez le chemin spécifié dans FILENAME par le nouvel emplacement du fichier sur votre serveur.

    ALTER DATABASE AdventureWorks2022
        MODIFY FILE (NAME = AdventureWorks2022_Log, FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf');
    GO
    
    ALTER DATABASE AdventureWorks2022
        SET ONLINE;
    GO
    
  5. Vérifiez le nouvel emplacement.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'AdventureWorks2022')
          AND type_desc = N'LOG';