Sql-Server-2000

SQL Server 2000 中的一致性錯誤

  • September 12, 2012

我有 SQL Server 2000,自從從 SP2 升級到 SP4 隨機錯誤開始發生。主要是溢出錯誤,有時在數據類型中SqlDateTime,有時在數據類型numeric中。

例如,現在我有一列1099511628.776作為它的值,列類型decimal(18,3)最多可以容納 10^38,所以顯然這不是溢出,但是當我嘗試更新該列並將其設置為 1 時,我得到錯誤Arithmetic overflow error converting numeric to data type numeric

DBCC CHECKDB在數據庫上執行,我在兩個表中得到 6 個一致性錯誤,第一個表:

Msg 8970, Level 16, State 1, Line 1  
Row error: Object ID 578101100, index ID 0, page ID (1:24157), row ID 61.
Column 'wh_id' was created NOT NULL, but is NULL in the row.

第二張表:

Msg 8928, Level 16, State 1, Line 1   
Object ID 933578364, index ID 0: Page (1:7160) could not be processed. 
See other errors for details.

Msg 8939, Level 16, State 12, Line 1  
Table error: Object ID 933578364, index ID 0, page (1:7160). 
Test (*(((int*) &m_reservedB) + i) == 0) failed. Values are 0 and 65536.

Msg 8944, Level 16, State 2, Line 1  
Table error: Object ID 933578364, index ID 0, page (1:7223), row 12. 
Test (!(hdr->r_tagA & (VERSION_MASK | RECTAG_RESV_A | RECTAG_RESV_B))) failed. 
Values are 17 and 193.`

Msg 8928, Level 16, State 1, Line 1  
Object ID 933578364, index ID 0: Page (1:7254) could not be processed. 
See other errors for details.`

Msg 8939, Level 16, State 106, Line 1  
Table error: Object ID 933578364, index ID 0, page (1:7254). 
Test (m_freeCnt == freeCnt) failed. Values are 2442 and 2444.`

現在對於第一個錯誤,我嘗試執行查詢:

SELECT *
FROM table1
WHERE wh_id IS NULL

但是,它返回零行。對於其餘的錯誤,我不知道如何查詢表以找到壞行。

如何修復這些一致性錯誤,它們是隨機錯誤的原因嗎?

這些錯誤是實際表本身中的損壞頁面。您將需要恢復表。由於損壞位於基表中,因此無法在不失去數據的情況下修復問題。

引用自:https://dba.stackexchange.com/questions/9984