Freigeben über


MSSQLSERVER_832

Gilt für: SQL Server

Details

attribute Wert
Produktname SQL Server
Ereignis-ID 832
Ereignisquelle MSSQLSERVER
Komponente SQLEngine
Symbolischer Name B_CONSTPAGECHANGED
Meldungstext Eine Seite, die konstant sein sollte, hat sich geändert (erwartete Prüfsumme: erwarteter Wert, tatsächliche Prüfsumme: <ist-Wert>, Datenbankdbid<>, Datei '<Dateiname>', Seitenseite<).>>< Dies weist normalerweise auf einen Arbeitsspeicherfehler oder auf Schäden an der Hardware oder dem Betriebssystem hin.

Erklärung

Ein externer Faktor hat dazu geführt, dass eine Datenbankseite außerhalb des normalen SQL Server-Modulcodes geändert wurde, der zum Ändern von Datenbankseiten verwendet wird. Die Bedingungen können wie folgt lauten:

  • Ein Thread, der im SQL Server-Prozess ausgeführt wird, der falsche Schreibvorgänge auf einer Datenbankseite ausführt. Dieser wird häufig als „Scribbler“ bezeichnet.
  • Ein Problem mit der Hardware oder dem Betriebssystem, bei dem der Arbeitsspeicher, der die Datenbankseite stützt, nicht korrekt geändert wurde oder beschädigt ist.

Wenn SQL Server diesen Verhaltensfehler erkennt, wird 832 ausgelöst.

Aktion des Benutzers

Sie haben die folgenden Möglichkeiten, um die Ursache des Fehlers zu ermitteln:

  • Sie sollten normale Hardware- oder Systemüberprüfungen durchführen, um herauszufinden, ob ein Problem mit dem Arbeitsspeicher oder der CPU oder ein anderes Hardwareproblem vorliegt. Stellen Sie sicher, dass Sie über alle Systemtreiber verfügen und Ihr Betriebssystem und Ihre Hardware auf dem neusten Stand sind. Führen Sie ggf. eine beliebige Diagnose eines Hardwareherstellers einschließlich speicherbezogener Tests durch.
  • Bewerten Sie, welche "externen" DLLs in SQL Server geladen werden können, die zu diesem Problem führen können, einschließlich erweiterter gespeicherter Prozeduren, COM-Objekte oder anderer DLLs, die möglicherweise falsch den SQL Server-Speicher ändern, der für Datenbankseiten reserviert ist.

Wenn dieser Fehler angezeigt wird, sollten Sie sofort erwägen, mit der Datenbank auszuführen DBCC CHECKDB , auf die in der <Fehlermeldung von "dbid> " verwiesen wird.

Weitere Informationen

Dieser Fehler wird von dem Hintergrundtask erkannt, der häufig als „LazyWriter“ bezeichnet wird. (Der „Befehl“ für diesen Task lautet LAZY WRITER.) Daher wird dieser Fehler nicht an eine Clientanwendung zurückgegeben. Der Fehler wird in das Windows-Anwendungsereignisprotokoll als EventID=832 geschrieben.

Nur Seiten, die derzeit nicht im Cache geändert werden, werden geprüft. Der Grund hierfür ist, dass die Meldung den Begriff „konstant“ verwendet, da die Seite nie geändert wurde, nachdem sie vom Datenträger gelesen wurde. Außerdem wurde die Seite fehlerfrei vom Datenträger gelesen, da sie über einen Prüfsummenwert auf der Seite verfügt und kein Prüfsummenfehler aufgetreten ist (Meldung 824). Die Seite kann jedoch zu einem bestimmten Zeitpunkt nach dem Auftreten dieses Fehlers geändert und dann mit der falschen Änderung auf den Datenträger geschrieben werden. Wenn dieser Fehler auftritt, wird basierend auf allen Änderungen eine neue Prüfsumme berechnet, bevor sie auf den Datenträger geschrieben wird. Deshalb kann die Seite zwar auf dem Datenträger beschädigt worden sein, aber ein anschließender Lesevorgang vom Datenträger löst möglicherweise keinen Prüfsummenfehler aus. Es ist wichtig, DBCC CHECKDB für jede Datenbank auszuführen, auf die dieser Fehler verweist.

Es ist möglich, dass auch der Befehl DBCC CHECKDB für eine Seite in diesem Zustand keinen Fehler meldet, nachdem dieser auf den Datenträger geschrieben wurde. Der Grund hierfür ist, dass sich die falsche Änderung an Stellen auf der Seite befinden kann, die weder Daten noch wichtige Informationen zur Seiten- oder Zeilenstruktur enthalten. Alternativ kann es sich auch um Änderungen an Daten handelt, die CHECKDB nicht erkennen kann.

Weitere Details und Informationen zur Meldung 832 finden Sie im Whitepaper E/A-Grundlagen für SQL Server, Kapitel 2.