MSSQLSERVER_7105
Aplica-se: SQL Server
Detalhes
Atributo | Valor |
---|---|
Nome do produto | SQL Server |
ID do evento | 7105 |
Origem do Evento | MSSQLSERVER |
Componente | SQLEngine |
Nome simbólico | TXT_PGNOTEXIST |
Texto da mensagem | A ID de banco de dados %d, página %S_PGID, slot %d para o nó do tipo de dados LOB não existe. Em geral, isso é causado por transações que podem ler dados não confirmados em uma página de dados. Execute DBCC CHECKTABLE |
Explicação
Uma consulta poderá receber a Mensagem 7105 quando não for possível acessar dados LOB (Objeto Grande) referenciados por uma linha de página do banco de dados.
Como esse erro é de nível de gravidade 22, a conexão é encerrada pelo servidor. Essa mensagem de erro também é gravada no arquivo SQL ERRORLOG e no Log de Eventos do Aplicativo do Windows com a EventID = 7105.
Possíveis causas:
Esse erro pode ocorrer devido a um dos seguintes motivos:
- Há um problema de banco de dados corrompido em uma página de banco de dados ou dentro das estruturas da página LOB referenciada pela página de banco de dados.
- A consulta que apresenta a falha está usando a dica de consulta
READ UNCOMMITTED ISOLATION LEVEL
ouNOLOCK
. - Existe um problema no Mecanismo do SQL Server que faz com que a consulta falhe com esse erro.
Confira as seções Resolução e Mais informações para determinar a causa do seu problema específico e a solução apropriada.
Ação do usuário
Como a mensagem indica, a primeira etapa a ser realizada é executar
DBCC CHECKDB
no banco de dados ouDBCC CHECKTABLE
na tabela em que o problema foi encontrado.A ID do banco de dados é fornecida na mensagem.
Para descobrir a tabela afetada exata sem executar
DBCC CHECKDB
, você precisará descobrir quais tabelas foram acessadas pela consulta que apresentou o erro. Um desses métodos é usar o SQL Profiler para rastrear a consulta. No entanto, no SQL Server 2008 (10.0.x) e no SQL Server 2008 (10.0.x) R2, você poderá localizar a consulta usando a sessão system_health Eventos Estendidos. Consulte este link para obter mais informações sobre como usar a sessão system_health: Usar a system_health Sessão.Assim como ocorre com qualquer problema de consistência de banco de dados, você pode resolver esses erros fazendo a restauração de um backup válido conhecido que não contenha esse problema.
No entanto, se você não conseguir fazer a restauração por meio de um backup, siga as recomendações referentes a
DBCC CHECKDB
ouDBCC CHECKTABLE
para reparar esses erros. É possível que isso resulte na perda de dados. Para obter mais informações sobre como usar o CHECKDB e as causas dos problemas de corrupção do banco de dados, consulte o artigo: Como solucionar erros de consistência do banco de dados relatados pelo DBCC CHECKDB.
É possível que esse erro seja recebido porque a consulta que acessa a tabela usava um nível de isolamento igual a
READ UNCOMMITTED
ou a dica de consultaNOLOCK
(também conhecida como leitura suja).Se
DBCC CHECKDB
ouDBCC CHECKTABLE
não mostrar nenhum erro associado a essa tabela e aos dados LOB, a causa mais provável será o uso de uma leitura não suja. Se esse for o caso para seu aplicativo, você precisará evitar o uso de uma leitura suja ou repetir a consulta.Se você achar que essa é a causa do erro, não haverá nenhum problema real de consistência de banco de dados.
Mais informações
Se o banco de dados corrompido for a causa desse problema, DBCC CHECKDB
e/ou DBCC CHECKTABLE
deverá relatar erros. No entanto, esses comandos não relatarão a Mensagem 7105. Os erros que você receber de CHECKDB dependerão do que está danificado na referência às estruturas de LOB ou nas próprias estruturas LOB.
Se a linha da página de banco de dados não referenciar corretamente uma página LOB válida, você poderá ver erros como estes:
Mensagem 8929, Nível 16, Estado 1, Linha 1
ID do objeto 2137058649, ID do índice 0, ID da partição 72057594038910976, ID da unidade de alocação 72057594039828480 (tipo Dados em linha): erros encontrados em dados fora da linha com ID 131203072 pertencentes ao registro de dados identificado por RID = (1:179:1)
Mensagem 8964, Nível 16, Estado 1, Linha 1
Erro de tabela: ID do objeto 2137058649, ID do índice 0, ID da partição 72057594038910976, ID da unidade de alocação 72057594039894016 (digite dados LOB). O nó de dados fora da linha na página (1:177), slot 1, ID de texto 131203072 não está referenciado.
Mensagem 8965, Nível 16, Estado 1, Linha 1
Erro de tabela: ID do objeto 2137058649, ID do índice 0, ID da partição 72057594038910976, ID da unidade de alocação 72057594039894016 (digite dados LOB). O nó de dados fora da linha na página (255:177), slot 1, ID de texto 131203072 é referenciado pela página (1:179), slot 1, mas não foi visto na verificaçãoDiferentes cenários para o problema podem resultar em uma combinação diferente de erros. Neste exemplo:
A página de banco de dados 1:179, slot 1, está referenciando uma página LOB que não é uma página válida no banco de dados (página 255:177). A página (1:177) é uma página LOB válida, mas nunca foi referenciada por nenhuma página de banco de dados. Portanto, nessa situação, o problema é que a linha no slot 1 da página 1:179 referencia a página 255:177 em vez da 1:177.
O segredo para determinar se os erros de
DBCC CHECKDB
estão relacionados a problemas da página LOB é procurar as frases 'dados fora da linha' e 'tipo de dados LOB'.A Mensagem 8929 é um erro relacionado à página de banco de dados que referencia as páginas LOB.
A Mensagem 8964 é um erro que indica que uma página LOB não foi referenciada por nenhuma página de banco de dados.
A Mensagem 8965 é um erro que indica que as páginas LOB foram referenciadas por uma página de banco de dados, mas não existem como uma página válidaEm muitas situações envolvendo esses tipos de erros, o reparo resultará na exclusão das linhas que apontam para os dados LOB e os próprios dados LOB. O algoritmo de reparo tentará apenas remover os fragmentos LOB que afetam as linhas do banco de dados em questão, mas isso não pode ser garantido em todas as situações, dependendo do que está danificado na 'estrutura de árvore' LOB.
No exemplo mostrado aqui, as mensagens retornadas por um CHECKTABLE usando
REPAIR_ALLOW_DATA_LOSS
são semelhantes a:Reparar: Registro excluído para ID de objeto 2137058649, ID de índice 0, ID de partição 72057594038910976, ID de unidade de alocação 72057594039828480 (digite dados em linha), na página (1:179), slot 1. Os índices serão recriados.
Reparar: Coluna de dados fora da linha excluída com ID 131203072, para ID de objeto 2137058649, ID de índice 0, ID de partição 72057594038910976, ID de unidade de alocação 72057594039894016 (tipo dados LOB) na página (1:177), slot 1.
Mensagem 8929, Nível 16, Estado 1, Linha 1
ID do objeto 2137058649, ID do índice 0, ID da partição 72057594038910976, ID da unidade de alocação 72057594039828480 (tipo Dados em linha): erros encontrados em dados fora da linha com ID 131203072 pertencentes ao registro de dados identificado por RID = (1:179:1)
O erro foi corrigido.
Mensagem 8964, Nível 16, Estado 1, Linha 1
Erro de tabela: ID do objeto 2137058649, ID do índice 0, ID da partição 72057594038910976, ID da unidade de alocação 72057594039894016 (digite dados LOB). O nó de dados fora da linha na página (1:177), slot 1, ID de texto 131203072 não está referenciado.
O erro foi corrigido.
Mensagem 8965, Nível 16, Estado 1, Linha 1
Erro de tabela: ID do objeto 2137058649, ID do índice 0, ID da partição 72057594038910976, ID da unidade de alocação 72057594039894016 (digite dados LOB). O nó de dados fora da linha na página (255:177), slot 1, ID de texto 131203072 é referenciado pela página (1:179), slot 1, mas não foi visto na verificação.
Não foi possível reparar este erroA última mensagem que indica
Could not repair this error
é equivocada. O erro foi reparado porque a linha da página de banco de dados que apontava para a página inválida (255:177) foi excluída.