KB960770 – BEHEBUNG: Sie erhalten Fehler 605 und 824, wenn Sie eine Abfrage ausführen, die Daten in eine temporäre Tabelle in SQL Server

Gilt für
SQL Server 2008 Service Pack 3

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.

Updateempfehlungen für SQL Server-Build und -Ablaufverfolgung

  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