Usuário com melhor resposta
DBCC CheckTable

Pergunta
-
Turma,
Ao executar um select em uma tabela, percebi que deu um erro:
O SQL Server detectou um erro de E/S baseado em consistência lógica: página interrompida (assinatura esperada: 0x55555555; assinatura real: 0x15555555). Isso ocorreu durante um ler da página (1:4242) na ID de banco de dados '7' do deslocamento 0x00000002124000 do arquivo 'C:\arquivo.mdf'. Mensagens adicionais do log de erros ou do log de eventos do sistema do SQL Server poderão fornecer mais detalhes. Este é um erro grave que ameaça a integridade do banco de dados e deve ser corrigido imediatamente. Faça uma verificação completa da consistência do banco de dados (DBCC CHECKDB). Este erro pode ter sido causado por vários fatores. Para obter mais informações, consulte os manuais online do SQL Server.
Consegui identificar que o erro é em uma tabela e quando faço do DBCC Checktable ocorre o erro:
Resultados do DBCC para 'tabela'.
Msg 8928, Level 16, State 1, Line 1
ID de objeto 1977058079, ID de índice 1, ID de partição 411043454976000, ID de unidade de alocação 129568478265344 (tipo In-row data): A página (1:4242) não pôde ser processada. Veja outros erros para obter detalhes.
Msg 8939, Level 16, State 98, Line 1
Erro de tabela: ID de objeto 1977058079, ID de índice 1, ID de partição 411043454976000, ID de unidade de alocação 411043454976000 (tipo In-row data), página (1:4242). Falha no teste (IS_OFF (BUF_IOERR, pBUF->bstat)). Os valores são 12716041 e -1.
Msg 8976, Level 16, State 1, Line 1
Erro de tabela: ID de objeto 1977058079, ID de índice 1, ID de partição 411043454976000, ID de unidade de alocação 411043454976000 (tipo In-row data). A página (1:4242) não foi vista na verificação embora seu (1:4380) pai e (1:4241) anteriores façam referência a ela. Verifique os erros anteriores.
Msg 8978, Level 16, State 1, Line 1
Erro de tabela: ID de objeto 1977058079, ID de índice 1, ID de partição 411043454976000, ID de unidade de alocação 411043454976000 (tipo In-row data). Na página (1:4243) falta uma referência da página anterior (1:4242). Possível problema de vínculo de cadeia.
Existem 1222024 linhas em 7025 páginas para o objeto "tabela".
CHECKDB encontrou 0 erros de alocação e 4 erros de consistência na tabela 'tabela' (ID de objeto 1977058079).
Tem como recuperar essa tabela?
Valeu !!!
Pablicio- Movido Gustavo Maia Aguiar sexta-feira, 28 de maio de 2010 12:57 (De:SQL Server - Desenvolvimento Geral)
Respostas
-
Fernanda,
Depois de pesquisar muito, consegui corrigir através destes comandos:
USE MASTER
GO
--Verificando banco de dados
DBCC CHECKDB ('nome do banco de dados') WITH ALL_ERRORMSGS
ALTER DATABASE nome do banco de dados SET emergency
ALTER DATABASE nome do banco de dados SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('nome do banco de dados', REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS
ALTER DATABASE nome do banco de dados SET MULTI_USERObrigado a todos!
Pablicio
Pablicio- Marcado como Resposta Fernanda Simões quarta-feira, 2 de junho de 2010 14:45
Todas as Respostas
-
Em algum post daqui do forum acho que o Gustavo Aguiar deixou a seguite resposta (não lembro bem se foi ele, guardei apenas o texto):
INICIO
Não recomendo partir direto para o REPAIR_ALLOW_DATA_LOSS. Como o comando diz, você irá reparar permitindo que dados sejam excluídos se necessário. Esse deve ser o último e não o primeiro comando.
Sugiro a seguinte abordagem:
Faça um SELECT * FROM com o NOLOCK e exporte os dados para outra tabela
Se não funcionar, mate todos os índices da tabela e tente o mesmo procedimento
Se não funcionar, então sim opte pelo REPAIR_ALLOW_DATA_LOSSFIM
Tente fazer os 2 primeiros passos:
Faça um SELECT * FROM com o NOLOCK e exporte os dados para outra tabela
Se não funcionar, mate todos os índices da tabela e tente o mesmo procedimentoTambém tenho algums links sobre o assunto:
http://sqlserverpedia.com/blog/sql-server-2005/lessons-learned-recovering-from-first-%e2%80%99suspect%e2%80%99-database/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+sqlserverpedia+%28SQLServerPedia%29&utm_content=Google+Reader
http://www.sqlskills.com/BLOGS/PAUL/category/CHECKDB-From-Every-Angle.aspx
http://www.sqlpass.org/UserLogin.aspx?returnurl=%2fLearningCenter%2fSummitOnDemand%2fSummit2008%2fDBA416S.aspx
http://www.sqlskills.com/BLOGS/PAUL/post/Sample-corrupt-databases-to-play-with.aspx
http://www.sqlskills.com/BLOGS/PAUL/category/Disaster-Recovery.aspx
http://www.sqlskills.com/BLOGS/PAUL/post/Misconceptions-around-corruptions-can-they-disappear.aspxhttp://www.sqlskills.com/BLOGS/PAUL/post/Misconceptions-around-database-repair.aspx
http://www.sqlskills.com/BLOGS/PAUL/post/Search-Engine-QA-26-Myths-around-causing-corruption.aspx
http://www.sqlskills.com/BLOGS/PAUL/post/Inside-The-Storage-Engine-Does-turning-on-page-checksums-discard-any-torn-page-protection.aspx
http://sqlserver-qa.net/blogs/tools/archive/2010/04/23/sql-server-detected-a-logical-consistency-based-i-o-error-error-824.aspx
Fabrício França Lima | MCP, MCTS, MCITP | Visite meu site: http://fabriciodba.spaces.live.com/ -
Pode ser que exista um valor inconsistente na tabela... Se for isso, assim que vc deletar o indice e recriá-lo, o erro aparecerá novamente. Se for viavel, vc pode fazer o select em partes (os primeiros 10000 depois os proximos, etc) ate achar o registro que tem o erro. Geralmente é uma data fora do range ou alguma outra inconsistencia na base.
-
Pablicio,
Somente nesta table você esta tendo este problema?
Você já chegou a verificação integridade do seu banco de dados, através do comando DBCC CheckDB?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário] -
Pablicio,
Você conseguiu solucionar o seu problema?
Caso afirmativo poste a solução para que outras pessoas se beneficiem.Att,
Fernanda
“Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”. -
Fernanda,
Depois de pesquisar muito, consegui corrigir através destes comandos:
USE MASTER
GO
--Verificando banco de dados
DBCC CHECKDB ('nome do banco de dados') WITH ALL_ERRORMSGS
ALTER DATABASE nome do banco de dados SET emergency
ALTER DATABASE nome do banco de dados SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('nome do banco de dados', REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS
ALTER DATABASE nome do banco de dados SET MULTI_USERObrigado a todos!
Pablicio
Pablicio- Marcado como Resposta Fernanda Simões quarta-feira, 2 de junho de 2010 14:45