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.
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.

Deixe um comentário