Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

É possível configurar o envio de e-mails com notificações sobre as execuções dos Schedules no banco de dados Oracle, assim, permitindo que ações preventivas ou corretivas sejam executadas em caso de problemas com as execuções programadas. Para o envio dessas notificações, é necessário realizar as configurações para o schedule no banco de dados.

Este documento tem como objetivo apresentar a abordagem do mecanismo nativo do banco de dados e descrever os passos básicos para ativação do monitoramento utilizando este mecanismo.

Informações

Para informações sobre o recurso, acesse a documentação oficial do fabricante do banco de dados.

PREMISSAS

  • Definir as regras para Network Access Control List - ACL no banco de dados para o usuário onde o Schedule será configurado para execução.
  • Definir os privilégios no banco de dados necessários de execução e manipulação das rotinas relacionadas às configurações dos schedules;

As notificações por e-mail são configuradas por schedule e para isso contamos com procedimentos disponibilizados no pacote DBMS_SCHEDULER.

01. Configurando o Schedule

O primeiro passo na configuração é informar na tarefa agendada qual servidor SMTP será usado para enviar os e-mails. Você também pode definir, opcionalmente, um endereço de remetente padrão, que será usado caso o parâmetro “sender”  não tenha sido especificado na notificação, que também possui um atributo para configuração de remetente. Mostraremos estas opções no próximo tópico - Adicionando Notificações a um Schedule.

Para configurar os dados de notificação na schedule usamos o procedimento “SET_SCHEDULER_ATTRIBUTE”, do pacote DBMS_SCHEDULER. Este procedimento possibilita a mudança de vários atributos do Schedule, porém o foco neste momento são os itens referentes ao envio de e-mails para as notificações. São eles:

  • 'email_server':  Endereço do servidor SMTP usado para enviar os e-mails quando os eventos configurados para disparo forem atingidos. As notificações por e-mails não poderão ser enviadas se este atributo estiver com o valor padrão “NULL”.
  • 'email_sender': Endereço de e-mail configurado como remetente padrão para o disparo das notificações que não informarem um remetente. Caso este parâmetro não seja configurado e a notificação configurada também não possua um remetente, o campo remetente do e-mail será enviado em branco.
  • 'email_server_credential': Schema e nome da credencial existente, onde SYS tenha privilégios de execução neste objeto. O padrão para este atributo é “NULL”, ou seja, nenhuma credencial informada para uso. Caso o servidor exija credenciais para o envio de e-mails, este atributo deverá ser configurado. O nome de usuário e senha configurados nesta credencial serão usados para autenticação no servidor de e-mail informado durante a comunicação. 
  • 'email_server_encryption': Este atributo possibilita a configuração do uso ou não da criptografia pela conexão ao servidor de envio de e-mail. Caso o servidor de envio dos e-mails exija a criptografia, este atributo deverá ser configurado com a opção adequada à necessidade do servidor. Valores possíveis para o atributo:
    • NONE: Valor padrão. Indica a não utilização de criptografia para a conexão;
    • SSL_TLS: Indica o uso de criptografia  SSL ou TLS, desde o início da conexão.
    • STARTTLS: Indica que a conexão inicia sem criptografia, mas começa a ser utilizada a partir do recebimento do comando STARTTLS  pelo servidor SMTP.

Para informações mais detalhadas sobre o procedimento, sugerimos uma consulta ao link da documentação oficial de uso.

Segue abaixo a sintaxe padrão do procedimento SET_SCHEDULER_ATTRIBUTE:

DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE (
   attribute      IN VARCHAR2,
   value          IN VARCHAR2);


Exemplo de utilização:

BEGIN
  DBMS_SCHEDULER.set_scheduler_attribute('email_server', 'smtp.dominio.com:25');
  DBMS_SCHEDULER.set_scheduler_attribute('email_sender', 'do_not_reply@dominio.com');
END;
/

02. Adicionando Notificações a um Schedule

Após adicionarmos as informações necessárias, podemos adicionar as notificações ao Schedule. Uma notificação por email é associada a uma tarefa agendada usando o procedimento ADD_JOB_EMAIL_NOTIFICATION. Podemos adicionar várias notificações a um schedule, variando os destinatários e também os eventos associados para disparo dos e-mails.

O título e o corpo do texto na notificação por e-mail podem ser personalizados usando diversas variáveis ​​que são identificadas usando o formato "%variable-name%".Os valores padrão dos parâmetros “Subject” e “Body” fornecem muitas informações, ficando opcional portanto, suas personalizações.

O parâmetro “events” determina quais eventos de trabalho disparam uma notificação, enquanto o parâmetro “filer_condition” pode reduzir as notificações filtrando os eventos que não atendem a critérios específicos, com base no tipo de objeto SCHEDULER$_EVENT_INFO .

É possível também definir um endereço de remetente para cada notificação, usando o parâmetro “sender”. Quando este for informado, substituirá o parâmetro “email_sender” se também configurado diretamente no Schedule.

Sintaxe padrão ADD_JOB_NOTIFICATION:

DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION (
    job_name             IN VARCHAR2,
    recipients           IN VARCHAR2,
    sender               IN VARCHAR2 DEFAULT NULL,
    subject              IN VARCHAR2 DEFAULT DBMS_SCHEDULER.DEFAULT_NOTIFICATION_SUBJECT,
    body                 IN VARCHAR2 DEFAULT DBMS_SCHEDULER.DEFAULT_NOTIFICATION_BODY,
    events               IN VARCHAR2 DEFAULT 'JOB_FAILED,JOB_BROKEN,JOB_SCH_LIM_REACHED,
                             JOB_CHAIN_STALLED,JOB_OVER_MAX_DUR',
    filter_condition     IN VARCHAR2 DEFAULT NULL);


A notificação do exemplo a seguir é acionada quando o Schedule é iniciado ou finalizado de forma bem-sucedida. Ele usa o assunto (Subject) e o corpo (Body) padrão.

BEGIN
 DBMS_SCHEDULER.add_job_email_notification (
  job_name => 'teste_notificação_schedule',
  recipients =>  ‘destinatario@empresa.com',,
  events => 'job_started, job_succeeded');
END;
/


A notificação a seguir será acionada somente se um Schedule falhar com um código de erro "600".

BEGIN
 DBMS_SCHEDULER.add_job_email_notification (
  job_name => 'teste_notificação_schedule',
  recipients => ‘destinatario@empresa.com',
  evento => 'job_failed',
  filter_condition => ':event.error_code=600');
END;
/


Para consultar as notificações configuradas utilizamos a tabela no usuário USER_SCHEDULER_NOTIFICATIONS.

01. Removendo Notificações de um Schedule

As notificações por email são removidas usando o procedimento REMOVE_JOB_EMAIL_NOTIFICATION . Além do parâmetro “job_name” - obrigatório, aceita também que sejam informados os parâmetros “recipients” e “events”. Em ambos os casos, se estes forem definidos como NULL (os valores padrão), presume-se que as notificações para todos os destinatários/eventos do Schedule específico devem ser removidas. Os exemplos abaixo mostram a remoção de uma notificação de evento específica e de todas as notificações de um Schedule específico.

Exemplo:

BEGIN
 DBMS_SCHEDULER.remove_job_email_notification (
  job_name => 'teste_notificação_job',
  recipients =>  ‘destinatario@empresa.com',
  evento => 'job_succeeded');
END;
/


Pra remover todas as notificações de um schedule:

BEGIN
 DBMS_SCHEDULER.remove_job_email_notification (
  job_name => 'teste_notificação_job');
END;
/