MSSQLSERVER_7105
Gilt für: SQL Server
Details
attribute | Wert |
---|---|
Produktname | SQL Server |
Ereignis-ID | 7105 |
Ereignisquelle | MSSQLSERVER |
Komponente | SQLEngine |
Symbolischer Name | TXT_PGNOTEXIST |
Meldungstext | Die Datenbank-ID '%d', Seite '%S_PGID', Slot '%d' für den LOB-Datentypknoten ist nicht vorhanden. Dies ist gewöhnlich auf Transaktionen zurückzuführen, die Daten, für die kein Commit ausgeführt wurde, auf einer Datenseite lesen können. Führen Sie DBCC CHECKTABLE aus. |
Erklärung
Bei einer Abfrage wird möglicherweise die Meldung 7105 angezeigt, wenn auf LOB-Daten (Large Object), auf die in einer Zeile einer Datenbankseite verwiesen wird, nicht zugegriffen werden kann.
Da dieser Fehler einen Schweregrad von 22 aufweist, wird die Verbindung vom Server beendet. Diese Fehlermeldung wird auch mit EventID=7105 in die SQL-ERRORLOG-Datei und das Windows-Anwendungsereignisprotokoll geschrieben.
Mögliche Ursachen
Dieser Fehler kann aus einem der folgenden Gründe auftreten:
- Auf einer Datenbankseite oder innerhalb der LOB-Seitenstrukturen, auf die die Datenbankseite verweist, liegt ein Problem mit Datenbankbeschädigungen vor.
- Die Abfrage, bei der der Fehler auftritt, verwendet den Abfragehinweis
READ UNCOMMITTED ISOLATION LEVEL
oderNOLOCK
. - Innerhalb des SQL Server-Moduls ist ein Problem vorhanden, das dazu führt, dass die Abfrage mit diesem Fehler fehlschlägt.
Sehen Sie sich den Abschnitt zur Fehlerbehebung sowie den Abschnitt Weitere Informationen an, um herauszufinden, was die Ursache für Ihr spezifisches Problem ist, und eine geeignete Lösung zu finden.
Aktion des Benutzers
Wie in der Meldung angegeben, sollten Sie in einem ersten Schritt
DBCC CHECKDB
für die Datenbank oderDBCC CHECKTABLE
für die Tabelle ausführen, in der das Problem aufgetreten ist.Die Datenbank-ID ist in der Meldung angegeben.
Wenn Sie die genaue betroffene Tabelle ermitteln möchten, ohne
DBCC CHECKDB
auszuführen, müssen Sie herausfinden, auf welche Tabellen die Abfrage zugegriffen hat, bei der der Fehler aufgetreten ist. Eine mögliche Methode ist eine Ablaufverfolgung für die Abfrage mit SQL Profiler. In SQL Server 2008 (10.0.x) und SQL Server 2008 (10.0.x) R2 können Sie die Abfrage jedoch möglicherweise mithilfe der sitzung system_health erweiterten Ereignisse finden. Weitere Informationen zur Verwendung der system_health-Sitzung finden Sie unter diesem Link: Verwenden der system_health-Sitzung.Wie bei jedem Konsistenzproblem bei Datenbanken können Sie diese Fehler beheben, indem Sie eine Wiederherstellung mit einer als fehlerfrei bekannten Sicherung durchführen, die dieses Problem nicht enthält.
Wenn Sie jedoch keine Wiederherstellung aus einer Sicherung durchführen können, befolgen Sie die Empfehlungen für
DBCC CHECKDB
oderDBCC CHECKTABLE
, um diese Fehler zu beheben. Dies kann möglicherweise zu Datenverlust führen. Weitere Informationen zur Verwendung von CHECKDB und Ursachen von Datenbankbeschädigungsproblemen finden Sie im Artikel: Beheben von Datenbankkonsistenzfehlern, die von DBCC CHECKDB gemeldet wurden.
Es ist möglich, dass dieser Fehler aufgetreten ist, weil bei der Abfrage, die auf die Tabelle zugreift, eine Isolationsstufe von
READ UNCOMMITTED
oder der AbfragehinweisNOLOCK
(auch als „Dirty Read“ bezeichnet) verwendet wurde.Wenn bei
DBCC CHECKDB
oderDBCC CHECKTABLE
keine Fehler im Zusammenhang mit dieser Tabelle und den LOB-Daten angezeigt werden, ist die wahrscheinlichste Ursache die Verwendung eines Dirty Read. Wenn dies bei Ihrer Anwendung der Fall ist, müssen Sie entweder die Verwendung eines Dirty Read vermeiden oder die Abfrage erneut ausführen.Wenn Sie feststellen, dass dies die Ursache für den Fehler ist, liegt bei der Datenbank kein tatsächliches Konsistenzproblem vor.
Weitere Informationen
Wenn eine Datenbankbeschädigung die Ursache für dieses Problem ist, sollten DBCC CHECKDB
und/oder DBCC CHECKTABLE
Fehler melden. Diese Befehle geben jedoch nicht die Meldung 7105 zurück. Die bei CHECKDB angezeigten Fehler hängen davon ab, was genau an dem Verweis auf LOB-Strukturen oder den LOB-Strukturen selbst beschädigt ist.
Wenn die Zeile der Datenbankseite nicht ordnungsgemäß auf eine gültige LOB-Seite verweist, werden möglicherweise Fehler wie die folgenden angezeigt:
Meldung 8929, Ebene 16, Status 1, Zeile 1
Objekt-ID 2137058649, Index-ID 0, Partitions-ID 72057594038910976, Alloc-Einheiten-ID 72057594039828480 (Typ In-Row-Daten): Fehler in Off-Row-Daten mit ID 131203072 im Besitz des durch RID = identifizierten Datensatzes (1:179:1)
Meldung 8964, Ebene 16, Status 1, Zeile 1
Tabellenfehler: Objekt-ID 2137058649, Index-ID 0, Partitions-ID 72057594038910976, Alloc-Einheiten-ID 72057594039894016 (Typ LOB-Daten). Auf den Datenknoten außerhalb von Zeilen auf Seite (1:177), Slot 1, Text-ID 131203072 wird nicht verwiesen.
Meldung 8965, Ebene 16, Status 1, Zeile 1
Tabellenfehler: Objekt-ID 2137058649, Index-ID 0, Partitions-ID 72057594038910976, Alloc-Einheiten-ID 72057594039894016 (Typ LOB-Daten). Auf den Datenknoten außerhalb von Zeilen auf Seite (255:177), Slot 1, Text-ID 131203072 wird von Seite (1:179), Slot 1 verwiesen, er wurde jedoch im Scan nicht betrachtet.Verschiedene Szenarios für das Problem können zu verschiedenen Fehlerkombinationen führen. In diesem Beispiel:
Die Datenbankseite 1:179, Slot 1 verweist auf eine LOB-Seite, die keine gültige Seite in der Datenbank ist (Seite 255:177). Die Seite (1:177) ist eine gültige LOB-Seite, auf die jedoch nie von einer Datenbankseite verwiesen wurde. In diesem Fall besteht das Problem daher darin, dass die Zeile in Slot 1 auf Seite 1:179 auf Seite 255:177 statt 1:177 verweist.
Wenn Sie herausfinden möchten, ob
DBCC CHECKDB
-Fehler mit LOB-Seitenproblemen zusammenhängen, ist es wichtig, nach den Begriffen „Daten außerhalb von Zeilen“ und „LOB-Daten-Typ“ zu suchen.Die Meldung 8929 bezieht sich auf einen Fehler im Zusammenhang mit der Datenbankseite, die auf die LOB-Seiten verweist.
Die Meldung 8964 bezieht sich auf einen Fehler, der angibt, dass keine Datenbankseiten auf eine bestimmte LOB-Seite verweisen.
Die Meldung 8965 bezieht sich auf einen Fehler, der angibt, dass von einer Datenbankseite auf eine bestimmte LOB-Seite verwiesen wurde, diese jedoch nicht als gültige Seite vorhanden ist.In vielen Fällen, in denen diese Arten von Fehlern auftreten, führt die Reparatur dazu, dass die Zeilen, die auf LOB-Daten verweisen, sowie die LOB-Daten selbst gelöscht werden. Der Reparaturalgorithmus versucht, nur LOB-Fragmente zu entfernen, die sich auf die betreffenden Datenbankzeilen auswirken. Dies kann jedoch nicht in allen Fällen garantiert werden, je nachdem, was in der „LOB-Baumstruktur“ beschädigt ist.
Im hier gezeigten Beispiel sehen die von CHECKTABLE mit
REPAIR_ALLOW_DATA_LOSS
zurückgegeben Meldungen wie folgt aus:Reparatur: Gelöschter Datensatz für Objekt-ID 2137058649, Index-ID 0, Partitions-ID 72057594038910976, Alloc-Einheiten-ID 72057594039828480 (Typ in Zeilendaten), auf Seite (1:179), Steckplatz 1. Die Indizes werden neu erstellt.
Reparatur: Gelöschte Datenspalte mit ID 131203072, für Objekt-ID 2137058649, Index-ID 0, Partitions-ID 72057594038910976, Alloc-Einheiten-ID 72057594039894016 (Typ LOB-Daten) auf Seite (1:177), Steckplatz 1.
Meldung 8929, Ebene 16, Status 1, Zeile 1
Objekt-ID 2137058649, Index-ID 0, Partitions-ID 72057594038910976, Alloc-Einheiten-ID 72057594039828480 (Typ In-Row-Daten): Fehler in Off-Row-Daten mit ID 131203072 im Besitz des durch RID = identifizierten Datensatzes (1:179:1)
Der Fehler wurde behoben.
Meldung 8964, Ebene 16, Status 1, Zeile 1
Tabellenfehler: Objekt-ID 2137058649, Index-ID 0, Partitions-ID 72057594038910976, Alloc-Einheiten-ID 72057594039894016 (Typ LOB-Daten). Auf den Datenknoten außerhalb von Zeilen auf Seite (1:177), Slot 1, Text-ID 131203072 wird nicht verwiesen.
Der Fehler wurde behoben.
Meldung 8965, Ebene 16, Status 1, Zeile 1
Tabellenfehler: Objekt-ID 2137058649, Index-ID 0, Partitions-ID 72057594038910976, Alloc-Einheiten-ID 72057594039894016 (Typ LOB-Daten). Auf den Datenknoten außerhalb von Zeilen auf Seite (255:177), Slot 1, Text-ID 131203072 wird von Seite (1:179), Slot 1 verwiesen, er wurde jedoch im Scan nicht betrachtet.
Dieser Fehler konnte nicht behoben werden.Die letzte Meldung, derzufolge der Fehler nicht behoben werden konnte, ist irreführend. Der Fehler wurde behoben, da die Datenbankseiten-Zeile, in der auf die ungültige Seite (255:177) verwiesen wurde, gelöscht wurde.