FIX: 建立資料表、 資料列插入及後面的條件約束加入的交易內建立的索引可能會導致一致性錯誤

文章翻譯 文章翻譯
文章編號: 286749 - 檢視此文章適用的產品。
BUG #: 351939 (SHILOH_bugs)
全部展開 | 全部摺疊

徵狀

當您開啟一個交易、 建立資料表、 插入資料列、 在資料表上建立索引、 認可該交易並新增限制式時,後續的 DBCC CHECKTABLE 可能會回報一致性錯誤。DBCC CHECKTABLE 可能會傳回結果類似於:
伺服器: 訊息 8970、 層級 16,狀態 1、 第 2 行
資料列錯誤: 物件識別碼 2041058307、 索引識別碼 0、 頁面識別碼 (1:77),資料列識別碼 0。建立資料行 'LastModified' NOT NULL,但 NULL 處於資料列。
伺服器: 訊息 8970、 層級 16,狀態 1、 第 2 行
資料列錯誤: 物件識別碼 2041058307、 索引識別碼 0、 頁面識別碼 (1:77),資料列識別碼為 1。建立資料行 'LastModified' NOT NULL,但 NULL 處於資料列。
伺服器: 訊息 8970、 層級 16,狀態 1、 第 2 行
資料列錯誤: 物件識別碼 2041058307、 索引識別碼 0、 頁面識別碼 (1:77),資料列識別碼 」 為 2。建立資料行 'LastModified' NOT NULL,但 NULL 處於資料列。
DBCC 結果 '# TableX_____________________________000000000011'。
物件 '# TableX______________________________________________000000000011' 1 頁中有 0 個資料列。
CHECKTABLE 在資料表 '# TableX________________________000000000011' (物件識別碼 2041058307) 中找到 0 配置錯誤和 3 的一致性錯誤。
repair_allow_data_loss 是最小的修復層級的 DBCC CHECKTABLE (tempdb.dbo.#TableX________________________________________000000000011) 找到錯誤。

SQL Server 錯誤記錄檔會記錄類似下列的訊息:
<domain>\<user>執行 (tempdb.dbo.#TableX______________________________000000000011) 找到 3 的錯誤,修復 0 的錯誤。

解決方案

如果要解決這個問題,取得最新的 Service Pack,SQL Server 2000。如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
290211INF: 如何取得最新的 SQL Server 2000 Service Pack

其他可行方案

如果要解決這個問題,使用下列其中一種方法:
  • 您認可該交易之後,請建立索引。
  • 建立索引之後,關閉交易之前,請將值插入資料表。
  • 您認可該交易之後,您新增條件約束之前,請將值插入資料表。

狀況說明

Microsoft 已確認這是在 SQL Server 2000 中的問題。這個問題已經先在 SQL Server 2000 Service Pack 1 中獲得修正。

其他相關資訊

若要重現問題,執行下列指令碼:
begin tran
create table #TableX (Col1 varchar(20))
insert #TableX values ('A')
insert #TableX values ('B')
insert #TableX values ('C')
create index ix_Col1 on #TableX(Col1)  -- works fine when this is moved after the commit
--insert #TableX values ('D') -- or when this is uncommented
commit

--insert #TableX values ('D') -- or when this is uncommented

alter table #TableX add LastModified datetime not null constraint cn_Enabled default getdate()
go
select * from #TableX
dbcc checktable(#TableX)
go
drop table #TableX
				

屬性

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

提供意見

 

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