Voici quelques pistes sur lesquelles j'examinerais. Ne faites pas tout cela (certaines d'entre elles sont des techniques différentes pour atteindre le même objectif), mais méritent d'être considérées:
1. Examinez directement le journal des erreurs SQL
Accédez directement au dossier contenant les journaux d'erreurs SQL et chargez le plus récent ERRORLOG
dans le bloc-notes pour obtenir plus de détails sur les raisons pour lesquelles l'instance SQL ne démarre pas. Vous constaterez peut-être que le problème ne vient pas du tout de la base de données master.
2. Essayez de démarrer l'instance en mode mono-utilisateur
Voici une liste complète des options de démarrage de SQL Server , notamment -m
(mode mono-utilisateur) et -f
(mode de configuration minimale). D'autres options vous permettent de spécifier le chemin d'accès à la base de données master, si tel est le problème.
Si vous êtes en mesure de démarrer l'instance, suivez les étapes de l'article MSDN que vous avez lié pour restaurer la base de données principale, ou cette procédure détaillée de Thomas LaRock .
Si une autre application saisit toujours la connexion mono-utilisateur avant que vous puissiez, désactivez d'abord l'agent SQL pour qu'il ne démarre pas. Deuxièmement, consultez les idées sur cette question pour utiliser le -m"Application Name"
paramètre pour spécifier le nom de l'application.
3. Restaurez master
vers une autre instance et copiez ses fichiers
Je n'ai trouvé qu'une autre mention de cette technique non documentée, mais je l'ai utilisée avec succès le week-end dernier, donc cela pourrait valoir la peine d'être essayé.
Si vous ne pouvez pas démarrer l'instance en mode mono-utilisateur, mais que vous avez une autre instance SQL exécutant exactement la même version et la même construction , essayez de restaurer la dernière bonne sauvegarde de base de données maître connue de votre serveur mort vers l'autre instance:
- Restaurer sous un nom différent, bien sûr (
master_please_god_let_this_work
), WITH MOVE
afin de ne pas écraser master
sur votre bon serveur
- Restaurer
WITH NORECOVERY
. Je ne sais pas si cela est nécessaire, mais je me suis senti mieux que je savais que l'autre serveur n'allait rien changer dans le maître restauré
- Réglez-le hors ligne:
ALTER DATABASE [master_please_god_let_this_work] SET OFFLINE
- Copiez les fichiers MDF et LDF restaurés du bon serveur vers le serveur mort
- Renommez les fichiers
master.mdf
et mastlog.ldf
si nécessaire pour remplacer les mauvais fichiers maîtres par vos versions restaurées
- Croisez les doigts et lancez l'instance
- Facultatif: effectuez une nouvelle restauration du maître sur le serveur réactivé. Pas sûr que ce soit nécessaire, car nous avons fait très attention à ne pas changer
master
.
4. Reconstruisez les bases de données système
Si vous ne disposez pas d'une autre instance exécutant la même version, ou si vous n'êtes pas à l'aise avec la procédure non documentée répertoriée au # 3, ou si vous n'avez pas de sauvegardes de master
( pourquoi n'avez-vous pas de sauvegardes ?? ), vous pouvez reconstruire les bases de données système SQL à partir du disque d'installation d'origine :
Setup.exe /ACTION=REBUILDDATABASE /...
Lorsque cela est terminé, vous pouvez suivre les étapes liées précédemment pour restaurer à master
partir de votre dernière bonne sauvegarde. Vous devrez également restaurer une sauvegarde récente de msdb
pour conserver tous vos travaux, le calendrier des travaux et l'historique des travaux.
5. Restaurez toutes les bases de données USER dans une nouvelle instance SQL (ou existante)
Si vous avez déjà une autre instance existante en cours d'exécution (version SQL appropriée, suffisamment d'espace disque), je commencerais probablement les restaurations de base de données à partir des sauvegardes les plus récentes pendant que je travaille sur les autres étapes de dépannage ci-dessus, juste au cas où j'en aurais besoin.
Si votre nouvelle instance (ou réinstallée) a accès au même disque, il est beaucoup plus rapide de simplement les attacher en tant que nouvelles bases de données:
CREATE DATABASE foo
ON (FILENAME = 'D:\data\foo.mdf'),
(FILENAME = 'D:\data\foo_log.ldf')
FOR ATTACH;
6. Effectuez à nouveau toutes les modifications master
Une fois que vous avez réussi à restaurer master
(via l'une des techniques ci-dessus), vous devez rechercher toutes les modifications qui pourraient avoir été perdues, si elles ont été apportées après la sauvegarde que vous venez de restaurer:
- Modifications de sécurité
- Nouvelles bases de données (les fichiers seront toujours sur le disque, il suffit de les attacher)
- Paramètres à l'échelle du serveur
Il n'y a aucun moyen magique de les trouver, vous devrez revenir à la documentation de votre propre entreprise pour ces types de changements, si vous en avez un.