Hier sind einige Möglichkeiten, die ich untersuchen würde. Tun Sie nicht alle (einige davon sind unterschiedliche Techniken, um denselben Zweck zu erreichen), aber es lohnt sich, darüber nachzudenken:
1. Untersuchen Sie das SQL-Fehlerprotokoll direkt
Navigieren Sie direkt zu dem Ordner mit den SQL-Fehlerprotokollen und laden Sie den neuesten ERRORLOG
in den Editor, um weitere Informationen darüber zu erhalten, warum die SQL-Instanz nicht gestartet wird. Vielleicht werden Sie feststellen, dass das Problem überhaupt nicht mit der Master-Datenbank zusammenhängt.
2. Versuchen Sie, die Instanz im Einzelbenutzermodus zu starten
Hier finden Sie eine vollständige Liste der Startoptionen für SQL Server , einschließlich -m
(Einzelbenutzermodus) und -f
(Minimalkonfigurationsmodus). Mit anderen Optionen können Sie den Pfad für die Master-Datenbank angeben, wenn dies das Problem ist.
Wenn Sie die Instanz starten können, befolgen Sie die Schritte in dem MSDN-Artikel, den Sie zum Wiederherstellen der Master-Datenbank verlinkt haben , oder in dieser detaillierten exemplarischen Vorgehensweise von Thomas LaRock .
Wenn eine andere Anwendung immer die Einzelbenutzerverbindung abruft, bevor Sie können, deaktivieren Sie zuerst den SQL-Agenten, damit er nicht gestartet wird. Zweitens finden Sie in den Ideen zu dieser Frage Informationen zur Verwendung des -m"Application Name"
Parameters zur Angabe des Anwendungsnamens.
3. Stellen Sie master
eine andere Instanz wieder her und kopieren Sie deren Dateien
Ich habe nur eine weitere Erwähnung dieser undokumentierten Technik gefunden, aber ich habe sie am vergangenen Wochenende erfolgreich angewendet, sodass es möglicherweise einen Versuch wert ist.
Wenn Sie die Instanz nicht im Einzelbenutzermodus starten können, aber eine andere SQL-Instanz mit genau derselben Version und demselben Build ausgeführt wird , versuchen Sie, die letzte bekannte gute Master-Datenbanksicherung von Ihrem toten Server auf der anderen Instanz wiederherzustellen:
- Stellen Sie natürlich (
master_please_god_let_this_work
) als anderen Namen wieder her, WITH MOVE
damit Sie master
Ihren guten Server nicht überschreiben
- Wiederherstellen
WITH NORECOVERY
. Ich bin mir nicht sicher, ob dies notwendig ist, aber ich fühlte mich besser, als ich wusste, dass der andere Server nichts am wiederhergestellten Master ändern würde
- Stellen Sie es auf offline:
ALTER DATABASE [master_please_god_let_this_work] SET OFFLINE
- Kopieren Sie die wiederhergestellten MDF- und LDF-Dateien vom guten Server auf den toten Server
- Benennen Sie die Dateien
master.mdf
und mastlog.ldf
nach Bedarf um, um die fehlerhaften Masterdateien durch Ihre wiederhergestellten Versionen zu ersetzen
- Drücken Sie die Daumen und starten Sie die Instanz
- Optional: Führen Sie eine neue Wiederherstellung des Masters auf dem wiederbelebten Server durch. Ich bin mir nicht sicher, ob dies notwendig ist, da wir ziemlich darauf geachtet haben, uns nicht zu ändern
master
.
4. Erstellen Sie die Systemdatenbanken neu
Wenn auf keiner anderen Instanz dieselbe Version ausgeführt wird oder wenn Sie mit der in # 3 aufgeführten undokumentierten Prozedur nicht vertraut sind oder wenn Sie keine Sicherungen von haben master
( warum haben Sie keine Sicherungen? ), Sie können die SQL-Systemdatenbanken von der ursprünglichen Installationsdiskette neu erstellen :
Setup.exe /ACTION=REBUILDDATABASE /...
Wenn dies abgeschlossen ist, können Sie die zuvor verknüpften Schritte ausführen, um master
von Ihrer letzten guten Sicherung wiederherzustellen . Sie müssen auch eine aktuelle Sicherung von wiederherstellen msdb
, um alle Ihre Jobs, den Jobplan und den Jobverlauf beizubehalten.
5. Stellen Sie alle USER-Datenbanken in einer neuen (oder vorhandenen) SQL-Instanz wieder her
Wenn bereits eine andere vorhandene Instanz ausgeführt wird (richtige SQL-Version, genügend Speicherplatz), würde ich wahrscheinlich Datenbankwiederherstellungen von den letzten Sicherungen starten, während ich an den anderen oben beschriebenen Schritten zur Fehlerbehebung arbeite, nur für den Fall, dass ich sie benötige.
Wenn Ihre neue (oder neu installierte) Instanz Zugriff auf dieselbe Festplatte hat, ist es viel schneller, sie einfach als neue Datenbanken anzuhängen:
CREATE DATABASE foo
ON (FILENAME = 'D:\data\foo.mdf'),
(FILENAME = 'D:\data\foo_log.ldf')
FOR ATTACH;
6. Nehmen Sie alle Änderungen an erneut vor master
Nach der erfolgreichen Wiederherstellung master
(mithilfe einer der oben genannten Techniken) müssen Sie alle Änderungen untersuchen, die möglicherweise verloren gegangen sind, wenn sie nach der soeben wiederhergestellten Sicherung vorgenommen wurden:
- Sicherheitsänderungen
- Neue Datenbanken (die Dateien befinden sich weiterhin auf der Festplatte, hängen Sie sie einfach an)
- Serverweite Einstellungen
Es gibt keinen magischen Weg, diese zu finden. Sie müssen für diese Art von Änderungen zum Dokumentationspfad Ihres eigenen Unternehmens zurückkehren, falls Sie einen haben.