Ajuda: envio de e-mail quando houver problemas com o banco de dados[RESOLVIDO]
7 respostas
novato22
Seguinte, gente:
trabalho com um sistema feito em java que fica inserindo registros diariamente a todo momento no banco. São milhares de registros diariamente e quando há problemas no banco (por exemplo, o banco cai), me solicitaram que seja enviado um e-mail notificando o ocorrido. No sistema foi feita uma implementação que usa Time e TimerTask para verificar se existe arquivo em determinado diretório e caso exista é feito a inserção do mesmo no banco e este arquivo é então movido para o diretório de processados. Gostaria de enviar e-mail para os responsáveis quando acontecesse algum problema no banco no momento do ocorrido, para que eles tomem as medidas cabíveis, mas eu não consegui pensar numa solução bacana para isso. Então eu gostaria de sugestões de como poderei fazer isso. Agraço qualquer ajuda.
Bom, acesso a banco sempre trabalha com Exception.
Você pode implementar um método que seja acionado quando uma exceção for disparada na tentativa de conexão.
Nesse método você faz o envio do e-mail.
[]´s
Daniel
novato22
bom, tá certo… mas não é assim tão fácil… a cada 1 centésimo de segundo é verificado no diretório de recepção de arquivos se existe algum arquivo, caso exista, é feita a inserção do mesmo no banco. Se eu colocar para enviar e-mail na exceção disparada quando dá problema na inserção, será enviado e-mail a cada tentativa de inserir o registro, compreende? Ou seja, o responsável vai receber uma porrada de e-mails.
yorgan
Bom, então você poderia criar um arquivo de log para ser o gatilho do e-mail.
Por exemplo, se existir em uma pasta o arquivo ENVIADO.txt você faz o método interpretar que não é necessário o envio de uma nova mensagem.
Dessa forma você pode já adicionar as informações do erro diretamente nesse arquivo e já faz a validação para evitar a montanha de e-mails.
E quando o erro for tratado basta excluir o arquivo para que o gatilho esteja preparado novamente.
[]´s
Daniel
KWill
Tenho uma sugestão de como proceder nesse caso, bote uma thread separada rodando para monitorar se há erro com o banco de dados, que faz monitoração uma vez a cada intervalo de tempo e havendo erro nessa thread monitoradora tu manda um email de notificação, assim tu não dispara decilhões de emails.
Inté.
novato22
Entendi o sua sugestão, yorgan. Mas pode haver falhas. Tipo, se por acaso for iniciado o servidor de banco este arquivo é gerado e quando reestabelecido este arquivo vai estar lá, será enviado o e-mail, mesmo não existindo o problema ainda. E o DBA terá que ter acesso ao servidor do serviço ou ao cara responsável para solucionar o problema.
Bom, no caso do KWill, eu estava tentando uma implementação desta forma mesmo. Fazer uma thread que verifique se está ok de tempos em tempos… caso não, mandaria um e-mail. Então, eu faria uma thread que faria uma consulta no banco de tempos em tempos, caso fosse retornado que não há conectividade com o banco, eu faria o procedimento de enviar o e-mail. A questão é que existe um erro de banco quando o tamanho do tablespace está cheio. Bom, o DBA não deveria limitar, mas não sei porque cargas d’água ele faz isso. Aí sempre ele tem que aumentar quando isso acontece. Bom, no momento eu sei que este erro acontece na inserção de um registro e o tablespace está cheio. De qualquer forma, acho que farei assim mesmo. Me deram uma sugestão aqui de usar job para chamar uma uma procedure no Oracle que envie um e-mail, mas nunca fiz isso. O que vocês acham? Agradeço as sugestões dadas. Obrigado.
Atenciosamente,
novato22
yorgan
Olha, se o sistema estiver rodando em um ambiente linux eu acho que a melhor solução é encontrar algum processo que faça isso fora do sistema.
Não sendo windows a chance de existir algum monitor pronto para esse tipo de coisa é bem grande.
[]´s
Daniel
novato22
oi, Daniel.
Bom, o ambiente é windows. Acho que vou implementar a thread como comentado anteriormente e também ver se faço o job que chame uma procedure no Oracle para enviar o e-mail (ainda não sei se isso é possível). Neste caso, quando houver algum problema no banco o serviço notificará via e-mail, e quando o serviço estiver fora o banco notificará. Eu acho que é isso. Obrigado pela colaboração de todos.