Oracle Scheduler: Muito mais que um simples agendador de tarefas – Parte 5
Este é o quinto artigo de uma série que trata da funcionalidade de agendamento de tarefas no Banco de Dados Oracle através da ferramenta Oracle Scheduler. Este artigo trata, através de exemplos práticos, da utilização de eventos para iniciar jobs. Esta técnica permite que um job seja iniciado independentemente do horário, mas sim com base em um acontecimento no banco de dados ou no sistema operacional. Para isso, faz uma breve introdução ao tema seguida de um tutorial que apresentará em detalhes como trabalhar com mais esta facilidade oferecida pelo Oracle.


Em que situação o tema é útil

O tema é útil quando se pretende trabalhar com o Scheduler para criar e executar jobs com base em acontecimentos no banco de dados, como valores armazenados em tabelas (estoque de um produto abaixo do limite mínimo, por exemplo) ou acontecimentos no sistema operacional, como a chegada de arquivos de consolidação de servidores espalhados nas filiais da empresa, por exemplo.

Em muitos casos não é possível definir uma data e horário específicos para que determinado job comece a executar, simplesmente por que a execução deste job não depende de um horário, mas sim de um acontecimento. É muito comum que exista a necessidade de execução de um job no momento em que a aplicação sinalizar que é necessário que o job seja iniciado como, por exemplo, um acesso indevido ao banco de dados, ou a alteração do salário de um funcionário ou ainda a quantidade de estoque de um determinado produto estar abaixo de um limite especificado.

Estes são apenas exemplos de eventos gerados pela aplicação que podem originar a necessidade de execução de um job. Mas há ainda os casos em que o evento não seja disparado pela aplicação, mas sim quando um arquivo especificado “chega” no sistema operacional.

Imagine, por exemplo, que vário sistemas, em vários servidores diferentes, “rodando” em COBOL (sim, muitos sistemas ainda usam o velho e bom COBOL) enviem arquivos de texto (os famosos flat files, ou simplesmente os .txt) para o servidor de banco de dados para consolidação de informações das filiais.

Uma série de fatores podem fazer com que estes arquivos não “cheguem” ao servidor de banco de dados em horários pré-definidos, colocando abaixo qualquer tentativa de utilização de jobs baseados em calendário para processarem estes arquivos. Este é um exemplo de evento de chegada de arquivo no sistema operacional.

Para ambos os casos (evento gerado pela aplicação ou chegada de arquivo no sistema operacional) é possível configurar jobs que serão iniciados quando estes eventos acontecerem, independentemente de qualquer calendário.

Para o caso dos eventos gerados pela aplicação é necessário configurar o job para ser executado com base em uma condição de evento (EVENT_CONDITION). Com uma condição de evento definida, um calendário deixa de ser necessário e toda vez que esta condição for satisfeita o banco de dados dispara um evento que o job interpretará e tomará a ação necessária (conforme configurado).

Já no caso de arquivos que “cheguem” ao sistema operacional a Oracle criou um novo objeto, chamado file watcher, que monitora o diretório especificado e dispara um evento assim que um novo arquivo “chegue” ao sistema operacional. Com o evento disparado, o job configurado para tal evento inicia sua execução e, como esperado, toma a ação necessária.

No primeiro e segundo artigos desta série sobre o Oracle Scheduler apresentei, de forma conceitual, todos os objetos que compõem esta solução completa de agendamento e gerenciamento de tarefas no banco de dados Oracle.

Ainda no segundo e, exclusivamente, no terceiro artigos apresentei, em detalhes, tudo o que é necessário para se trabalhar com jobs, que são “a alma” do Oracle Scheduler, mas não é só isso. No quarto artigo apresentei todos os detalhes do objeto program, que dá ainda mais “poder” à execução dos jobs, e também apresentei o objeto Schedule (ou Agenda), que serve para definir quando um job deve ser executado.

Vimos praticamente todas as funcionalidades de um Schedule, mas há ainda uma funcionalidade que é utilização de eventos para iniciar jobs. Esta funcionalidade oferece ainda mais poder na utilização de schedules, permitindo associar a execução de um job a algo que aconteça no bando de dados ou sistema operacional e não a um determinado horário pré-definido.

Utilização de eventos para iniciar a execução de um job

Um evento é uma “mensagem” enviada por um processo da aplicação ou do sistema para outro processo para indicar que alguma ação ou ocorrência foi detectada. Um evento é gerado (enviado) por uma aplicação ou processo, e consumida (recebido) por um ou mais aplicações ou processos.

Existem dois tipos de eventos recebidos pelo Scheduler:

· Eventos gerados pela aplicação: uma aplicação pode gerar um evento que será recebido pelo Scheduler. O Scheduler reage ao evento, iniciando um job. Por exemplo, quando um sistema de rastreamento de inventário percebe que determinado produto esteja abaixo de um certo limite, pode gerar um evento que inicie um job de reposição de estoques;

· Eventos de chegada de arquivos, gerados por um file watcher (visto na primeira parte deste artigo, publicado na SQL Magazine 105): é possível criar um file watcher para verificar a chegada de um arquivo em um sistema. Pode-se configurar um job para iniciar quando o file watcher detecta a presença do arquivo. Por exemplo, um data warehouse para uma cadeia de lojas carrega dados no final do dia com base nos relatórios de receitas carregados a partir dos sistemas de ponto-de-venda das lojas. O job de carga de dados do data warehose é iniciado cada vez que um novo relatório de fim de dia chega.

Iniciando um job através de eventos gerados pela aplicação

A aplicação pode gerar um evento para notificar o Scheduler para iniciar um job. Um job iniciado desta maneira é conhecido como uma tarefa baseada em eventos (event-based job). É possível criar um schedule que faça referência a um evento ao invés de fazer referência a uma data, hora e informações de recorrência. Se um job é definido como sendo baseado em eventos, o mesmo é executado toda vez que o evento é gerado.

Para gerar um evento para notificar o Scheduler para iniciar um job, a aplicação enfileira a mensagem na fila do Oracle ...

Quer ler esse conteúdo completo? Tenha acesso completo