Artigo SQL Magazine 45 - Tratamento de erros no SQL Server 2000 e 2005
Tratamento de erros no SQL Server 2000 e 2005
Por tratar<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />-se de uma parte delicada de qualquer sistema, devemos sempre implementar boas práticas no tratamento de erros. Um bom sistema oferece sempre um tratamento de erros eficiente uma vez que este não deve comprometer seriamente a execução de um software.
Neste artigo vamos entender quais são os recursos disponíveis no SQL para tratamento de erros. Veremos como funcionam as variáveis @@ERROR (ver Nota 1) e @@ROWCOUNT do SQL Server utilizadas no auxilio ao tratamento de erros, em seguida vamos simular alguns erros e mostrar como tratá-los. Para concluir o artigo, faremos uma comparação com o novo mecanismo de tratamento de erros presente no SQL Server 2005.
Nota 1. A variável @@ERROR
A variável @@ERROR é a base para tratamento de erros no SQL Server. Ela armazena sempre o número do último erro ocorrido após a execução de algum comando (devemos checar o valor desta variável a cada execução de uma linha de instruções Transact-SQL). Um valor 0 (zero) indica que nenhum erro ocorreu.
Os erros no SQL Server são compostos por um número, uma mensagem, um nível de severidade e um número de estado. A mensagem é um texto que descreve o erro, o nível de severidade indica o nível de gravidade do erro e o número do estado indica em que parte da arquitetura do SQL Server o erro ocorreu.
Tipos de erros e níveis de severidade
Vamos agora conhecer os níveis de severidade:
· Erros com severidade de 0 a 10: indicam erros de severidade baixa (apenas mensagens informativas). Estas mensagens ocorrem raramente;
· Erros com severidade de 11 a 16: indicam erros de severidade média. Estes erros normalmente podem ser corrigidos pelo desenvolvedor, exemplos: permissões negadas, erros de sintaxe, etc;
· Erros com severidade 17: indicam falta de recursos no sistema, por exemplo, espaço em disco;
· Erros com severidade 18: indicam a ocorrência de erros internos de software. O SQL Server pode reportar este erro quando ocorrer algum problema durante a otimização de uma query, por exemplo;
· Erros com severidade 19: indicam que algum limite interno não configurável foi excedido. Estes erros ocorrem raramente, entretanto, o DBA deve ser informado sobre sua ocorrência. Não existe na documentação do SQL Server nenhum exemplo de erro com esse nível de severidade;
· Erros com severidade de 20 a 25: indicam erros de maior gravidade e normalmente requerem a intervenção do DBA. Quando um erro com estes níveis de severidade ocorre, o DBA deve ser informado imediatamente, pois pode haver algum problema com o banco de dados. Nestes casos, pode haver problemas físicos no disco, e também casos em que será necessário restaurar a base de dados.
Estados de um erro
O estado de um erro indica em que parte do núcleo do SQL Server este erro ocorreu. Isto pode ajudar a equipe de desenvolvimento do SQL Server a encontrar as possíveis causas deste erro. Veja abaixo a descrição das principais partes do núcleo do SQL Server.
· Server NET-Libraries: gerencia os protocolos de rede;
· Relation Engine: realiza o parse do Transact SQL, otimiza e executa os planos de execução;
· Storage Engine: gerencia os arquivos de banco de dados, os buffers, IO, controla concorrência, logins, etc.