文章編號: 815594 - 上次校閱: 2003年9月22日 - 版次: 3.2

注意: BULK INSERT 陳述式時產生一個失敗的判斷提示

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

徵狀

SQL Server 可能會造成下列失敗的零售判斷提示,牽涉到的經常性、 循環 BULK INSERT 陳述式後面接著 DELETE 陳述式的程序期間。若要產生判斷提示,BULK INSERT 活動必須進行操作在非記錄模式中:
	2003-02-18 20:59:45.83 spid54    SQL Server Assertion: File: <access.c>, line=3721 
	Failed Assertion = '(logMode != nonlogged) || (dbt->dbt_dbid == TEMPDBID)'.
附註 若要在非記錄模式下作業使用 TABLOCK 選項。

A call stack similar to the following is also generated in the SQL Server error log:
* -------------------------------------------------------------------------------
* Short Stack Dump
* 0087A90E Module(sqlservr+0047A90E) (CStackDump::GetContextAndDump+0000002E)
* 0087C41F Module(sqlservr+0047C41F) (stackTrace+00000223)
* 00931097 Module(sqlservr+00531097) (utassert_fail+000002E3)
* 008075E4 Module(sqlservr+004075E4) (ChangeGhostPageState+000000D5)
* 00808855 Module(sqlservr+00408855) (DataSplitMgr::SplitPage+000000F4)
* 00572C15 Module(sqlservr+00172C15) (indexsplit+00000068)
* 00572AE7 Module(sqlservr+00172AE7) (SplitIndexNode+0000003D)
* 00406CEC Module(sqlservr+00006CEC) (srchindex+000002C1)
* 004372AF Module(sqlservr+000372AF) (InsertRowIntoNCIndex+0000018A)
* 0080121A Module(sqlservr+0040121A) (RowsetSS::InsertRow+000000D1)
* 0040E01C Module(sqlservr+0000E01C) (CValRow::SetDataX+00000035)
* 0040AE83 Module(sqlservr+0000AE83) (SetDataWithPop+0000001C)
* 0041C5BE Module(sqlservr+0001C5BE) (CEs::GeneralEval4+00000075)
* 00486561 Module(sqlservr+00086561) (CQScanUpdate::GetRow+000001DA)
* 006F9B06 Module(sqlservr+002F9B06) (CQScanSequence::Open+000000DA)
* 004214C4 Module(sqlservr+000214C4) (CQueryScan::Startup+0000010D)
* 0041D505 Module(sqlservr+0001D505) (CStmtQuery::ErsqExecuteQuery+0000026B)
* 0041E09C Module(sqlservr+0001E09C) (CStmtDML::XretExecuteNormal+000002AE)
* 0041DECA Module(sqlservr+0001DECA) (CStmtDML::XretExecute+0000001C)
* 0041B442 Module(sqlservr+0001B442) (CMsqlExecContext::ExecuteStmts+000003B9)
* 0041AA88 Module(sqlservr+0001AA88) (CMsqlExecContext::Execute+000001B6)
* 0041B9B6 Module(sqlservr+0001B9B6) (CSQLSource::Execute+00000357)
* 0047F78C Module(sqlservr+0007F78C) (CSQLSource::SeExecute+00000051)
* 0047F6DC Module(sqlservr+0007F6DC) (ExecSql+000000EA)
* 0047F590 Module(sqlservr+0007F590) (CBcpImport::ExecInsertStmt+00000447)
* 0047D869 Module(sqlservr+0007D869) (BcpImportMain+00000196)
* 0047D714 Module(sqlservr+0007D714) (CStmtBulkIns::XretExecute+0000005F)
* 0041B442 Module(sqlservr+0001B442) (CMsqlExecContext::ExecuteStmts+000003B9)
* 0041AA88 Module(sqlservr+0001AA88) (CMsqlExecContext::Execute+000001B6)
* 0041B9B6 Module(sqlservr+0001B9B6) (CSQLSource::Execute+00000357)
* 0048A63B Module(sqlservr+0008A63B) (language_exec+000003E1)
* 0042708C Module(sqlservr+0002708C) (process_commands+0000010E)
* 41075002 Module(UMS+00005002) (ProcessWorkRequests+00000272)
* 41074698 Module(UMS+00004698) (ThreadStartRoutine+00000098)
* 7800A27B Module(MSVCRT+0000A27B) (beginthread+000000CE)
* 77E8758A Module(KERNEL32+0000758A) (SetFilePointer+0000018A)
Additionally, after this type of process, if you then use DELETE operations on the BULK INSERT destination table, the DBCC CHECKDB and DBCC CHECKTABLE Transact-SQL references may report the following errors:
伺服器: 訊息 8952、 層級 16,狀態 1、 第 1 行
資料表錯誤: 資料庫 'BulkTest' 'FilterKeys.IX_FilterKeys_FileID' (識別碼 2057058364) 的索引 (索引識別碼 」 為 2)。索引鍵的多餘或不正確機碼:
伺服器: 訊息 8956、 層級 16,狀態 1、 第 1 行
索引列 (3: 12: 59) 的值 (FileID = ' {B08ED36E-EADF-47DF-B426-A793C683BB4A} ') 所指向的點所識別的資料列 (RID = (3:46405:14))。

狀況說明

Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的有錯誤。

發生的原因

當一個 BULK INSERT 作業觸發頁面分割在索引節點會導致新建立的索引頁面包含幽靈資料錄時,就會發生這個錯誤。會導致新的頁面標示為包含隱藏的資料錄的控制頁可用空間 (PFS) 頁面的程序應該不會發生非記錄作業期間。

其他可行方案

因為這個問題只發生在堆積上 (或 SQL Server 沒有叢集索引鍵的資料表),放 BULK INSERT 叢集的索引如果要解決這個問題的目的資料表。

其他相關資訊

SQL Server 使用隱藏的資料錄為 DELETE 作業的並行處理最佳化。當資料列已刪除 (或移動) 從索引分葉分頁時,空間是不立即釋放到 SQL Server。改,它標示為"幽靈 」。SQL Server 系統處理序 (幽靈車記錄清理) 的運作方式在背景非同步地移除這些記錄。

這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition
關鍵字:?
kbmt kbprb KB815594 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:815594? (http://support.microsoft.com/kb/815594/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。