Severidade dos erros do Mecanismo de Banco de Dados

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 de 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

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 de 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 de 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 de 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 lotes 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 de 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 corrigir 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 corrigir 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

sp_addmessage pode ser usado 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 (Transact-SQL).

O RAISERROR pode ser usado para gerar mensagens de erro definidas pelo usuário com severidade de 1 a 25. O RAISERROR pode se referir a uma mensagem de erro definida pelo usuário armazenada na exibição do catálogo sys.messages ou criar uma mensagem dinamicamente. Quando a mensagem de erro definida pelo usuário em sys.messages é usada durante a geração de um erro, a severidade especificada pelo RAISERROR substitui a severidade especificada em sys.messages. Para obter mais informações, consulte RAISERROR (Transact-SQL).

Severidade do erro e TRY...CATCH

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

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

Erros que encerram a conexão do 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, consulte TRY...CATCH (Transact-SQL).

Recuperando a severidade do erro

A função do sistema ERROR_SEVERITY pode ser usada para recuperar a severidade do erro que fez o bloco CATCH de uma construção 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).