Compartilhar via


Gravidades de erros do mecanismo de banco de dados

Aplica-se a:SQL Server

Quando um erro é gerado pelo mecanismo de banco de dados do SQL Server, sua severidade indica o tipo de problema encontrado pelo SQL Server.

Níveis de severidade

A tabela a seguir lista e descreve os níveis de severidade dos erros gerados pelo mecanismo de banco de dados do SQL Server.

Nível de severidade Descrição
0-9 Indique mensagens informativas que retornam informações de status ou reportam erros que não são graves. O mecanismo de banco de dados não gera erros do sistema com severidades de 0 a 9.
10 Indica mensagens informativas que retornam informações de status ou erros de relatório que não são graves. Por razões de compatibilidade, o mecanismo de banco de dados converte a severidade 10 em severidade 0 antes de retornar as informações de erro ao aplicativo de chamada.
11-16 Indica erros que podem ser corrigidos pelo usuário.
11 Indica que um determinado objeto ou entidade não existe.
12 Uma severidade especial para consultas que não usam bloqueio por causa de dicas de consulta especiais. Em alguns casos, as operações de leitura executadas por essas instruções podem resultar em dados inconsistentes porque os bloqueios não são feitos para garantir a consistência.
13 Indica erros de deadlock de transação.
14 Indica erros relacionados à segurança, como uma permissão negada.
15 Indica erros de sintaxe no comando Transact-SQL.
16 Indica erros gerais que podem ser corrigidos pelo usuário.
17-19 Indica erros de software que não podem ser corrigidos pelo usuário. O usuário deve informar o problema ao seu administrador do sistema.
17 Indica que a instrução fez o SQL Server ficar sem recursos (como memória, bloqueios ou espaço em disco para o banco de dados) ou exceder algum limite definido pelo administrador do sistema.
18 Indica um problema no software do Mecanismo de Banco de Dados, mas a instrução é concluída e a conexão com a instância do Mecanismo de Banco de Dados é mantida. O administrador do sistema deve ser informado sempre que uma mensagem com nível de severidade 18 ocorrer.
19 Indica que um limite do mecanismo de banco de dados não configurável foi excedido e que o processo em lote atual foi encerrado. Mensagens de erro com nível de severidade 19 ou maior pararam a execução do lote atual. Erros de severidade 19 são raros e devem ser corrigidos pelo administrador do sistema ou por seu principal provedor de suporte. Contate seu administrador de sistema quando uma mensagem com severidade de nível 19 ocorrer. Mensagens de erro com nível de severidade de 19 a 25 são gravadas no log de erros.
20-24 Indique problemas do sistema e erros fatais, o que significa que a tarefa mecanismo de banco de dados que está executando uma instrução ou lote não está mais em execução. A tarefa registra informações sobre o que aconteceu e, depois, é encerrada. Na maioria dos casos, a conexão do aplicativo com a instância do Mecanismo de Banco de Dados também pode ser encerrada. Se isso acontecer, dependendo do problema, o aplicativo poderá não ser capaz de se reconectar.

Mensagens de erro nesse intervalo podem afetar todos os processos que acessam dados no banco de dados e podem indicar que um banco de dados ou objeto está danificado. Mensagens de erro com nível de severidade de 19 a 24 são gravadas no log de erros.
20 Indica que uma instrução encontrou um problema. Como o problema afetou apenas a tarefa atual, não é provável que o próprio banco de dados esteja danificado.
21 Indica que um problema foi encontrado que afeta todas as tarefas no banco de dados atual, mas não é provável que o banco de dados em si esteja danificado.
22 Indica que a tabela ou o índice especificado na mensagem foi danificado por um problema de software ou hardware.

Erros de severidade de nível 22 raramente ocorrem. Se acontecer, execute o DBCC CHECKDB para determinar se outros objetos no banco de dados também foram danificados. O problema pode ser apenas no cache do buffer e não no próprio disco. Nesse caso, reiniciar a instância do mecanismo de banco de dados corrige o problema. Para continuar trabalhando, você deve se reconectar à instância do Mecanismo de Banco de Dados. Caso contrário, use DBCC para reparar o problema. Em alguns casos, talvez seja necessário restaurar o banco de dados.

Se reiniciar a instância do Mecanismo de Banco de Dados não corrigir o problema, o problema estará no disco. Às vezes, destruir o objeto especificado na mensagem de erro resolve o problema. Por exemplo, se a mensagem informar que a instância do mecanismo de banco de dados encontrou uma linha com comprimento 0 em um índice não clusterizado, exclua o índice e crie-o novamente.
23 Indica que a integridade do banco de dados inteiro está em risco por um problema de software ou hardware.

Erros de severidade de nível 23 raramente ocorrem. Se um acontecer, execute o DBCC CHECKDB para determinar a extensão do dano. O problema pode ser apenas no cache e não no próprio disco. Nesse caso, reiniciar a instância do mecanismo de banco de dados corrige o problema. Para continuar trabalhando, você deve se reconectar à instância do Mecanismo de Banco de Dados. Caso contrário, use DBCC para reparar o problema. Em alguns casos, talvez seja necessário restaurar o banco de dados.
24 Indica uma falha de mídia. Talvez o administrador do sistema precise restaurar o banco de dados. Talvez você também precise chamar seu fornecedor de hardware.

Severidade da mensagem de erro definida pelo usuário

Você poder usar sp_addmessage para adicionar mensagens de erro definidas pelo usuário com severidades de 1 a 25 à exibição do catálogo sys.messages. Essas mensagens de erro definidas pelo usuário podem ser usadas pelo RAISERROR. Para obter mais informações, consulte sp_addmessage.

O RAISERROR pode ser usado para gerar mensagens de erro definidas pelo usuário com severidade de 1 a 25. RAISERROR pode referenciar uma mensagem de erro definida pelo usuário armazenada na exibição do catálogo sys.messages ou criar uma mensagem dinamicamente. Quando RAISERROR usa uma mensagem de erro definida pelo usuário quando sys.messages gera um erro, a gravidade especificada substitui RAISERROR a gravidade especificada em sys.messages. Para obter mais informações, consulte RAISERROR.

Gravidade do erro e TRY...CATCH

Um TRY...CATCH constructo captura todos os erros de execução com severidade maior que 10 que não terminam a conexão de banco de dados.

Erros com gravidade de 0 a 10 são mensagens informativas e não fazem com que a execução pule do CATCH bloco de uma TRY...CATCH construção.

Os erros que encerram a conexão de banco de dados, geralmente com gravidade de 20 a 25, não são tratados pelo bloco porque a CATCH execução é anulada quando a conexão é encerrada.

Para obter mais informações, consulte TRY... CATCH.

Recuperar a severidade dos erros

A ERROR_SEVERITY função do sistema pode ser usada para recuperar a gravidade do erro que causou a execução do CATCH bloco de um TRY...CATCH constructo. ERROR_SEVERITY retorna NULL se chamado fora do escopo de um CATCH bloco. Para obter mais informações, consulte ERROR_SEVERITY.