MSSQLSERVER_605

Aplica-se a:SQL Server

Detalhes

Atributo Valor
Nome do Produto SQL Server
ID do evento 605
Origem do Evento MSSQLSERVER
Componente SQLEngine
Nome simbólico WRONGPAGE
Texto da mensagem Falha na tentativa de buscar a página lógica %S_PGID no banco de dados %d. Ela pertence à unidade de alocação %I64d não a %I64d.

Explicação

Esse erro geralmente indica um dano na página ou na alocação do banco de dados especificado. O SQL Server detecta danos quando lê páginas que pertencem a uma tabela, seguindo os vínculos de página ou usando a página IAM. Todas as páginas alocadas para uma tabela devem pertencer a uma das unidades de alocação associadas à tabela. Se a ID da unidade de alocação contida no cabeçalho da página não corresponder a uma ID de unidade de alocação associada à tabela, essa exceção será gerada. A primeira ID de unidade de alocação listada na mensagem de erro é a ID presente no cabeçalho da página, e o segundo valor da unidade de alocação é a ID associada com a tabela.

Erros de dados corrompidos

Um nível de gravidade 21 indica a possibilidade de os dados estarem corrompidos. As possíveis causas são uma cadeia de páginas danificada, uma página IAM corrompida ou uma entrada inválida na exibição de catálogo sys.objects do objeto em questão. Esses erros geralmente são causados por falha de hardware ou do driver de dispositivo do disco.

Erros transitórios

Um nível de gravidade 12 indica um possível erro transitório; ou seja, ele ocorre no cache e não indica dano nos dados armazenados em disco. Os erros transitórios 605 podem ser causados pelas seguintes condições:

  • O sistema operacional prematuramente notifica o SQL Server de que uma operação de E/S foi concluída; a mensagem de erro é exibida mesmo que os dados não estejam corrompidos.

  • Executar uma consulta com a dica de otimização NOLOCK ou definir o nível de isolamento da transação como READ UNCOMMITTED. Quando uma consulta que não usa nível de isolamento da transação NOLOCK ou READ UNCOMMITTED tenta ler dados que estão sendo movidos ou alterados por outro usuário, ocorre um erro 605. Para verificar se é um erro 605 transitório, reexecute a consulta posteriormente.

Em geral, se o erro ocorreu durante o acesso aos dados, mas as operações DBCC CHECKDB subsequentes foram concluídas com êxito, provavelmente o erro 605 era transitório.

Ação do usuário

Se o erro 605 não é transitório, o problema é grave e deve ser corrigido por meio das seguintes tarefas:

  1. Identifique as tabelas associadas com as unidades de alocação especificadas na mensagem executando a consulta a seguir. Substitua allocation_unit_id pelas unidades de alocação especificadas na mensagem de erro.

    USE [database_name];  
    
    GO  
    
    SELECT au.allocation_unit_id, OBJECT_NAME(p.object_id) AS table_name, fg.name AS filegroup_name,  
    
    au.type_desc AS allocation_type, au.data_pages, partition_number  
    
    FROM sys.allocation_units AS au  
    
    JOIN sys.partitions AS p ON au.container_id = p.partition_id  
    
    JOIN sys.filegroups AS fg ON fg.data_space_id = au.data_space_id  
    
    WHERE au.allocation_unit_id = '<allocation_unit_id>' OR au.allocation_unit_id = '<allocation_unit_id>'  
    
    ORDER BY au.allocation_unit_id;  
    
    GO  
    
  2. Execute DBCC CHECKTABLE sem uma cláusula REPAIR na tabela associada com a segunda ID de unidade de alocação especificada na mensagem de erro.

  3. Execute DBCC CHECKDB sem uma cláusula REPAIR o mais rápido possível para determinar toda a extensão do dano causado no banco de dados inteiro.

  4. Verifique no log de erros se existem outros erros que costumam acompanhar um erro 605 e examine o Log de Eventos do Windows para identificar problemas de sistema ou relacionados ao hardware. Corrija quaisquer problemas relacionados a hardware existentes nos logs.

Se o problema não estiver relacionado ao hardware, execute uma das seguintes tarefas:

  1. Restaure o banco de dados de um backup limpo conhecido. Use o recurso de backup de restauração de página para restaurar somente as páginas danificadas.

  2. Execute DBCC CHECKDB com a cláusula REPAIR recomendada pela operação DBCC CHECKDB executada na etapa 3 para reparar o dano. Se a execução de DBCC CHECKDB com uma das cláusulas REPAIR não corrigir o problema, contate seu provedor de suporte. Revise a saída gerada por DBCC CHECKDB.

    Cuidado

    Se você não tiver certeza do efeito de DBCC CHECKDB com uma cláusula REPAIR sobre seus dados, contate o provedor de suporte antes de executar essa instrução.

Consulte Também

DBCC CHECKTABLE (Transact-SQL)