Árvore de páginas

Versões comparadas

Chave

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

Atualmente é possível realizar um monitoramento com envio de e-mails sobre mudanças no estado de um JOB agendado através do Scheduler Schedule do Oracle.

Atualmente é possível fazer o envio de e-mails para notificações sobre as execuções de Schedules no banco de dados Oracle. Para o envio dessas notificações precisamos realizar algumas configurações no schedule. Para isso algumas premissas precisam ser consideradas.

...

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.mycompany.com:25');
  DBMS_SCHEDULER.set_scheduler_attribute('email_sender', 'do_not_reply@mycompany.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.

...

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;