Partager via


Déplacer des bases de données utilisateur

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.

Considérations

Lorsque vous déplacez une base de données vers une autre instance de serveur, pour fournir une expérience cohérente aux utilisateurs et aux applications, vous devrez peut-être recréer une partie ou toutes les 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 répertorier toutes les fonctionnalités spécifiques à l’édition activées dans la base de données active.

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

À compter de SQL Server 2008 R2, 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.

Procédure de réinstallation planifiée

Pour déplacer un fichier de données ou de journal dans le cadre d’une réinstallation planifiée, procédez comme suit :

  1. Exécutez l'instruction suivante.

    ALTER DATABASE database_name SET OFFLINE;  
    
  2. Déplacez le fichier ou les fichiers vers le nouvel emplacement.

  3. Pour chaque fichier déplacé, exécutez l’instruction suivante.

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );  
    
  4. Exécutez l'instruction suivante.

    ALTER DATABASE database_name SET ONLINE;  
    
  5. Vérifiez la modification du 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>');  
    

Réinstallation pour la maintenance planifiée des disques

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

  1. Pour que chaque fichier soit déplacé, exécutez l’instruction 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 le moteur de base de données, SQL Server Agent ou SQL Server Browser Service.

  3. Déplacez le fichier 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 SQL Server Browser Service

  5. Vérifiez la modification du 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 échec

Si un fichier doit être déplacé en raison d’une défaillance matérielle, procédez comme suit pour déplacer le fichier vers un nouvel emplacement.

Important

Si la base de données ne peut pas être démarrée, c’est-à-dire en mode suspect ou dans un état non récupérable, 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.

    • Pour l’instance par défaut (MSSQLSERVER), exécutez la commande suivante.

      NET START MSSQLSERVER /f /T3608  
      
    • Pour une instance nommée, exécutez la commande suivante.

      NET START MSSQL$instancename /f /T3608  
      

    Pour plus d’informations, consultez Démarrer, Arrêter, Suspendre, Reprendre, Redémarrer le moteur de base de données, SQL Server Agent ou SQL Server Browser Service.

  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 fichier 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 la modification du 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 AdventureWorks2012 vers un nouvel emplacement dans le cadre d’une réinstallation planifiée.

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'AdventureWorks2012')  
    AND type_desc = N'LOG';  
GO  
ALTER DATABASE AdventureWorks2012 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 AdventureWorks2012   
    MODIFY FILE ( NAME = AdventureWorks2012_Log,   
                  FILENAME = 'C:\NewLoc\AdventureWorks2012_Log.ldf');  
GO  
ALTER DATABASE AdventureWorks2012 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'AdventureWorks2012')  
    AND type_desc = N'LOG';  

Voir aussi

MODIFIER LA BASE DE DONNÉES (Transact-SQL)
CREATE DATABASE (SQL Server Transact-SQL)
Détacher et attacher une base de données (SQL Server)
Déplacer des bases de données système
Déplacer des fichiers de bases de données
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
Démarrer, arrêter, suspendre, reprendre, redémarrer le moteur de base de données, SQL Server Agent ou le service SQL Server Browser