Déplacer des bases de données système
S'applique à : SQL Server
Cet article décrit comment déplacer des bases de données système dans SQL Server. Le déplacement des bases de données système peut être utile dans les cas suivants :
Récupération après défaillance. Par exemple, la base de données est en mode suspect ou a été fermée en raison d'une défaillance matérielle.
Déplacement prévu.
Déplacement en vue d'une maintenance de disque planifiée.
Les procédures ci-dessous s'appliquent au déplacement des fichiers de base de données au sein de la même instance de SQL Server. Pour déplacer une base de données vers une autre instance de SQL Server ou vers un autre serveur, utilisez l’opération de sauvegarde et restauration.
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 .
Important
Si vous déplacez une base de données système et que vous recréez ultérieurement la base de données master
, vous devez redéplacer la base de données système car l'opération de recréation installe toutes les bases de données système à leur emplacement par défaut.
Déplacer les bases de données système
Pour déplacer des données ou un fichier journal d'une base de données système dans le cadre d'un réadressage planifié ou d'une opération de maintenance planifiée, suivez la procédure ci-dessous. Cela comprend les bases de données système model
, msdb
et tempdb
.
Important
Cette procédure s'applique à toutes les bases de données système à l'exception des bases de données master
et Resource
. Découvrez comment déplacer la base de données master
plus tard dans cet article. La base de données Resource
ne peut pas être déplacée.
Enregistrez l’emplacement existant des fichiers de base de données que vous souhaitez déplacer en examinant l’affichage catalogue sys.master_files .
Vérifiez que le compte de service pour le moteur de base de données SQL Server dispose de toutes les autorisations sur le nouvel emplacement des fichiers. Pour plus d’informations, consultez Configurer les comptes de service Windows et les autorisations. Si le compte de service du moteur de base de données ne peut pas contrôler les fichiers dans leur nouvel emplacement, l'instance SQL Server ne démarre pas.
Pour chaque fichier de base de données à déplacer, exécutez la commande suivante.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
Tant que le service n'a pas redémarré, la base de données continue à utiliser les fichiers de données et les fichiers journaux situés à l'emplacement existant.
Arrêtez l’instance de SQL Server pour exécuter la maintenance. Pour plus d’informations, consultez Démarrer, arrêter, suspendre, reprendre et redémarrer les services SQL Server.
Copiez le ou les fichiers de base de données vers le nouvel emplacement. Il ne s’agit pas d’une étape nécessaire pour la base de données système
tempdb
. Ces fichiers sont créés automatiquement dans le nouvel emplacement.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.
Vérifiez le changement de fichier en exécutant la requête suivante. Les bases de données système doivent signaler les nouveaux emplacements physiques des fichiers.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
Étant donné qu’à l’étape 5, vous avez copié les fichiers de base de données au lieu de les déplacer, vous pouvez maintenant supprimer en toute sécurité les fichiers de base de données inutilisés à partir de leur emplacement précédent.
Suivi : après le déplacement de toutes les bases de données système msdb
Si la base de données msdb
est déplacée et que Database Mail est configurée, effectuez les étapes supplémentaires suivantes.
Assurez-vous que le Service Broker est activé pour la base de données
msdb
en exécutant la requête ci-dessous.SELECT is_broker_enabled FROM sys.databases WHERE name = N'msdb';
Si le Service Broker n’est pas activé pour
msdb
, vous devez le réactiver pour que Database Mail fonctionne. Pour plus d'informations, consultez OPTIONS ALTER DATABASE ... SET ENABLE_BROKER.ALTER DATABASE msdb SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE;
Vérifiez que la valeur de
is_broker_enabled
est désormais définie sur 1.Vérifiez le bon fonctionnement de la messagerie de base de données en envoyant un message électronique de test.
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. Cette procédure s'applique à toutes les bases de données système à l'exception des bases de données master
et Resource
. Les exemples suivants utilisent l’invite de ligne de commande Windows et l'utilitaire sqlcmd.
Important
Si la base de données ne démarre pas, si 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.
Vérifiez que le compte de service pour le moteur de base de données SQL Server dispose de toutes les autorisations sur le nouvel emplacement des fichiers. Pour plus d’informations, consultez Configurer les comptes de service Windows et les autorisations. Si le compte de service du moteur de base de données ne peut pas contrôler les fichiers dans leur nouvel emplacement, l'instance SQL Server ne démarre pas.
Arrêtez l'instance 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. L’utilisation du paramètre de démarrage 3608 empêche SQL Server de démarrer et de récupérer automatiquement une base de données à l’exception de la base de donnéesmaster
. Pour plus d’informations, consultez Paramètres de démarrage et TF3608.Les paramètres spécifiés dans ces commandes respectent la casse. Les commandes échouent lorsque les paramètres ne sont pas spécifiés comme indiqué.
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 et redémarrer les services SQL Server.
Rapidement après le démarrage du service avec l’indicateur de trace 3608 et
/f
, lancez une connexion sqlcmd au serveur, pour revendiquer la connexion unique qui est disponible. Par exemple, lors de l’exécution de sqlcmd localement sur le même serveur que l’instance par défaut (MSSQLSERVER) et pour établir une connexion avec l’authentification d’intégration Active Directory, exécutez la commande suivante :sqlcmd
Pour vous connecter à une instance nommée sur le serveur local, avec l’authentification de l’intégration Active Directory :
sqlcmd -S localhost\instancename
Pour plus d’informations sur la syntaxe sqlcmd, consultez l’utilitaire sqlcmd.
Pour chaque fichier à déplacer, utilisez les commandes sqlcmd ou SQL Server Management Studio pour exécuter l’instruction suivante. Pour plus d’informations sur l’utilisation de l’utilitaire sqlcmd, consultez Utiliser l’utilitaire sqlcmd. Une fois la session sqlcmd ouverte, exécutez l’instruction suivante une fois pour chaque fichier à déplacer :
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name'); GO
Sortez de l'utilitaire sqlcmd ou de SQL Server Management Studio.
Arrêtez l’instance de SQL Server. Par exemple, exécutez
NET STOP MSSQLSERVER
dans l’invite de ligne de commande.Copiez le ou les fichiers vers le nouvel emplacement.
Redémarrez l'instance de SQL Server. Par exemple, exécutez
NET START MSSQLSERVER
dans l’invite de ligne de commande.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>');
Étant donné qu’à l’étape 7, vous avez copié les fichiers de base de données au lieu de les déplacer, vous pouvez maintenant supprimer en toute sécurité les fichiers de base de données inutilisés à partir de leur emplacement précédent.
Déplacer la base de données master
Pour déplacer la base de données master
, procédez comme suit.
Vérifiez que le compte de service pour le moteur de base de données SQL Server dispose de toutes les autorisations sur le nouvel emplacement des fichiers. Pour plus d’informations, consultez Configurer les comptes de service Windows et les autorisations. Si le compte de service du moteur de base de données ne peut pas contrôler les fichiers dans leur nouvel emplacement, l'instance SQL Server ne démarre pas.
Dans le menu Démarrer, lancez le Gestionnaire de configuration SQL Server. Pour plus d’informations sur l’emplacement attendu, consultez Gestionnaire de configuration SQL Server.
Dans le nœud SQL Server Services, cliquez avec le bouton droit sur l’instance de SQL Server (par exemple, SQL Server (MSSQLSERVER)), puis sélectionnez Propriétés.
Dans la boîte de dialogue Propriétés de SQL Server (nom_instance), cliquez sur l’onglet Paramètres de démarrage.
Dans la zone Paramètres existants, sélectionnez le paramètre
-d
. Dans la zone Spécifiez un paramètre de démarrage, modifiez le paramètre par le nouveau chemin d'accès du fichier de donnéesmaster
. Sélectionnez Mettre à jour pour enregistrer les modifications.Dans la zone Paramètres existants, sélectionnez le paramètre
-l
. Dans la zone Spécifiez un paramètre de démarrage, modifiez le paramètre par le nouveau chemin d'accès du fichier journalmaster
. Sélectionnez Mettre à jour pour enregistrer les modifications.La valeur du paramètre pour le fichier de données doit suivre le paramètre
-d
et la valeur pour le fichier journal doit suivre le paramètre-l
. L'exemple suivant montre les valeurs des paramètres pour l'emplacement par défaut des fichiers de donnéesmaster
.-dC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\master.mdf -lC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
Si le nouvel emplacement planifié pour les fichiers de données
master
correspond àE:\SQLData
, les valeurs des paramètres sont modifiées comme suit :-dE:\SQLData\master.mdf -lE:\SQLData\mastlog.ldf
Sélectionnez OK pour enregistrer les changements de façon définitive et fermez la boîte de dialogue Propriétés SQL Server (instance_name).
Arrêtez l’instance de SQL Server en cliquant avec le bouton droit sur le nom d’instance et en sélectionnant Arrêter.
Copiez le fichier
master.mdf
etmastlog.ldf
vers le nouvel emplacement.Redémarrez l'instance de SQL Server.
Vérifiez que la modification des fichiers a bien eu lieu pour la base de données
master
en exécutant la requête ci-dessous.SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master');
À ce stade, SQL Server doit fonctionner normalement. Toutefois Microsoft recommande d’ajuster également l’entrée de registre sur
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\instance_ID\Setup
, où instance_ID est similaire àMSSQL13.MSSQLSERVER
. Dans cette ruche, modifiez la valeurSQLDataRoot
pour le nouveau chemin du nouvel emplacement des fichiers de base de donnéesmaster
. L’échec de la mise à jour du registre peut entraîner l’échec de la mise à jour corrective et de la mise à niveau.Étant donné qu’à l’étape 9, vous avez copié les fichiers de base de données au lieu de les déplacer, vous pouvez maintenant supprimer en toute sécurité les fichiers de base de données inutilisés à partir de leur emplacement précédent.
Déplacer la base de données de ressources
L’emplacement de la base de données Resource
est \<drive>:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Binn\
. La base de données ne peut pas être déplacée.
Suivi : après le déplacement de toutes les bases de données système
Si vous avez déplacé toutes les bases de données système vers un nouveau lecteur ou volume, ou vers un autre serveur utilisant une lettre de lecteur différente, effectuez les mises à jour suivantes.
Modifiez le chemin d'accès du journal de l'Agent SQL Server. Si vous ne mettez pas à jour ce chemin d'accès, l’agent SQL Server ne démarre pas.
Modifiez l'emplacement par défaut de la base de données. La création d'une base de données peut échouer si la lettre de lecteur et le chemin d'accès spécifiés comme emplacement par défaut n'existent pas.
Modifier le chemin d'accès du journal de l'Agent SQL Server
Si vous avez déplacé toutes les bases de données système vers un nouveau volume ou si vous avez migré vers un autre serveur avec une lettre de lecteur différente, et que le chemin du fichier journal des erreurs SQL Agent SQLAGENT.OUT
n’existe plus, effectuez les mises à jour suivantes.
Dans SQL Server Management Studio, dans l'Explorateur d'objets, développez SQL Server Agent.
Cliquez avec le bouton droit sur Journaux d'erreurs, puis sélectionnez Configurer.
Dans la boîte de dialogue Configurer les journaux d'erreurs de l'Agent SQL Server , spécifiez le nouvel emplacement du fichier SQLAGENT.OUT. L’emplacement par défaut est :
C:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Log\
.
Modifier l'emplacement par défaut de la base de données
Dans SQL Server Management Studio, dans l’Explorateur d’objets, connectez-vous à l’instance SQL Server souhaitée. Cliquez avec le bouton droit sur l’instance et sélectionnez Propriétés.
Dans la boîte de dialogue Propriétés du serveur , sélectionnez Paramètres de base de données.
Sous Emplacements de la base de données par défaut, accédez au nouvel emplacement des fichiers de données et des fichiers journaux.
Arrêtez et démarrez le service SQL Server pour terminer la modification.
Exemples
R. Déplacer la base de données tempdb
Dans l'exemple suivant, les fichiers de données et les fichiers journaux de la base de données tempdb
sont déplacés vers un nouvel emplacement dans le cadre d'une opération planifiée.
Conseil
Profitez de cette occasion pour passer en revue vos fichiers tempdb
pour une taille et un positionnement optimaux. Pour plus d’informations, consultez Optimisation des performances de tempdb dans SQL Server.
Dans la mesure où tempdb
est recréée à chaque démarrage de l'instance SQL Server, vous n'avez pas à déplacer physiquement les fichiers de données et les fichiers journaux. Les fichiers sont créés au nouvel emplacement lorsque le service est redémarré à l'étape 4. Tant que le service n'a pas redémarré, tempdb
continue à utiliser les fichiers de données et les fichiers journaux situés à l'emplacement existant.
Déterminez les noms de fichiers logiques de la base de données
tempdb
et leur emplacement actuel sur le disque.SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID(N'tempdb'); GO
Vérifiez que le compte de service pour le moteur de base de données SQL Server dispose de toutes les autorisations sur le nouvel emplacement des fichiers. Pour plus d’informations, consultez Configurer les comptes de service Windows et les autorisations. Si le compte de service du moteur de base de données ne peut pas contrôler les fichiers dans leur nouvel emplacement, l'instance SQL Server ne démarre pas.
Modifiez l'emplacement de chaque fichier à l'aide de
ALTER DATABASE
.USE master; GO ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf'); GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf'); GO
Tant que le service n'a pas redémarré,
tempdb
continue à utiliser les fichiers de données et les fichiers journaux situés à l'emplacement existant.Arrêtez et redémarrez l'instance de SQL Server.
Vérifiez que la modification des fichiers a bien eu lieu.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'tempdb');
Supprimer les fichiers
tempdb
inutilisés de leur emplacement d’origine.
Contenu connexe
- Base de données Resource
- Base de données tempdb
- Base de données MASTER
- Base de données msdb
- Base de données model
- Déplacer des bases de données utilisateur
- Déplacer des fichiers de bases de données
- Démarrage, arrêt, mise en pause, reprise et redémarrage des services SQL Server
- ALTER DATABASE (Transact-SQL)
- Reconstruire des bases de données système