Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Bases de données système SQL Server - Restauration des bases de données système

Dans les articles précédents de la série Bases de données système SQL Server, nous avons appris le but de toutes les bases de données système SQL Server qui font partie de l'installation de SQL Server et avons compris les meilleures pratiques à mettre en œuvre pour elles. Nous avons également compris les bases de données Tempdb et MSDB plus en détail. Étant donné que la sauvegarde et la restauration de la base de données système sont légèrement différentes par rapport aux bases de données utilisateur, nous verrons comment sauvegarder les bases de données système et restaurer la base de données système à partir des sauvegardes en détail dans cet article.

Sauvegarder la base de données SQL

Le terme Sauvegarde fait référence à la copie des données à l'intérieur d'une base de données en tant que fichier de sauvegarde pouvant être utilisé pour restaurer ou récupérer davantage les données.

Une sauvegarde complète d'une base de données contiendra les copies de données dans les fichiers de données et les fichiers journaux à restaurer en tant que base de données ou à effectuer la restauration ponctuelle en cas de sinistre ou de panne catastrophique. Par conséquent, des sauvegardes complètes régulières du système ainsi que des bases de données utilisateur sont cruciales.

Outre la sauvegarde complète, SQL Server prend en charge plusieurs autres options de sauvegarde telles que la sauvegarde différentielle, la sauvegarde du journal transactionnel, la sauvegarde de fichiers, etc., mais nous n'allons pas nous concentrer sur elles car elles sortent du cadre de cet article.

Une sauvegarde complète de la base de données doit être planifiée pour s'exécuter périodiquement ou après toute modification de configuration spécifique. Même si SQL Server peut accepter la sauvegarde complète de la base de données dans différentes extensions de fichier, il est recommandé d'enregistrer cette sauvegarde en tant que fichier *.bak pour faciliter la classification et la maintenance.

La syntaxe de la base de données de sauvegarde propose de nombreuses options, mais nous nous concentrerons uniquement sur les commandes fondamentales requises pour effectuer la sauvegarde complète de n'importe quelle base de données. La syntaxe complète est présente dans l'article MSDN.

Syntaxe de la base de données de sauvegarde (minimale)

BACKUP DATABASE <Database_name> 
TO DISK = <File_Path>
GO

Sauvegarder les bases de données utilisateur

Pour effectuer une sauvegarde complète de AdventureWorks base de données, remplacez simplement le Nom de la base de données et Chemin du fichier dans la commande BACKUP DATABASE ci-dessus et exécutez-la :

BACKUP DATABASE [AdventureWorks] 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks_Full.bak'
GO

Sauvegarder les bases de données du système

En utilisant la commande BACKUP DATABASE ci-dessus, nous pouvons effectuer une sauvegarde complète des bases de données système, telles que master, msdb et model :

BACKUP DATABASE master 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\master_Full.bak'
GO
BACKUP DATABASE model 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\model_Full.bak'
GO
BACKUP DATABASE msdb 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\msdb_Full.bak'
GO

Nous pouvons accéder au chemin du dossier ci-dessus, et nous y voyons les sauvegardes complètes de la base de données créées avec succès pour la base de données utilisateur et les bases de données système :

Est-il possible de sauvegarder la base de données tempdb ?

Essayons d'effectuer une sauvegarde complète de la base de données système tempdb en utilisant la même syntaxe BACKUP DATABASE :

BACKUP DATABASE tempdb 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\tempdb_Full.bak'
GO

Comme nous en avons discuté dans les articles précédents, tempdb est la seule base de données pour laquelle une sauvegarde ne peut pas être pris . La base de données tempdb sera créée chaque fois que les services SQL Server sont démarrés. Par conséquent, s'il y a des problèmes avec tempdb, le redémarrage du service SQL Server aidera à les résoudre.

Restaurer la base de données

La restauration d'une base de données à partir d'une sauvegarde complète (*.bak) ramène la base de données avec des données complètes ou "restaure" une base de données à un moment donné. La commande RESTORE peut également être utilisée pour restaurer des fichiers, des groupes de fichiers ou des journaux transactionnels, mais ce n'est pas le sujet de l'article actuel.

Pour restaurer une sauvegarde complète de la base de données , nous pouvons utiliser la syntaxe ci-dessous. Remarque :Semblable à la commande BACKUP, la commande RESTORE a de nombreuses options, mais nous ne ferons appel qu'aux options de base. Vous pouvez trouver des informations détaillées sur ces options dans un article MSDN dédié.

Syntaxe RESTAURATION DE LA BASE DE DONNÉES

RESTORE DATABASE <Database_Name> 
FROM  DISK = <File Path>
WITH  REPLACE
GO

Restaurer la base de données utilisateur

Pour restaurer AdventureWorks base de données de la sauvegarde complète que nous avons effectuée précédemment, nous pouvons utiliser la commande RESTORE DATABASE, en remplaçant le nom de la base de données et Chemin du fichier comme indiqué ci-dessous :

RESTORE DATABASE [AdventureWorks] 
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks_Full.bak' 
WITH REPLACE
GO

Restaurer la base de données du modèle

Essayons de restaurer la base de données du système modèle à l'aide de la commande RESTORE DATABASE :

RESTORE DATABASE model 
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\model_Full.bak' 
WITH REPLACE
GO

La sauvegarde de la base de données modèle peut être restaurée avec succès à l'aide de la commande par défaut RESTORE DATABASE.

Restaurer la base de données principale

Essayons maintenant de restaurer la base de données principale du système à l'aide de la commande RESTORE DATABASE :

RESTORE DATABASE master 
FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\master_Full.bak' 
WITH  REPLACE
GO

Il a généré une erreur indiquant que l'instance SQL Server doit être exécutée en mode mono-utilisateur pour restaurer la base de données principale. Comme l'indique le message d'erreur, nous devons démarrer notre instance SQL Server en mode mono-utilisateur, puis essayer de restaurer la base de données principale.

Pour démarrer une instance SQL Server en mode mono-utilisateur, nous pouvons appliquer l'une des méthodes suivantes :

  • Invite de commandes
  • Paramètres de démarrage SQL Server dans le gestionnaire de configuration SQL Server.

Approche d'invite de commande

Pour démarrer l'instance SQL Server en mode mono-utilisateur via l'invite de commande, ouvrez l'invite de commande avec Exécuter en tant qu'administrateur comme indiqué ci-dessous :

Une fois que c'est fait, tapez la commande :

NET STOP <SQL_Server_Service_Name>

Le SQL_Server_Service_Name peut être obtenu via le gestionnaire de configuration SQL Server ou services.msc

Gestionnaire de configuration SQL Server

Services.msc

Étant donné que notre service SQL Server est l'instance par défaut, nous pouvons utiliser le nom MSSQLSERVER comme souligné ci-dessus. Une fois entré, il demandera une confirmation pour arrêter tous les services dépendants. Nous pouvons également arrêter le service SQL Server Agent en tapant Y pour Oui .

Lorsque le service SQL Server est arrêté, nous pouvons le démarrer en mode mono-utilisateur. Exécutez la commande ci-dessous où /m signifie démarrer le service SQL Server en mode mono-utilisateur.

NET START MSSQLSERVER /m

Lorsqu'elle est effectuée, nous pouvons essayer de restaurer la base de données principale. Exécutez la commande RESTORE BACKUP comme avant :

En démarrant l'instance SQL Server en mode mono-utilisateur, nous sommes en mesure de restaurer avec succès la base de données du système maître à partir de la dernière sauvegarde complète de la base de données connue sans aucun problème. Ainsi, nous avons appris que pour restaurer la base de données principale, l'instance SQL Server doit être en mode mono-utilisateur.

Avec l'instance SQL Server en mode mono-utilisateur, un seul utilisateur peut se connecter et une fois nos activités de restauration terminées, nous devons le remettre en mode multi-utilisateur en arrêtant l'instance SQL Server et en démarrant l'instance SQL Server sans l'option /m comme indiqué ci-dessous :

NET STOP MSSQLSERVER
NET START MSSQLSERVER

Une fois démarré en mode normal ou en mode multi-utilisateur, tous les utilisateurs peuvent se connecter à l'instance SQL Server et effectuer leurs activités. Nous pouvons également vérifier que la base de données principale a été restaurée au moment où la sauvegarde complète a été effectuée et que toute modification de configuration effectuée après cela doit être effectuée à nouveau.

Peu de choses à noter lorsque l'instance SQL Server est en mode mono-utilisateur :

  • Lorsque l'instance SQL Server est en mode mono-utilisateur, une seule session utilisateur peut s'y connecter. Par conséquent, assurez-vous que le service SQL Server Agent et tous les autres services liés à SQL Server sont dans le arrêté statut. Sinon, ces connexions peuvent être établies en premier, et si cela se produit, nous ne pouvons pas nous connecter à SQL Server pour restaurer la base de données.
  • Lorsque vous vous connectez via SSMS en mode mono-utilisateur, déconnectez l'explorateur d'objets et connectez-vous uniquement via la fenêtre de requête. Si une connexion est établie à partir de l'Explorateur d'objets, une seule connexion est établie. Par conséquent, vous ne pouvez pas vous connecter à partir de la fenêtre de requête. Reportez-vous à la capture d'écran ci-dessous - elle montre comment connecter uniquement la fenêtre Nouvelle requête sans se connecter via l'Explorateur d'objets :

Paramètre de démarrage SQL Server dans Configuration Manager

Ceux qui sont plus à l'aise avec l'interface graphique au lieu de l'invite de commande peuvent appliquer l'approche ci-dessous.

1). Ouvrez le Gestionnaire de configuration SQL Server en tapant MSSQLManager13.msc dans l'invite de commande. Ici, 13 fait référence à SQL Server 2016, utilisez donc les numéros correspondants corrects pour les autres versions de SQL Server :

  • SQL Server 2012SQLServerManager11.msc
  • SQL Server 2014SQLServerManager12.msc
  • SQL Server 2016SQLServerManager13.msc
  • SQL Server 2017SQLServerManager14.msc
  • SQL Server 2019SQLServerManager15.msc

2). Développez Services SQL Server :

3). Faites un clic droit sur le service SQL Server identifié comme SQL Server (MSSQLSERVER) > Propriétés .

4). Sélectionnez les paramètres de démarrage onglet de menu.

5). Cliquez sur -m dans le Spécifiez un paramètre de démarrage puis cliquez sur Ajouter pour démarrer le service SQL Server en mode mono-utilisateur.

6). Cliquez sur OK et redémarrez le service SQL Server pour démarrer le service SQL Server en mode mono-utilisateur.

Pour modifier l'instance SQL Server du mode mono-utilisateur au mode multi-utilisateur ou au mode normal après la restauration de la base de données principale, cliquez simplement sur le paramètre -m de Paramètre existant s , Cliquez sur Supprimer et redémarrez le service SQL Server.

Restaurer la base de données MSDB

Essayons maintenant de restaurer la sauvegarde de la base de données système msdb à l'aide de la commande par défaut RESTORE DATABASE :

RESTORE DATABASE msdb 
FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\msdb_Full.bak' 
WITH  REPLACE
GO

Cette tentative nous apporte une erreur indiquant L'accès exclusif n'a pas pu être obtenu car la base de données est en cours d'utilisation . Ce message d'erreur indique qu'un autre processus utilise msdb . Ainsi, nous devons appliquer l'une des approches ci-dessous pour restaurer correctement la base de données msdb :

  • Démarrez l'instance ou le service SQL Server en mode mono-utilisateur comme nous l'avons fait précédemment pour éviter que quiconque se connecte et accède à la msdb base de données.
  • Ou apportez le msdb base de données en mode mono-utilisateur sans qu'aucun utilisateur ne s'y connecte.

Puisque nous savons comment transformer l'instance ou le service SQL Server en mode mono-utilisateur lors de la restauration de la base de données système maître, nous allons essayer la deuxième option en changeant la base de données msdb en mode mono-utilisateur pour restaurer la sauvegarde de la base de données msdb.

Exécutez la commande ci-dessous :

USE [master]
GO
ALTER DATABASE [msdb] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

Important :L'exécution de la commande ci-dessus peut échouer dans les cas suivants :

  • Le service SQL Server Agent est opérationnel. Pour corriger l'échec, arrêtez le service SQL Server Agent et réessayez.
  • Toutes les sessions utilisateur sont connectées à la base de données msdb. Nous pouvons trouver les connexions actives à msdb ou à une autre base de données en utilisant la requête ci-dessous :
use master
GO
select spid
from sys.sysprocesses
where dbid = db_id('msdb')

Si cette requête apporte des résultats, cela indique que certaines sessions utilisateur sont connectées à la base de données msdb. Dans ce cas, nous devrions tuer ces sessions par la commande KILL et remplacer le spid obtenu à partir de l'exécution de la requête ci-dessus :

KILL <spid>

Lorsqu'aucune session n'est connectée au msdb base de données, nous serons en mesure d'amener avec succès la base de données msdb en mode mono-utilisateur. Chaque fois qu'une base de données est en mode mono-utilisateur, nous pourrons voir le mot (mono-utilisateur) affiché à proximité de la base de données, comme indiqué ci-dessous pour la base de données msdb :

Essayons de restaurer le msdb base de données en utilisant maintenant notre commande RESTORE DATABASE :

Avec la base de données msdb en mode mono-utilisateur, nous avons pu restaurer msdb base de données avec succès depuis la dernière sauvegarde complète connue de msdb base de données. La restauration d'une base de données à partir d'une sauvegarde la ramènera par défaut en mode multi-utilisateur et si elle est toujours en mode mono-utilisateur pour une raison quelconque, nous pouvons exécuter la commande ci-dessous pour la ramener en mode multi-utilisateur :

USE [master]
GO
ALTER DATABASE [msdb] SET MULTI_USER
GO

Reconstruire les bases de données système

Pour toute Production idéale environnements, il est essentiel d'avoir une sauvegarde complète des bases de données système en place pour restaurer les bases de données système sans aucune perte de données en cas d'erreurs accidentelles des utilisateurs ou de corruption de base de données ou de récupération après sinistre.

Dans le pire des cas, si les services SQL Server ne peuvent pas être démarrés, nous devons d'abord essayer de restaurer les bases de données système à partir des dernières sauvegardes complètes connues et si nous n'avons pas de sauvegardes complètes disponibles et que nous ne pouvons pas démarrer les services SQL Server, alors nous sommes reste avec une seule option finale, c'est-à-dire Reconstruire les bases de données système. Remarque :La reconstruction des bases de données système effacera toutes les configurations de niveau serveur stockées dans toutes les bases de données système et nous pourrions perdre toutes les configurations de niveau serveur/instance comme les connexions, les configurations de l'agent SQL Server, d'autres détails critiques stockés dans les bases de données système que nous avons vues dans nos articles précédents.

Jetons un coup d'œil sur la façon de reconstruire les bases de données système (comme mentionné ci-dessus, ce processus doit être effectué comme dernière mesure pour ramener l'instance SQL Server en l'absence de sauvegardes complètes des bases de données système).

Pour reconstruire les bases de données système, nous aurions besoin du support d'installation de SQL Server, monté ou copié sur le serveur sur lequel notre instance SQL Server est installée. Une fois cela fait, nous devons suivre les étapes ci-dessous :

  1. Dans l'invite de commande, accédez au chemin où se trouvent les fichiers d'installation de SQL Server (setup.exe) :

    C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\SQLServer2016
  2. Exécutez la commande ci-dessous, en remplaçant tous les paramètres par des valeurs valides. Valeur ACTION =REBUILDDATABASE indique que toutes les bases de données système doivent être reconstruites après l'exécution de cette commande.
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName]

Les paramètres à modifier incluent :

  • NomInstance – le nom d'instance de SQL Server, dans notre cas c'est RRJ
  • Comptes – le nom du compte sysadmin, dans notre cas c'est sa
  • StrongPassword – un mot de passe fort pour le sa compte administrateur système.
  • CollationName – le nom de classement de la base de données SQL Server s'il doit être modifié.

Conclusion

Nous avons appris comment sauvegarder et restaurer les bases de données utilisateur et système et avons compris les mesures supplémentaires requises pour restaurer les bases de données système telles que les bases de données système master et msdb. En cas de sauvegardes complètes des bases de données système manquantes, nous avons également appris à reconstruire les bases de données système à partir du support d'installation de SQL Server et compris les pertes de données liées à la configuration impliquées lors de la reconstruction des bases de données système. Pour résumer, nous avons indirectement compris l'importance de planifier des sauvegardes complètes pour les bases de données système en plus des bases de données utilisateur.

Merci pour votre temps, et nous nous reverrons bientôt avec un autre article intéressant.