Implementando novamente o PURGE_LOG JOB

Este artigo tem como objetivo implementar novamente o JOB no Scheduler o PURGE_LOG que pode estar com a data errada e por uma exclusão errônea.
Vamos iniciar verificando o JOB.

SQL> set lines 155
SQL> set lines 500
SQL> col OWNER for a20
SQL> select OWNER, JOB_NAME, NEXT_RUN_DATE, STATE from dba_scheduler_jobs where JOB_NAME='PURGE_LOG';

OWNER                JOB_NAME                       NEXT_RUN_DATE                                                               STATE
-------------------- ------------------------------ --------------------------------------------------------------------------- ---------------
SYS                  PURGE_LOG                      23-JAN-29 03.00.00.900000 AM AMERICA/SAO_PAULO                              SCHEDULED

SQL>

Podemos perceber acima que o agendamento do JOB está para 2029.
Este pode ser um erro ocorrido devido a mudança de horário de verão com data errada ou ajustes de horários no sistema operacional errônea.
Vamos corrigir o JOB excluindo-o e reagendando-o novamente.

SQL> exec sys.dbms_scheduler.drop_job(job_name => '"SYS"."PURGE_LOG"');

PL/SQL procedure successfully completed.

SQL> select OWNER, JOB_NAME, NEXT_RUN_DATE, STATE from dba_scheduler_jobs where JOB_NAME='PURGE_LOG';

no rows selected

SQL> !

Dentro do arquivo execsch.sql que se encontra no diretório $ORACLE_HOME/rdbms/admin/ encontra-se todos os jobs que são criados para a janela de manutenção do banco de dados Oracle.
Vamos abrir ele e localizar o job “Create purge log job”.
Com o comandos less, vi, more, cat podes identificar o job. Utilizei o comando less.
Vamos então acessar o arquivo.

oracle=dbprod-> cd /oraprd01/app/oracle/product/11.2.0/db_2/rdbms/admin/
oracle=dbprod-> less execsch.sql
oracle=dbprod-> exit
exit

Copiado o PL/SQL para criar o JOB (Create purge log job) basta executar no sqlplus conforme abaixo.
Vamos executar o PL/SQL e verificar o JOB.

SQL> -- Create purge log job
SQL> BEGIN
  2    sys.dbms_scheduler.create_job(
  3      job_name=>'PURGE_LOG',
  4      program_name=>'purge_log_prog',
  5      schedule_name=>'DAILY_PURGE_SCHEDULE',
  6      job_class=>'DEFAULT_JOB_CLASS',
  7      enabled=>TRUE,
  8      auto_drop=>FALSE,
    comments=>'purge log job');
  9   10    sys.dbms_scheduler.set_attribute('PURGE_LOG','FOLLOW_DEFAULT_TIMEZONE',TRUE);
 11  exception
 12    when others then
 13      if sqlcode = -27477 then NULL;
 14      else raise;
 15      end if;
 16  END;
 17  /

PL/SQL procedure successfully completed.

SQL>  select OWNER, JOB_NAME, NEXT_RUN_DATE, STATE from dba_scheduler_jobs where JOB_NAME='PURGE_LOG';

OWNER                JOB_NAME                       NEXT_RUN_DATE                                                               STATE
-------------------- ------------------------------ --------------------------------------------------------------------------- ---------------
SYS                  PURGE_LOG                      23-JAN-13 03.00.00.300000 AM AMERICA/BELEM                                  SCHEDULED

SQL> select current_timestamp from dual;

CURRENT_TIMESTAMP
---------------------------------------------------------------------------
22-JAN-13 05.35.20.217054 PM -02:00

SQL>

Podemos perceber acima que o JOB executará às 03:00 horas do dia 23/01/2013.
Pronto implementamos novamente o JOB PURGE_LOG com a data correta.

%name Implementando novamente o PURGE LOG JOB

Autor: Maycon Tomiasi

Formado em Tecnologia da Informação na FIPP (Faculdade de Informática de Presidente Prudente), Analista DBA Oracle pela Teiko Soluções em Tecnologia da Informação, residente em Blumenau/ SC, Certificado OCP 10g/11g/12c, OCS 11g Implementation, OCE 11g Performance Tuning, OCE 11g RAC & GRID e OPN Specialist. Conhecimentos em PHP.