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- shutdown
Prozess 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.
quelle
Antworten:
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:
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:
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:
quelle
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
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
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
PRESHUTDOWN
oderSHUTDOWN
Phasen eingebunden sind. Ab den DokumentenPRESHUTDOWN
, von denen ich annehme , dass sie verwendet werden,Je nach Bedarf gehe ich davon aus, dass SQL Server so funktioniert.
quelle
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.
quelle
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.
quelle