Update: Rollback zu Sicherungspunkten verursacht, Assertion und Fehler

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: 294902
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
# Fehler: 352501 (SHILOH_bugs)
Problembeschreibung
Wenn ein Client zunächst Stamm reserviert und FirstIAM Seiten einer Tabelle innerhalb einer Benutzertransaktion und der Client verwendet den Befehl ROLLBACK, um Rollback zu einem Sicherungspunkt innerhalb der gleichen Transaktion, Fehlermeldung 3624 (Verkaufsassertion) auftreten, und möglicherweise die Clientverbindung zu SQL Server beendet. Die folgenden Fehlermeldung wird in Query Analyzer zurückgegeben, wenn Query Analyzer als Client verwendet wird:
Server: Msg 3624 auf 20, Status 1, Zeile 1

Speicherort: page.cpp:2777
Ausdruck: RowLength > = Offset + DeleteLength
SPID: 51
Prozess-ID: 596

Unterbrochene Verbindung
Darüber hinaus Fehler 3448, 3314 und Stapel Dumps in der SQL Server-Fehlerprotokolldatei auftreten.
Ursache
Tabellen werden als leere Tabellen in SQL Server 2000 erstellt. Dies bedeutet eine Tabelle erstellt wird werden keine Seiten für diese Tabelle reserviert. Seiten werden in eine Tabelle reserviert, wenn Daten in der Tabelle eingefügt werden.

Das folgende Szenario kann daher zu einer Assertion und Fehlermeldungen führen:
  • Eine Benutzertransaktion wird mit der BEGIN TRAN-Anweisung gestartet.
  • Eine Tabelle wird mit der CREATE TABLE-Anweisung erstellt.
  • Ein Sicherungspunkt ist innerhalb der Transaktion angegeben.
  • Data Manipulation Language (DML)-Anweisungen gelten für die Tabelle in das zweite Element der Liste, wodurch reservieren den ersten erwähnten Stamm und FirstIAM Seiten der Tabelle.
  • Der ROLLBACK-Befehl wird zum Rollback bis zum Sicherungspunkt in das dritte Element dieser Liste genannten verwendet.
  • Zusätzliche DML-Anweisungen werden auf die Tabelle in das zweite Element dieser Liste genannten angewendet.
Dieses Problem tritt, wenn die zusätzlichen DML-Anweisungen in das letzte Element der Liste oben erwähnten Seiten für die Tabelle nicht zuordnen. DML-Anweisungen werden nicht reservieren Seiten für die Tabelle da Informationen aus ein ungültiger SQL Server-Cache Grundlage Ihrer Meinung nach, dass Seiten in der Tabelle bereits zugewiesen wurden. SQL Server-Cache ist nicht bekannt, dass DML-Anweisungen, die Seiten für die Tabelle reserviert wurde ein Rollback wurden.
Lösung
Beziehen Sie das neueste Service Pack für SQL Server 2000, um dieses Problem zu beheben. Weitere Informationen finden Sie die folgende KB-Artikelnummer:
290211Info: Wie Sie das neueste SQL Server 2000 Service Pack erhalten
Status
Microsoft hat bestätigt, dass dies ein Problem in SQL Server 2000 ist. Dieses Problem wurde erstmals im SQL Server 2000 Service Pack 1.
Weitere Informationen
Ein Sicherungspunkt ist eine Markierung innerhalb einer Transaktion, die definiert einen Speicherort, an dem eine Transaktion zurückgeben kann, wenn Teil der Transaktion bedingt abgebrochen wird. Weitere Informationen zum Sicherungspunkt finden Sie das Thema "SAVE TRANSACTION" in SQL Server-Onlinedokumentation.

Zum Reproduzieren des Problems führen Sie das folgende Skript:
use mastergocreate database reprogouse reprogo-- use tempdbgobegin trangocreate table t1 (i1 int null)create table t2 (i2 int null)go-- SIMPLE WITH CHECK--create view vt as  select * from t1 where i1 between 1 and 10  with check optiongosave tran emptygoinsert vt values(1)	-- OKinsert vt values(5)	-- OKinsert vt values(10)	-- OKinsert vt values(0)	-- FAIL (<1)insert vt values(11)	-- FAIL (>10)insert vt values(null)	-- FAIL (null)gorollback tran emptygo-- WITH CHECK JOIN--create view vtJN as  select * from t1 inner join t2 on t1.i1 = t2.i2  with check optiongoinsert vtJN(i1) values(1)	-- FAIL (no match)insert t2(i2) values(1)		-- OK (prime row)insert vtJN(i1) values(1)	-- FAIL (no match)				
ist hier der kurze Stack Dump für diese Assertion auf Einzelhandel Build 8.00.194:
-------------------------------------------------------------------------------Short Stack Dump77F97AC6 Module(ntdll+00017AC6) (ZwGetContextThread+0000000B)0092569E Module(sqlservr+0052569E) (utassert_fail(enum UTASSERT_TYPE,char const *,char const *,int,char const *,...)+000002E9)00843FAC Module(sqlservr+00443FAC) (Page::ModifyRow(int,unsigned int,unsigned int,unsigned int,void const *,unsigned int,class XdesId const *)+000000D0)0042DEAB Module(sqlservr+0002DEAB) (PageRef::ModifyRow(struct BUF *,int,unsigned int,unsigned int,unsigned int,void const *,enum ETabStatus,int,class XDES *,void const *,unsigned int)+0000033A)0041CC24 Module(sqlservr+0001CC24) (AllocationReq::AllocatePages(void)+00000690)0041B777 Module(sqlservr+0001B777) (AllocationReq::Allocate(void)+00000078)0043EF30 Module(sqlservr+0003EF30) (AllocateHeapPage(struct CINSTABLE *)+0000007D)0080C76D Module(sqlservr+0040C76D) (AllocatePageForInsert(class SDES *,struct INDEX *)+000000CD)0043461A Module(sqlservr+0003461A) (FreeSpaceScan::GetNextPage(struct BUF * *)+000003B0)00434A1B Module(sqlservr+00034A1B) (FindExistingFreeSpace(class SDES *,struct INDEX *,unsigned int,int &)+000000B8)004348AD Module(sqlservr+000348AD) (ncinsert(class SDES * volatile,unsigned char *,int,class Scan_rid &)+00000081)00418543 Module(sqlservr+00018543) (rowinsert(class SDES * volatile,void *,int,unsigned char)+00000118)004185E0 Module(sqlservr+000185E0) (insert(class SDES *,void *,int)+00000013)00433D8F Module(sqlservr+00033D8F) (RowsetSS::InsertRow(unsigned long,unsigned long,void *,unsigned long *)+00000201)0042EE6A Module(sqlservr+0002EE6A) (CValRow::SetDataX(unsigned long *,class CXVariant *)+00000025)00431C2F Module(sqlservr+00031C2F) (CEs::FastMoveEval(unsigned long *,class CEsExec *,class CXVariant *)+00000039)00433FD6 Module(sqlservr+00033FD6) (CQScanScalarInsert::GetRow(unsigned long *,unsigned long *)+00000035)0042C85E Module(sqlservr+0002C85E) (CQScanNLJoin::GetRow(unsigned long *,unsigned long *)+00000112)004C09E1 Module(sqlservr+000C09E1) (CQScanAssert::GetRow(unsigned long *,unsigned long *)+0000001B)00427985 Module(sqlservr+00027985) (CQueryScan::GetRow(unsigned long *,unsigned long *)+00000014)00426F64 Module(sqlservr+00026F64) (CStmtQuery::ErsqExecuteQuery(class CMsqlExecContext *,class CEsComp const *,class CEsComp const *,unsigned long *,int,int)const +000003C4)0042EA36 Module(sqlservr+0002EA36) (CStmtDML::XretExecuteNormal(class CMsqlExecContext *)const +000002F0)0042E82D Module(sqlservr+0002E82D) (CStmtDML::XretExecute(class CMsqlExecContext *)const +0000001C)004160DB Module(sqlservr+000160DB) (CMsqlExecContext::ExecuteStmts(class ExecutionContext *)+0000027E)00415765 Module(sqlservr+00015765) (CMsqlExecContext::Execute(class CCompPlan *,class CParamExchange *)+000001C7)00415410 Module(sqlservr+00015410) (CSQLSource::Execute(class CParamExchange *)+00000343)005A683F Module(sqlservr+001A683F) (CStmtPrepQuery::XretExecute(class CMsqlExecContext *)const +00000211)004160DB Module(sqlservr+000160DB) (CMsqlExecContext::ExecuteStmts(class ExecutionContext *)+0000027E)00415765 Module(sqlservr+00015765) (CMsqlExecContext::Execute(class CCompPlan *,class CParamExchange *)+000001C7)00415410 Module(sqlservr+00015410) (CSQLSource::Execute(class CParamExchange *)+00000343)00459A54 Module(sqlservr+00059A54) (language_exec(struct srv_proc *)+000003C8)004175D8 Module(sqlservr+000175D8) (process_commands(struct srv_proc *)+000000E0)410735D0 Module(UMS+000035D0) (ProcessWorkRequests(class UmsWorkQueue *)+00000264)4107382C Module(UMS+0000382C) (ThreadStartRoutine(void *)+000000BC)7800BEA1 Module(MSVCRT+0000BEA1) (_beginthread+000000CE)77E92CA8 Module(KERNEL32+00012CA8) (CreateFileA+0000011B)-------------------------------------------------------------------------------				
ist hier ein kurze Stack Dump mit dem Fehler 3448 auf Verkaufsversion 8.00.194:
-------------------------------------------------------------------------------Short Stack Dump77F97AC6 Module(ntdll+00017AC6) (ZwGetContextThread+0000000B)00926069 Module(sqlservr+00526069) (ex_raise2(int,int,int,int,void *,char *)+00000174)0046C368 Module(sqlservr+0006C368) (ex_raise(int,int,int,int,...)+00000063)008686FE Module(sqlservr+004686FE) (FixPageForUndo(class PageRef &,class DBTABLE *,class LSN const &,enum LatchBase::LATCH_TYPE,class PageLog const &)+00000098)00863962 Module(sqlservr+00463962) (XdesRMReadWrite::UndoPageOperation(class PageLog const *,class LSN const &,int)+0000032B)00440FBA Module(sqlservr+00040FBA) (XdesRMReadWrite::RollbackToLsn(class LSN const &,class LogIterBackLink &,class IndexErrorTable *,int)+000002EB)00865932 Module(sqlservr+00465932) (XdesRMFull::RollbackNested(int)+00000143)0086062F Module(sqlservr+0046062F) (XactRM::RollbackNestedXact(int)+0000009E)0085DEB5 Module(sqlservr+0045DEB5) (FullXactImpBase::RollbackNestedXact(int)+00000037)0064089F Module(sqlservr+0024089F) (CMsqlXact::RollbackNestedXact(enum CMsqlXact::ReadWriteMode,int)+00000017)006403DD Module(sqlservr+002403DD) (CAutoMsqlXact::RollbackNestedXact(void)+00000032)0062F2D1 Module(sqlservr+0022F2D1) (CStmtDML::XretExecuteNormal(class CMsqlExecContext *)const +00000456)0042E82D Module(sqlservr+0002E82D) (CStmtDML::XretExecute(class CMsqlExecContext *)const +0000001C)004160DB Module(sqlservr+000160DB) (CMsqlExecContext::ExecuteStmts(class ExecutionContext *)+0000027E)00415765 Module(sqlservr+00015765) (CMsqlExecContext::Execute(class CCompPlan *,class CParamExchange *)+000001C7)00415410 Module(sqlservr+00015410) (CSQLSource::Execute(class CParamExchange *)+00000343)005A683F Module(sqlservr+001A683F) (CStmtPrepQuery::XretExecute(class CMsqlExecContext *)const +00000211)004160DB Module(sqlservr+000160DB) (CMsqlExecContext::ExecuteStmts(class ExecutionContext *)+0000027E)00415765 Module(sqlservr+00015765) (CMsqlExecContext::Execute(class CCompPlan *,class CParamExchange *)+000001C7)00415410 Module(sqlservr+00015410) (CSQLSource::Execute(class CParamExchange *)+00000343)00459A54 Module(sqlservr+00059A54) (language_exec(struct srv_proc *)+000003C8)004175D8 Module(sqlservr+000175D8) (process_commands(struct srv_proc *)+000000E0)410735D0 Module(UMS+000035D0) (ProcessWorkRequests(class UmsWorkQueue *)+00000264)4107382C Module(UMS+0000382C) (ThreadStartRoutine(void *)+000000BC)7800BEA1 Module(MSVCRT+0000BEA1) (_beginthread+000000CE)77E92CA8 Module(KERNEL32+00012CA8) (CreateFileA+0000011B)-------------------------------------------------------------------------------2001-03-30 03:08:44.56 spid51    Error: 3448, Severity: 21, State: 12001-03-30 03:08:44.56 spid51    Could not undo log record (5:23:99), for transaction ID (0:157), on page (1:76), database 'repro' (database ID 7). Page information: LSN = (5:23:96), type = 1. Log information: OpCode = 4, context 1..2001-03-30 03:08:44.56 spid51    ex_raise2: Exception raised, major=34, minor=48, severity=25, attempting to create symptom dump				

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 294902 – Letzte Überarbeitung: 01/16/2015 22:12:44 – Revision: 3.2

Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbmt kbbug kbfix kbsqlserv2000sp1fix KB294902 KbMtde
Feedback