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 Mensagens informativas que retornam informações de status ou reportam erros que não sejam severos. O mecanismo de banco de dados não gera erros do sistema com severidades de 0 a 9.
10 Mensagens informativas que retornam informações de status ou reportam erros que não sejam severos. 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, operações de leitura executadas por essas instruções podem resultar em dados inconsistentes, pois os bloqueios não são usados 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 mecanismo de banco de dados , mas a instrução conclui a execução 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 de sistema que são erros fatais, ou seja, a tarefa do mecanismo de banco de dados que está executando uma instrução ou um lote que 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, é possível que o aplicativo não consiga se reconectar.

Mensagens de erro nesse intervalo podem afetar todos os processos que acessam dados no mesmo banco de dados e 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, é improvável que o banco de dados tenha sido danificado.
21 Indica que foi encontrado um problema que afeta todas as tarefas no banco de dados atual, mas é improvável que o banco de dados tenha sido 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 reconectar-se à instância do mecanismo de banco de dados; caso contrário, use o DBCC para reparar o problema. Em alguns casos, pode ser necessário restaurar o banco de dados.

Se a reinicialização da instância do mecanismo de banco de dados não corrigir o problema, é porque o problema está no disco. Às vezes, destruir o objeto especificado na mensagem de erro pode resolver 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 reconectar-se à instância do mecanismo de banco de dados; caso contrário, use o DBCC para reparar o problema. Em alguns casos, pode ser necessário restaurar o banco de dados.
24 Indica uma falha de mídia. O administrador de sistema pode ter que restaurar o banco de dados. Também pode ser necessário contatar o 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, veja sp_addmessage (Transact-SQL).

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. Ao usar a mensagem de erro definida pelo usuário em sys.messages durante a geração de um erro, a severidade especificada pelo RAISERROR substitui a severidade especificada em sys.messages. Para saber mais, confira RAISERROR (Transact-SQL).

Gravidade do erro e TRY...CATCH

Uma construção TRY...CATCH pega todos os erros de execução com gravidade acima de 10 que não encerram a conexão de banco de dados.

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

Erros que encerram a conexão de banco de dados, normalmente com severidade de 20 a 25, não são controlados pelo bloco CATCH porque a execução é anulada quando a conexão é encerrada.

Para obter mais informações, confira TRY...CATCH (Transact-SQL).

Recuperar a severidade dos erros

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

Confira também