Déplacer des bases de données utilisateur

S’applique à :SQL Server

Dans SQL Server, vous pouvez déplacer les fichiers catalogue de données, de journal et 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 de fichiers de base de données au sein de 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 des opérations de sauvegarde et de restauration ou de détachement et d’attachement.

Note

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.

Considérations

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 durant la mise à disposition d’une base de données sur une autre instance de serveur (SQL Server).

Certaines fonctionnalités du moteur de base de données SQL Server changent 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 .

À compter de SQL Server 2008 R2 (10.50.x), les catalogues de texte intégral sont intégrés à 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.

Note

Vérifiez que le compte de service pour le service SQL Server Database Services dispose d’autorisations sur le 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. Arrêtez l’instance de SQL Server ou arrêtez le système pour effectuer la maintenance. Pour plus d'informations, consultez Démarrer, arrêter, suspendre, reprendre, redémarrer les services SQL Server.

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

  4. Redémarrez l’instance de SQL Server ou du serveur. Pour plus d'informations, consultez Démarrer, arrêter, suspendre, reprendre, redémarrer le moteur de base de données, SQL Server Agent ou le service SQL Server Browser

  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 de SQL Server si elle est démarrée.

  2. Démarrez l’instance de SQL Server en mode de récupération maître uniquement en entrant l’une des commandes suivantes à l’invite de commandes.

    • Dans le cas d'une instance par défaut (MSSQLSERVER), exécutez la commande ci-dessous.

      NET START MSSQLSERVER /f /T3608  
      
    • Dans le cas d'une instance nommée, exécutez la commande ci-dessous.

      NET START MSSQL$instancename /f /T3608  
      

    Pour plus d'informations, consultez Démarrer, arrêter, suspendre, reprendre, redémarrer les services SQL Server.

  3. Pour que chaque fichier soit déplacé, utilisez des 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. Quittez l’utilitaire sqlcmd ou 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>');  
    

Examples

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

USE master;  
GO  
-- Return the logical file name.  
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  
ALTER DATABASE AdventureWorks2022 SET OFFLINE;  
GO  
-- Physically move the file to a new location.  
-- In the following statement, modify the path specified in FILENAME to  
-- the new location of the file on your server.  
ALTER DATABASE AdventureWorks2022   
    MODIFY FILE ( NAME = AdventureWorks2022_Log,   
                  FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf');  
GO  
ALTER DATABASE AdventureWorks2022 SET ONLINE;  
GO  
--Verify the new location.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2022')  
    AND type_desc = N'LOG';  

Voir aussi