Déplacement des bases de données utilisateur
Dans SQL Server, vous pouvez déplacer les fichiers de données, les fichiers journaux et les fichiers de catalogues de texte intégral 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 SQL Server ou vers un autre serveur, utilisez les opérations de sauvegarde et de restauration ou les opérations de détachement et d'attachement.
[!REMARQUE]
Certaines fonctionnalités du Moteur de base de données 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 répertorier toutes les fonctions spécifiques à l'édition activées dans la base de données actuelle.
Les procédures de cette rubrique requièrent 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.
[!REMARQUE]
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 Gestion des métadonnées lors de la mise à disposition d'une base de données sur une autre instance de serveur.
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 :
Exécutez la commande suivante.
ALTER DATABASE database_name SET OFFLINE
Déplacez le ou les fichiers vers le nouvel emplacement.
Pour chaque fichier déplacé, exécutez la commande suivante.
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' )
Exécutez la commande suivante.
ALTER DATABASE database_name SET ONLINE
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 :
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' )
Arrêtez l'intance de SQL Server ou éteignez le système pour que la maintenance ait lieu. Pour plus d'informations, consultez Arrêt des services.
Déplacez le ou les fichiers vers le nouvel emplacement.
Redémarrez l'instance de SQL Server ou le serveur. Pour plus d'informations, consultez Démarrage et redémarrage des services.
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, à savoir en mode suspect ou dans un état non récupéré, seuls les membres du rôle fixe sysadmin peuvent déplacer le fichier.
Arrêtez l'instance de SQL Server si elle est démarrée.
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.
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 Procédure : démarrer une instance de SQL Server (commandes net).
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 Utilisation de l'utilitaire sqlcmd.
Quittez l'utilitaire sqlcmd ou SQL Server Management Studio.
Arrêtez l'instance de SQL Server.
Déplacez le ou les fichiers vers le nouvel emplacement.
Démarrez l'instance de SQL Server. Par exemple, exécutez : NET START MSSQLSERVER.
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 de catalogues de texte intégral
Pour déplacer un catalogue de texte intégral, procédez comme suit. Remarque : lorsque vous spécifiez le nouvel emplacement du catalogue, seul new_path est spécifié au lieu de new_path/os_file_name.
Exécutez la commande suivante.
ALTER DATABASE database_name SET OFFLINE
Déplacez le catalogue de texte intégral vers un autre emplacement.
Exécutez l'instruction suivante où logical_name est la valeur dans la colonne name de sys.database_files et new_path correspond au nouvel emplacement du catalogue.
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path')
Exécutez la commande suivante.
ALTER DATABASE database_name SET ONLINE
Vous pouvez également utiliser la clause FOR ATTACH de l'instruction CREATE DATABASE pour déplacer un catalogue de texte intégral. L'exemple suivant crée un catalogue de texte intégral dans la base de données AdventureWorks. Pour que le catalogue puisse être physiquement déplacé, la base de données AdventureWorks est d'abord détachée, puis attachée avec spécification du nouvel emplacement.
USE AdventureWorks;
CREATE FULLTEXT CATALOG AdvWksFtCat AS DEFAULT;
GO
USE master;
GO
--Detach the AdventureWorks database.
sp_detach_db AdventureWorks;
GO
--Physically move the full-text catalog to the new location.
--Attach the AdventureWorks database and specify the new location of the full-text catalog.
CREATE DATABASE AdventureWorks ON
(FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_Data.mdf'),
(FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_log.ldf'),
(FILENAME = 'c:\myFTCatalogs\AdvWksFtCat')
FOR ATTACH;
GO
Exemple
L'exemple suivant déplace le fichier journal AdventureWorks vers un nouvel emplacement dans le cadre d'un réadressage 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'AdventureWorks')
AND type_desc = N'LOG';
GO
ALTER DATABASE AdventureWorks 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 AdventureWorks
MODIFY FILE ( NAME = AdventureWorks_Log,
FILENAME = 'C:\NewLoc\AdventureWorks_Log.ldf');
GO
ALTER DATABASE AdventureWorks 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'AdventureWorks')
AND type_desc = N'LOG';
Voir aussi