Update: Wenn Sie den NOLOCK-Hinweis oder die READ UNCOMMITTED-Isolationsstufe verwenden, kann eine Abfrage mit Verkaufsassertion fehlschlagen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 827714 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Sie eine Abfrage, Ausführen mit der NOLOCK-Hinweis oder die Isolationsstufe der Transaktion READ-UNCOMMITTED festgelegt, und löschen gleichzeitiger Benutzer ist von Zeilen aus der Tabelle, die von der Abfrage aufgerufen wird, die Abfrage kann mit einem Verkaufsassertion fehlschlagen, und möglicherweise eine Assertion-Fehlermeldung, die der folgenden ähnelt:

Msg 3624
Speicherort: Drive: \sql\ntdbms\storeng\drs\include\record.inl:1447
Ausdruck: M_SizeRec > 0 && M_SizeRec < = MAXDATAROW
SPID: 63
Prozess-ID: 1776
-oder-

Msg 3624
Speicherort: recbase.cpp:1378
M_offBeginVar Ausdruck: < M_SizeRec
SPID: 55
Prozess-ID: 1776

Ursache

Wenn die Microsoft SQL Server das Datenbankmodul versucht, nach einer Zeile suchen, wenn eine Abfrage der NOLOCK-Hinweis oder die READ UNCOMMITTED-Isolationsstufe verwendet, kann die Zielzeile gelöscht werden. Bevor Sie dieses Update installieren, SQL Server 2000 möglicherweise falsch behandelt diese Situation und die Abfrage kann ausfallen, mit der Assertion, die im Abschnitt "Problembeschreibung" dieses Artikels genannt wird.

Hinweis: Die READ UNCOMMITTED-Isolationsstufe wird auch als "dirty Read." bezeichnet.

Lösung

Informationen zu Service Packs

Installieren Sie das neueste Service Pack für Microsoft SQL Server 2000, um dieses Problem zu beheben. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
290211So erhalten Sie das neueste Service Pack für SQL Server 2000

Hotfix-Informationen

Die englische Version dieses Hotfixes weist die Dateiattribute (oder höher Dateiattribute), die in der folgenden Tabelle aufgelistet werden. Die Datums- und Uhrzeitangaben für diese Dateien werden in Coordinated Universal Time aufgeführt (UTC). Wenn Sie sich die Dateiinformationen ansehen, werden diese Angaben in die lokale Zeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu ermitteln verwenden Sie die Registerkarte Zeitzone des Tools ? Datum und Uhrzeit in der Systemsteuerung.
   Date         Time   Version        Size       File name
   ------------------------------------------------------------------
   31-May-2003  06:15  2000.80.818.0     78,400  Console.exe
   24-Jun-2003  12:31  2000.80.818.0     33,340  Dbmslpcn.dll
   24-Apr-2003  13:42                   786,432  Distmdl.ldf
   24-Apr-2003  13:42                 2,359,296  Distmdl.mdf
   29-Jan-2003  13:25                       180  Drop_repl_hotfix.sql
   26-Aug-2003  07:46  2000.80.854.0    528,960  Dtspump.dll
   23-Jun-2003  10:10  2000.80.837.0  1,557,052  Dtsui.dll
   23-Jun-2003  10:10  2000.80.837.0    639,552  Dtswiz.dll
   23-Apr-2003  14:21                   747,927  Instdist.sql
   02-May-2003  13:26                     1,581  Inst_repl_hotfix.sql
   07-Feb-2003  18:10  2000.80.765.0     90,692  Msgprox.dll
   31-Mar-2003  13:37                     1,873  Odsole.sql
   04-Apr-2003  13:16  2000.80.800.0     62,024  Odsole70.dll
   07-May-2003  08:11  2000.80.819.0     25,144  Opends60.dll
   02-Apr-2003  09:18  2000.80.796.0     57,904  Osql.exe
   02-Apr-2003  10:45  2000.80.797.0    279,104  Pfutil80.dll
   04-Aug-2003  05:47                   550,780  Procsyst.sql
   22-May-2003  10:27                    19,195  Qfe469571.sql
   11-Jul-2003  04:34                 1,084,147  Replmerg.sql
   04-Apr-2003  09:23  2000.80.798.0    221,768  Replprov.dll
   07-Feb-2003  18:10  2000.80.765.0    307,784  Replrec.dll
   13-Aug-2003  03:58                 1,086,797  Replsys.sql
   13-Aug-2003  03:58                   986,603  Repltran.sql
   29-Jul-2003  07:43  2000.80.819.0    492,096  Semobj.dll
   31-May-2003  05:57  2000.80.818.0    172,032  Semobj.rll
   05-Aug-2003  08:36                   127,884  Sp3_serv_uni.sql
   31-May-2003  12:31  2000.80.818.0  4,215,360  Sqldmo.dll
   07-Apr-2003  05:14                    25,172  Sqldumper.exe
   19-Mar-2003  05:50  2000.80.789.0     28,672  Sqlevn70.rll
   01-Jul-2003  11:48  2000.80.834.0    180,736  Sqlmap70.dll
   02-Sep-2003  14:26  2000.80.857.0    188,992  Sqlmmc.dll
   02-Sep-2003  10:33  2000.80.857.0    479,232  Sqlmmc.rll
   07-Feb-2003  18:10  2000.80.765.0     57,920  Sqlrepss.dll
   02-Sep-2003  14:27  2000.80.857.0  7,598,161  Sqlservr.exe
   25-Jul-2003  09:14  2000.80.845.0    590,396  Sqlsort.dll
   07-Feb-2003  18:10  2000.80.765.0     45,644  Sqlvdi.dll
   24-Jun-2003  12:31  2000.80.818.0     33,340  Ssmslpcn.dll
   31-May-2003  12:31  2000.80.818.0     82,492  Ssnetlib.dll
   31-May-2003  12:31  2000.80.818.0     25,148  Ssnmpn70.dll
   31-May-2003  12:31  2000.80.818.0    158,240  Svrnetcn.dll
   31-May-2003  06:29  2000.80.818.0     76,416  Svrnetcn.exe
   30-Apr-2003  11:22  2000.80.816.0     45,132  Ums.dll
   01-Jul-2003  11:49  2000.80.834.0     98,816  Xpweb70.dll
   23-Jun-2003  10:10  2000.80.837.0  1,557,052  Dtsui.dll
   23-Jun-2003  10:10  2000.80.837.0    639,552  Dtswiz.dll
   02-Apr-2003  09:18  2000.80.796.0     57,904  Osql.exe
   02-Apr-2003  10:45  2000.80.797.0    279,104  Pfutil80.dll
   29-Jul-2003  07:43  2000.80.819.0    492,096  Semobj.dll
   31-May-2003  05:57  2000.80.818.0    172,032  Semobj.rll
   31-May-2003  12:31  2000.80.818.0  4,215,360  Sqldmo.dll
   07-Apr-2003  05:14                    25,172  Sqldumper.exe
   02-Sep-2003  14:26  2000.80.857.0    188,992  Sqlmmc.dll
   02-Sep-2003  10:33  2000.80.857.0    479,232  Sqlmmc.rll
   31-May-2003  12:31  2000.80.818.0    158,240  Svrnetcn.dll
   31-May-2003  06:29  2000.80.818.0     76,416  Svrnetcn.exe

				
Hinweis: Aufgrund von Dateiabhängigkeiten enthält das aktuellste Update oder Feature, das diese Dateien enthält, möglicherweise auch weitere Dateien.

Abhilfe

Um dieses Problem zu vermeiden, verwenden Sie den NOLOCK-Hinweis oder die Transaktionsisolationsstufe READ UNCOMITTED nicht oder führen Sie die Abfrage nicht aus, wenn die betroffenen Zeilen von anderen Benutzern gelöscht werden.

Status

Microsoft hat bestätigt, dass dies ein Problem in Microsoft-Produkten handelt, die im Abschnitt "Gilt für" aufgeführt sind. Dieses Problem wurde erstmals in Microsoft SQL Server 2000 Service Pack 4.

Weitere Informationen

Nachdem Sie das Update, das im Abschnitt "Lösung" dieses Artikels erwähnte installieren und anschließend versuchen, die gelöschten Datensätze zugreifen, erhalten Sie die folgenden Fehlermeldung instead of ein Verkaufsassertion:

Msg 601
Scan mit NOLOCK wegen Datenverschiebung konnte nicht fortgesetzt werden.
In einigen Situationen wird vom QP kann intern 601 Fehler behandeln und kann automatisch überspringen, die Zeile, die zu den 601 Fehler geführt hat. Jedoch in anderen Fällen dieses Verhalten kann nicht ausgeführt, und der Abfrageprozessor muss die Abfrage mit einem Fehler 601 fehl. Anwendungen, die den NOLOCK-Hinweis oder die READ UNCOMMITTED-Isolationsstufe verwenden müssen immer Konto für einen möglichen Fehler 601 als Teil der typischen Ergebnisverarbeitung und müssen die entsprechenden Aktion in SQL Server Books Online unter der Beschreibung für "Fehler 601." beschriebene nutzen Weitere Informationen über Fehler 601 finden Sie auf dem folgenden Thema in der Onlinedokumentation zu SQL Server 2000:
http://msdn2.microsoft.com/en-us/library/aa258726(SQL.80).aspx
Bevor Sie diesen Hotfix installieren, die falsche gruppierten Indexzeile möglicherweise an der Abfrageprozessor zurückgeschickt wurden. Dieses Verhalten nicht zuvor ein Assertionsfehler führen, aber Sie können Fehler 601 in dieser Situation sehen, mit dem Hotfix installiert. Diese Abweichungen sind ein Ergebnis der Verwendung der NOLOCK-Hinweis oder die READ UNCOMMITTED Isolationsstufe während Benutzer aktualisieren oder Löschen von Daten zur gleichen Zeit.

Tritt das Problem, das im Abschnitt "Problembeschreibung" dieses Artikels genannt wird, können Sie feststellen, ein Stapelabbild im SQL Server-Fehlerprotokoll generiert wird und Stack Dump von der Assertion-Ausdruck gefolgt. Der generierte Stack Dump möglicherweise ähnlich der folgenden kurzen Stack Dump:
 Short Stack Dump
 00871255 Module(sqlservr+00471255) (CStackDump::GetContextAndDump+0000002E)
 00872C81 Module(sqlservr+00472C81) (stackTrace+0000021D)
 009286FA Module(sqlservr+005286FA) (utassert_fail+000002E3)
 007F12E8 Module(sqlservr+003F12E8) (RecBase::ReSizeVar+00000069)
 00404DD9 Module(sqlservr+00004DD9) (RecBase::Resize+0000005B)
 00429024 Module(sqlservr+00029024) (RowsetSS::GetColumns+000000B6)
 0042AE29 Module(sqlservr+0002AE29) (RowsetSS::GetData+00000071)
 00528CFF Module(sqlservr+00128CFF) (CValSSTable::GetDataWithBuffer+00000031)
 00528CD3 Module(sqlservr+00128CD3) (GetDataWithBuffer+00000028)
 00419B19 Module(sqlservr+00019B19) (CEs::GeneralEval4+00000075)
 0042C37D Module(sqlservr+0002C37D) (CQScanHashMatch::Iterate+000015B4)
 0042D80E Module(sqlservr+0002D80E) (CQScanHashMatch::Open+00000065)
 0043D029 Module(sqlservr+0003D029) (CQScanNLJoin::Open+00000014)
 0042970E Module(sqlservr+0002970E) (CQScan::Open+0000001C)
 004297EB Module(sqlservr+000297EB) (CQScanStreamAggregate::Open+0000000E)
 0041DB69 Module(sqlservr+0001DB69) (CQueryScan::Startup+0000010D)
 0041955F Module(sqlservr+0001955F) (CStmtQuery::ErsqExecuteQuery+0000026B)
 00428562 Module(sqlservr+00028562) (CStmtSelect::XretExecute+00000229)
 00410855 Module(sqlservr+00010855) (CMsqlExecContext::ExecuteStmts+000003DD)
 0040FEB4 Module(sqlservr+0000FEB4) (CMsqlExecContext::Execute+000001B6)
 0041164F Module(sqlservr+0001164F) (CSQLSource::Execute+00000331)
 004BA63E Module(sqlservr+000BA63E) (CStmtExec::XretLocalExec+0000014D Line 4058+0000002F)
 004BA4DA Module(sqlservr+000BA4DA) (CStmtExec::XretExecute+0000031A Line 3990+00000017)
 00410855 Module(sqlservr+00010855) (CMsqlExecContext::ExecuteStmts+000003DD)
 0040FEB4 Module(sqlservr+0000FEB4) (CMsqlExecContext::Execute+000001B6)
 0041164F Module(sqlservr+0001164F) (CSQLSource::Execute+00000331)
 0053EC96 Module(sqlservr+0013EC96) (language_exec+000003E1)
 0041226E Module(sqlservr+0001226E) (process_commands+000000EC)
 41073379 Module(UMS+00003379) (ProcessWorkRequests+0000024A)
 41073071 Module(UMS+00003071) (ThreadStartRoutine+000000BD)
 7800C9EB Module(MSVCRT+0000C9EB) (exception::exception+0000000E)
 77E8B2D8 Module(KERNEL32+0000B2D8) (lstrcmpiW+000000B7)

2003-08-19 10:56:52.97 spid62    SQL Server Assertion: File: <recbase.cpp>, line=1378
Failed Assertion = 'm_offBeginVar < m_SizeRec'.


Hinweis: Einige Teile der Stack Dumpinformationen und der Assertion-Ausdruck können aufgrund der folgenden Gründe abweichen:
  • Abfrage-Ausführungsplan, der von der Abfrageprozessor, zum Ausführen der Abfrage verwendet wird unterscheidet.
  • Der Unterschied in der Zeit die Zeile löschen und die Abfrageauswertung der.

Wenn Bedingung, die in diesem Artikel erwähnten nicht gilt, die Assertion, bei der Sie in der Datei recbase.cpp aufgetreten ist möglicherweise einem anderen Grund vorgenommen.

Weitere Informationen zu Assertion-Fehler, die von recbase.cpp gemeldet werden, finden Sie im folgenden Artikel der Microsoft Knowledge Base:
828337Eine Assertion in der Datei recbase.cpp oder Record.inl-Datei auftreten, wenn eine Operation für eine Instanz von SQL Server ausgeführt wird

Eigenschaften

Artikel-ID: 827714 - Geändert am: Freitag, 2. November 2007 - Version: 4.5
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Enterprise Edition 64-bit
Keywords: 
kbmt kbhotfixserver kbqfe kbquery kberrmsg kbtsql kbsqlserv2000presp4fix kbfix kbbug KB827714 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 827714
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com