Eu tenho o SQL Server 2000 e, desde a atualização do SP2 para o SP4, erros aleatórios começaram a acontecer. Principalmente erros de estouro, às vezes no SqlDateTime
e às vezes no tipo de dados numeric
.
Por exemplo, agora eu tenho uma coluna com 1099511628.776
valor, o tipo de coluna decimal(18,3)
pode conter até 10 ^ 38, então claramente isso não é um estouro, no entanto, quando tento atualizar essa coluna e defini-la como 1, recebo o erro Arithmetic overflow error converting numeric to data type
numeric
.
Rodei DBCC CHECKDB
no banco de dados e obtive 6 erros de consistência em duas tabelas, para a primeira tabela:
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.
Segunda tabela:
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.`
Agora, para o primeiro erro, tentei executar a consulta:
SELECT *
FROM table1
WHERE wh_id IS NULL
No entanto, ele retorna zero linhas. Para o restante dos erros, não sei como consultar a tabela para encontrar a (s) linha (s) incorreta (s).
Como posso corrigir esses erros de consistência e eles são o motivo dos erros aleatórios?
Esses erros são páginas corrompidas na própria tabela. Você precisará restaurar a tabela. Não há como reparar o problema sem perder dados, pois a corrupção está na tabela base.