Sql-Server-2000
SQL Server 2000 中的一致性錯誤
我有 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
但是,它返回零行。對於其餘的錯誤,我不知道如何查詢表以找到壞行。
如何修復這些一致性錯誤,它們是隨機錯誤的原因嗎?
這些錯誤是實際表本身中的損壞頁面。您將需要恢復表。由於損壞位於基表中,因此無法在不失去數據的情況下修復問題。