Olá pessoal,
Tudo bem?
Estava trabalhando num cliente que gostaria de agendar um shell script para ser executado toda quinta-feira às 9:00 para remover traces antigos.
O cliente possuía um requisito: não queria agendamento pela Cron, mas sim pelo DBMS_SCHEDULER.
Vamos primeiro criar o schedule para execução toda quinta-feira às 9:00 horas.
BEGIN DBMS_SCHEDULER.CREATE_SCHEDULE ( repeat_interval => 'FREQ=WEEKLY;BYTIME=090000;BYDAY=THU', schedule_name => 'EVERY_THURSDAY_9AM'); END; /
Como se trata de um shell script a ser executado, precisamos criar um programa pelo DBMS_SCHEDULER, que aponta para o shell script.
Vamos criar e ativar o programa:
BEGIN DBMS_SCHEDULER.create_program( program_name => 'PRG_REMOVE_OLD_TRACES', program_action => '/home/oracle/scripts/remove_old_traces.sh', program_type => 'EXECUTABLE', number_of_arguments => 0, comments => 'Program to run remove_old_traces.sh', enabled => FALSE); DBMS_SCHEDULER.ENABLE(name=>'PRG_REMOVE_OLD_TRACES'); END; /
Por fim, vamos criar e ativar o job, que utilizará o programa criado anteriormente, assim como o schedule criado anteriormente, além de ativar o logging full para a execução desse job:
BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'JOB_REMOVE_OLD_TRACES', program_name => '"SYS"."PRG_REMOVE_OLD_TRACES"', schedule_name => '"SYS"."EVERY_THURSDAY_9AM"', enabled => FALSE, auto_drop => TRUE, comments => '', job_style => 'REGULAR'); DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'JOB_REMOVE_OLD_TRACES', attribute => 'store_output', value => TRUE); DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'JOB_REMOVE_OLD_TRACES', attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_FULL); DBMS_SCHEDULER.enable( name => 'JOB_REMOVE_OLD_TRACES'); END; /
Espero que seja útil.
Um abraço,
Vinicius