Welche Schritte sind erforderlich, um einen Computer mit Microsoft SQL Server sicher neu zu starten?

23

Sind beim Neustart eines Servers, auf dem sich eine MS SQL Server-Instanz befindet, besondere Schritte erforderlich, um eine Beschädigung der Daten zu verhindern?

Ich habe zum Beispiel kürzlich die Empfehlung erhalten, den SQL-Dienst manuell zu stoppen. Meines Wissens wird dies vom Windows- shutdownProzess erledigt .

Ich bin mir sicher, dass es eine Unmenge von Schritten gibt, die einzelne Leute empfehlen können, wie ich es gerade erwähnt habe, aber ich möchte vermeiden, dass veraltete oder abergläubische Praktiken wiederholt werden . Gibt es Empfehlungen von Microsoft oder weit verbreitete Industriestandards?


Diese Frage bezieht sich auf den kurzfristigen Vorgang des Neustarts einer Maschine. Es gibt noch eine andere Frage zum langfristigen Verfahren, um sicherzustellen, dass eine Maschine nicht verwendet wird, bevor sie dauerhaft außer Betrieb genommen wird.

Jon aller Berufe
quelle
Ich kann keinen Sinn daraus machen, nach "weit verbreiteten Industriestandards" zu fragen und keine "zig Schritte zu wollen, die einzelne Leute empfehlen können". Das ist vermutlich ihre Darstellung von Industriestandards. Beide scheinen berechtigte Fragen zu sein, aber die maßgebliche Quelle wird ein Link zum Microsoft-Artikel sein.
Evan Carroll

Antworten:

14

Sie müssen nicht ausgefallen / besorgt oder ängstlich sein, wenn Sie SQL Server neu starten.

Stellen Sie nur sicher, dass Sie keine lang laufenden Transaktionen haben. Am besten starten Sie sql server mit dem Befehl console oder shutdown während eines Zeitraums niedriger / minimaler Aktivität neu, der auch als Wartungsfenster bezeichnet wird, um die Auswirkungen auf Ihr Unternehmen zu minimieren.

Wenn Sie ein DR-Setup haben und nicht inaktiv sein möchten, ist es am besten, ein Failover durchzuführen und dann den passiven oder sekundären Knoten neu zu starten.

Clean Shutdown SQL Server tritt in den folgenden Szenarien auf:

  • Stoppen Sie den SQL Server über die Services Console.
  • Fahren Sie Ihren Server herunter
  • Ausführen des Befehls SHUTDOWN in SSMS

Vor allem in Situationen, in denen SQL Server alle Datenbanken ordnungsgemäß herunterfährt und dann den Dienst beendet, bei dem alle Transaktionen festgeschrieben oder zurückgesetzt werden, alle fehlerhaften Seiten auf die Festplatte geschrieben und anschließend ein Eintrag in das Transaktionsprotokoll geschrieben wird.

Unsachgemäßes Herunterfahren des SQL-Servers:

  • Herunterfahren mit nowait
  • Ziehen des Netzkabels von Ihrem Server (falls Sie Zugriff haben).
  • Killing sqlserver.exe aus dem Task-Manager
  • Richtungsfehler, auf denen SQL Server-Binärdateien, EXE-Dateien, Systemdatenbanken oder Windows-Systemlaufwerksfehler gespeichert sind. In der Regel C: \ Laufwerk.
  • Überhitzung des Servers führt zum Herunterfahren (sollte selten vorkommen !!)

SQL Server wird immer versuchen, ein sauberes Herunterfahren durchzuführen ... es sei denn, Sie tun etwas Unkorrektes, wie oben angegeben.

Einige wirklich gute Links zum Lesen, was während der Erholungsphase hinter den Kulissen passiert:

Kin Shah
quelle
Tolles Detail, danke. Was meinst du mit einem "DR Setup"?
Jon of All Trades
@ JonofAllTrades Disaster Recovery .. zB Protokollversand, Datenbankspiegelung oder Sie können auch an Hochverfügbarkeit wie Clustering
Kin Shah
1
Obwohl ich dieser Liste der „unzulässigen“ Abschaltszenarien vollkommen zustimme, sollte dank Write-Ahead-Protokollierung auch dann keine Datenbeschädigung auftreten.
John Alan
5

Dies ist alles ausführlich auf dieser Seite.

In Anbetracht der Tatsache, dass Ihre Frage speziell lautet "Gibt es von Microsoft empfohlene ", bin ich der Ansicht, dass dies kontraproduktiv ist, um diese Diskussion hier zu führen. Der Artikel beschreibt deren Details den Ablauf durch

  • Verwenden Sie entweder
    • Befehlszeile
    • Power Shell,
    • SQL Server Management Studio (GUI)
  • Für 2008, 2012, 2014, 2016.
  • Für die entweder
    • Datenbankmodul
    • oder Agent

Ob diese Schritte zufriedenstellend sind oder nicht, wäre meiner Meinung nach nicht wünschenswert. Die richtige Antwort ist dort also immer auf dem neuesten Stand.

Beenden des Dienstes vor dem Ausschalten

Ist dies erforderlich oder wird dies empfohlen, bevor ein Server heruntergefahren wird, auf dem gerade SQL-Dienste ausgeführt werden?

Nein, es ist nicht notwendig. Wenn der Windows-Kernel das Signal zum Herunterfahren an SQL Server sendet, geschieht dies auf sichere Weise, und das System wartet, bis der Vorgang abgeschlossen ist. Allgemein gesagt, muss alles, was mit der Fähigkeit zum sicheren Herunterfahren ausgestattet ist, nicht manuell heruntergefahren werden, und es liegt auf der Hand, dass alle Microsoft-Anwendungen ihre eigene API und Prozeduren befolgen , die in die PRESHUTDOWNoder SHUTDOWNPhasen eingebunden sind. Ab den Dokumenten PRESHUTDOWN, von denen ich annehme , dass sie verwendet werden,

Benachrichtigt einen Dienst, dass das System heruntergefahren wird. Dienste, die zusätzliche Zeit benötigen, um Bereinigungsaufgaben über die enge Zeitbeschränkung beim Herunterfahren des Systems hinaus auszuführen, können diese Benachrichtigung verwenden. Der Dienststeuerungs-Manager sendet diese Benachrichtigung an Anwendungen, die sich dafür registriert haben, bevor er eine SERVICE_CONTROL_SHUTDOWNBenachrichtigung an Anwendungen sendet , die sich für diese Benachrichtigung registriert haben.

Ein Dienst, der diese Benachrichtigung verarbeitet, blockiert das Herunterfahren des Systems, bis der Dienst beendet wird oder das durch angegebene Zeitlimit für das Herunterfahren SERVICE_PRESHUTDOWN_INFOabgelaufen ist. Da dies die Benutzererfahrung beeinträchtigt, sollten Dienste diese Funktion nur verwenden, wenn es unbedingt erforderlich ist, Datenverlust oder erhebliche Wiederherstellungszeiten beim nächsten Systemstart zu vermeiden.

Je nach Bedarf gehe ich davon aus, dass SQL Server so funktioniert.

Evan Carroll
quelle
Das habe ich fast gefragt. In diesem Dokument wird das Herunterfahren des SQL Server-Moduls beschrieben, es wird jedoch nicht beantwortet, ob dies erforderlich oder empfohlen ist, bevor ein Server heruntergefahren wird, auf dem SQL Services ausgeführt werden.
Jon of All Trades
@ JonofAllTrades erneut aktualisiert.
Evan Carroll
3

Nicht genau, wenn es darum geht, die Datenbank herunterzufahren und Beschädigungen zu verhindern. MS SQL Server ist ein sehr ausgereiftes Produkt, und die Wahrscheinlichkeit, durch einfaches Herunterfahren ein Korruptionsproblem zu verursachen, wäre ein Rand-Szenario. Es ist viel wahrscheinlicher, dass Sie eine Beschädigung verursachen, wenn Sie CHECK DB nicht ausführen oder die Prüfsummenüberprüfung für Ihre DB aktiviert haben.

Möglicherweise kann es zu Problemen kommen, wenn externe Tools die MDF- / NDF- / LDF-Dateien direkt berühren, z. B. wenn versucht wird, die Dateien zwischen dem Herunterfahren zu verschieben, oder wenn eine Software versucht, die Dateien beim Herunterfahren zu sperren. Ich habe festgestellt, dass das Windows-Clustering versagt, wenn eine Festplatte, auf der DB-Dateien gehostet werden, voll ist, aber nicht speziell 'db-Beschädigung' verursacht.

Wenn Sie dabei helfen möchten, ein reibungsloses Herunterfahren oder Failover sicherzustellen, können Sie einen Prüfpunkt ausführen, sicherstellen, dass DBCC CHECKDB häufig ausgeführt wird (mindestens so oft, dass beschädigte Daten aus einer Sicherung wiederhergestellt werden können), und überprüfen, ob externe Abhängigkeiten bestehen kümmerte sich wie Spiegelung.

Wenn Experten jedoch andere 'Best Practices' haben, die ich gerne hören würde, aber in den letzten Jahren die Blogs und Online-Ressourcen durchforstet habe, habe ich bei Datenkorruption und einfachem 'Herunterfahren / Neustarten' nicht viel gesehen.

Ali Razeghi
quelle
-1

So mache ich das: 1) Deaktiviere alle Jobs. 2) Stellen Sie sicher, dass derzeit keine Jobs ausgeführt werden. 3) Führen Sie SP_Who3 häufig aus, um die Aktivität zu überprüfen, und führen Sie sp_whoisactive aus, um weitere Informationen zu erhalten. 4) Wenn keine Aktivität vorhanden ist und Sie nur Ihre aktuelle sp_who3-Abfrage sehen, 5) schalten Sie die DBs offline. 6) Klicken Sie mit der rechten Maustaste oben auf die Datenbank und klicken Sie auf Beenden. 7) Überprüfen Sie, ob die Dienste in services.msc 8 angehalten sind ) Getan

PS. Sollten Sie eine PAGEIOLATCH / IOCOMPLETION oder eine andere Aktivität in SP_Who3 haben, führen Sie die obigen Schritte nicht aus, da dies Ihre Datenbanken in den Wiederherstellungsmodus versetzen könnte.

Gozzy
quelle
Sehr selten ist es machbar oder lohnenswert, den gesamten Datenverkehr zur Datenbank für die meisten Menschen zu stoppen . Ich bin mir auch sicher, welchen Vorteil es hat, alle Datenbanken offline zu schalten - das verlängert den Prozess nur.
LowlyDBA
Dies ist überhaupt kein guter Rat. warum würden Sie vorschlagen, dbs offline zu schalten - wenn sich dbs in HADR befindet, z. B. Mirroring oder AG, können Sie das nicht.
Kin Shah