Fehler: #50003826 (SQL-Hotfix)
Microsoft stellt Fixes für Microsoft SQL Server 2008 als eine herunterladbare Datei bereit. Da die Fixes kumulativ sind, enthält jede neue Version alle Hotfixes und Sicherheitsfixes, die in der vorherigen Version der Korrektur für SQL Server 2008 enthalten waren.
Symptome
In SQL Server 2008 führen Sie eine Abfrage aus, die Daten in eine temporäre Tabelle einfügt. Die INSERT-Anweisung enthält eine Unterabfrage, die auf dieselbe temporäre Tabelle verweist. Wenn Sie die Abfrage ausführen, wird möglicherweise eine Fehlermeldung etwa folgenden Inhalts angezeigt:
Hinweis
Meldung 605, Ebene 21, Status 3, Zeile 1
Fehler beim Abrufen der logischen Seite (1:225) in Datenbank 2. Sie gehört zur Zuordnungseinheit 281474980315136 nicht zu 504403158513025024.
Wenn Sie die Abfrage erneut ausführen, wird eine Fehlermeldung angezeigt, die etwa so aussieht:
Hinweis
- Meldung 824, Ebene 24, Status 2, Zeile 1
- SQL Server haben einen auf logischer Konsistenz basierenden E/A-Fehler festgestellt: falsche Prüfsumme (erwartet: 0x50758180; tatsächlich: 0x15658bfc). Es trat während eines Lesevorgangs von Seite (1:336) in der Datenbank-ID 2 bei Offset 0x000000002a0000 in der Datei "C:\Program Files\Microsoft SQL Server\MSSQL10" auf. SQL2008\MSSQL\DATA\tempdb.mdf". Zusätzliche Meldungen im SQL Server Fehlerprotokoll oder Systemereignisprotokoll enthalten möglicherweise weitere Details. Dies ist ein schwerwiegender Fehlerzustand, der die Datenbankintegrität bedroht und sofort behoben werden muss. Führen Sie eine vollständige Datenbankkonsistenzprüfung (DBCC CHECKDB) aus. Dieser Fehler kann durch viele Faktoren verursacht werden. Weitere Informationen finden Sie in der SQL Server-Onlinedokumentation.
In einigen Fällen wird möglicherweise auch eine Fehlermeldung etwa folgenden Inhalts angezeigt:
Hinweis
Meldung 601, Ebene 12, Status 3,Verfahrensname, Zeilennummer
Der Scan mit NOLOCK konnte aufgrund von Datenverschiebung nicht fortgesetzt werden.
Ein mögliches Abfragekonstrukt, das diese Fehler erzeugen kann, sieht wie folgt aus:
insert #table1
select s.col1, s.col2
from #table2 s inner loop join #table1 t
on s.col3 = t.col3
Lösung
Die Korrektur für dieses Problem wurde erstmals im kumulativen Update 3 veröffentlicht. Weitere Informationen zum Bezug dieses kumulativen Updatepakets für SQL Server 2008 finden Sie im folgenden Artikel der Microsoft Knowledge Base:
960484 Kumulatives Updatepaket 3 für SQL Server 2008Hinweis Da die Builds kumulativ sind, enthält jede neue Fixversion alle Hotfixes und Sicherheitsfixes, die in der vorherigen Fixversion von SQL Server 2008 enthalten waren. Es wird empfohlen, die Anwendung des neuesten Fixrelease in Betracht zu ziehen, das diesen Hotfix enthält. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
956909 Die SQL Server 2008-Builds, die nach der Veröffentlichung von SQL Server 2008 veröffentlicht wurdenNachdem Sie dieses kumulative Updatepaket installiert haben, müssen Sie das Ablaufverfolgungsflag 4135 aktivieren. Dazu können Sie den Startparameter -T4135 hinzufügen. Sie können auch die Anweisung dbcc traceon(4135) für eine bestimmte Sitzung verwenden.
Problemumgehung
Um dieses Problem zu umgehen, fügen Sie der temporären Tabelle eine Spalte hinzu, die sowohl über einen gruppierten Primärschlüssel als auch über eine Identitätseigenschaft verfügt. Führen Sie z. B. die folgende Anweisung aus, um die temporäre Tabelle zu ändern:
ALTER TABLE #TempTable
ADD id integer IDENTITY(1,1) CONSTRAINT id PRIMARY KEY CLUSTERED
Status
Microsoft hat bestätigt, dass dies ein Problem bei den Microsoft-Produkten ist, die im Abschnitt „Gilt für“ aufgeführt sind.
Weitere Informationen
Obwohl die Fehlermeldung 824 oder 605 angezeigt wird, wird die Datenbank nicht beschädigt. Außerdem verweisen diese Fehlermeldungen auf Seiten aus der Datenbank "tempdb".
Weitere Informationen dazu, welche Dateien geändert werden, sowie zu den Voraussetzungen für die Anwendung des kumulativen Updatepakets, das den in diesem Microsoft Knowledge Base-Artikel beschriebenen Hotfix enthält, finden Sie im folgenden Artikel der Microsoft Knowledge Base:
960484 Kumulatives Updatepaket 3 für SQL Server 2008
SQL Server 2008 R2 BPA-Informationen
Der SQL Server 2008 R2 Best Practice Analyzer (SQL Server 2008 R2 BPA) stellt eine Regel zum Erkennen von Situationen bereit, in denen das kumulative Update oder das Ablaufverfolgungsflag nicht aktiviert ist, um dieses Problem zu beheben. Die BPA für SQL Server 2008 R2 unterstützt sowohl SQL Server 2008 als auch SQL Server 2008 R2.
Wenn Sie das BPA-Tool ausführen und die Warnung "Datenbank-Engine – tempdb-Fehlerkorrektur oder Ablaufverfolgungsflag fehlt" angezeigt wird, müssen Sie die Version von SQL Server und die Ablaufverfolgungsflags überprüfen, die konfiguriert sind, um diesen Fix zu aktivieren.
Referenzmaterial
| Regelsoftware | Regeltitel | Regelbezeichner |
|---|---|---|
| SQL Server 2008 R2 BPA-Regel | tempdb-Fehler Flag für Fix oder Trace fehlt | RID3808 |
Hinweis: Sie können das Ablaufverfolgungsflag 4135 oder das Ablaufverfolgungsflag 4199 aktivieren, um diesen Fix zu aktivieren. Das Ablaufverfolgungsflag 4135 wurde im kumulativen Updatepaket 3 für SQL Server 2008 eingeführt. Das Ablaufverfolgungsflag 4135 ist auch in SQL Server 2008 Service Pack 1, SQL Server 2008 Service Pack 2 und SQL Server 2008 R2 verfügbar. Das Ablaufverfolgungsflag 4199 wurde im kumulativen Updatepaket 7 für SQL Server 2008, im kumulativen Updatepaket 7 für SQL Server 2008 Service Pack 1 und im kumulativen Updatepaket 1 für SQL Server 2008 R2 eingeführt. Weitere Informationen zum Ablaufverfolgungsflag 4199 finden Sie im folgenden Artikel der Microsoft Knowledge Base:
974006 Ablaufverfolgungsflag 4199 wird hinzugefügt, um mehrere Änderungen am Abfrageoptimierer zu steuern, die zuvor unter mehreren Ablaufverfolgungsflags vorgenommen wurden. Da die Behebung dieses Problems eine Kombination aus einem bestimmten Hotfixbuild und einem Ablaufverfolgungsflag umfasst, um den Fix zu aktivieren, schließen wir die folgende Tabelle ein, um die verschiedenen Szenarien und die empfohlenen Maßnahmen für jedes Szenario zu zeigen.
Weitere Informationen zu den neuesten SQL Server Builds finden Sie im folgenden Artikel der Microsoft Knowledge Base:
957826 Wo Sie Informationen zu den neuesten SQL Server-Builds finden
Referenzmaterial
Weitere Informationen zur Liste der Builds, die nach der Veröffentlichung von SQL Server 2008 verfügbar sind, finden Sie im folgenden Artikel der Microsoft Knowledge Base:
956909 SQL Server 2008-Builds, die nach der Freigabe von SQL Server 2008 veröffentlicht wurden
Weitere Informationen zum inkrementellen Wartungsmodell für SQL Server finden Sie im folgenden Artikel der Microsoft Knowledge Base:
935897 Zur Bereitstellung von Hotfixes für gemeldete Probleme ist ein inkrementelles Wartungsmodell vom SQL Server-Team verfügbar
Weitere Informationen zum Benennungsschema für SQL Server-Updates finden Sie im folgenden Artikel der Microsoft Knowledge Base:
822499 Neues Benennungsschema für Softwareupdatepakete für Microsoft SQL Server Weitere Informationen zur Terminologie für Softwareupdates finden Sie im folgenden Artikel der Microsoft Knowledge Base:
824684 Erläuterung von Standardbegriffen bei Microsoft-Softwareupdates