Restaurer la base de données master sur Linux en mode mono-utilisateur
S’applique à : SQL Server - Linux
Dans certaines circonstances, il peut être nécessaire de restaurer la base de données master
sur une instance de SQL Server en mode mono-utilisateur sur Linux. Les scénarios incluent la migration vers une nouvelle instance ou la récupération en raison d’incohérences.
Remarque
SQL Server va s’arrêter automatiquement une fois la restauration terminée. Ce comportement est normal.
Pour restaurer la base de données master
, vous devez démarrer SQL Server en mode mono-utilisateur, en utilisant l'option startup -m
de la ligne de commande.
Pour démarrer une instance de SQL Server en mode mono-utilisateur sous Windows, voir Mode mono-utilisateur pour SQL Server.
Prérequis
Le démarrage de SQL Server en mode mono-utilisateur permet aux membres du groupe Administrateurs local de se connecter à SQL Server en tant que membre du rôle serveur fixe sysadmin. Pour plus d’informations, consultez Se connecter à SQL Server quand les administrateurs système n’y ont plus accès.
Lorsque vous démarrez une instance de SQL Server en mode mono-utilisateur :
- Un seul utilisateur peut se connecter au serveur.
- Le processus
CHECKPOINT
n’est pas exécuté. Par défaut, il s'exécute automatiquement au démarrage.
Arrêter le service SQL Server
La commande suivante arrête l’instance SQL Server si elle est en cours d’exécution :
systemctl stop mssql-server
Changez l’utilisateur actif pour mssql
SQL Server sur Linux s’exécute sous l’utilisateur
mssql
: vous devez donc d’abord basculer sur cet utilisateur. Vous êtes invité à entrer le mot de passe deroot
lors de l’exécution de cette commande.su mssql
Démarrer SQL Server en mode mono-utilisateur
Quand vous utilisez l’option
-m
avecSQLCMD
, vous pouvez limiter les connexions à une application cliente spécifiée (SQLCMD
doit être spécifié en majuscules comme indiqué) :/opt/mssql/bin/sqlservr -m"SQLCMD"
Dans l’exemple précédent,
-m"SQLCMD"
limite les connexions à une seule connexion, laquelle doit s’identifier elle-même en tant que programme client sqlcmd. Utilisez cette option quand vous démarrez SQL Server en mode mono-utilisateur pour restaurer une base de donnéesmaster
.Quand SQL Server démarre, il génère plusieurs entrées de journal. Vous pouvez vérifier qu’il s’exécute en mode mono-utilisateur en recherchant les lignes suivantes dans la sortie :
[...] 2022-05-24 04:26:27.24 Server Command Line Startup Parameters: -m "SQLCMD" [...] 2022-05-24 04:26:28.20 spid8s Warning ****************** 2022-05-24 04:26:28.21 spid8s SQL Server started in single-user mode. This an informational message only. No user action is required.
Se connecter à l'instance
Utilisez sqlcmd pour vous connecter à l’instance SQL Server :
/opt/mssql-tools/bin/sqlcmd -S <ServerName> -U sa -P <StrongPassword>
Dans l’exemple précédent,
<ServerName>
est le nom de l’hôte exécutant SQL Server si vous vous connectez à distance. Si vous vous connectez directement sur l’hôte où SQL Server est en cours d’exécution, vous pouvez ignorer ce paramètre ou utiliserlocalhost
.<StringPassword>
est le mot de passe pour le compte SA.
Restaurer la base de données master
Exécutez les commandes suivantes dans sqlcmd. Rappelez-vous que sqlcmd attend
GO
à la fin du script pour l’exécuter.use [master]; RESTORE DATABASE [master] FROM DISK = N'/var/opt/mssql/data/master.bak' WITH FILE=1, MOVE N'master' to N'/var/opt/mssql/data/master.mdf', MOVE N'mastlog' to N'/var/opt/mssql/data/mastlog.ldf', NOUNLOAD, REPLACE, STATS=5; GO
Dans l’exemple précédent, le chemin vers le fichier de sauvegarde de la base de données
master
est/var/opt/mssql/data/master.bak
. Vous devez remplacer cette valeur par le chemin approprié pour votre fichier de sauvegarde de la base de donnéesmaster
.Vous devez voir une sortie similaire à l’exemple suivant si la restauration réussit.
Processed 456 pages for database 'master', file 'master' on file 1. Processed 5 pages for database 'master', file 'mastlog' on file 1. The master database has been successfully restored. Shutting down SQL Server. SQL Server is terminating this process.
Redémarrez le service SQL Server
Pour redémarrer SQL Server, exécutez la commande suivante.
systemctl start mssql-server
Remarques
Quand vous restaurez une sauvegarde de la base de données master
, toutes les bases de données utilisateur existantes qui ont été ajoutées à l’instance une fois la sauvegarde effectuée ne seront pas visibles après la restauration de master
. Les fichiers doivent néanmoins toujours exister sur la couche de stockage : vous devez donc réattacher manuellement ces fichiers de base de données utilisateur pour mettre ces bases de données en ligne. Pour plus d’informations, consultez Attach a Database.