Início > Oracle > Recriando JOB DBMS_SCHEDULER

Recriando JOB DBMS_SCHEDULER

Bom galera, voltando a postar aqui no meu BLOG, um problema que tive em meu trabalho aonde que o cliente solicitou verificasse 1 job que estava schedulado no Oracle e que não estava executando, ele executava um program, bom então vamos lá:

Primeiramente verificado que nos jobs schedulados do Oracle no BD e não encontrado o job mencionado na solicitação, segue:

SQL> SELECT JOB,SUBSTR(WHAT,1,35) as what,FAILURES,PRIV_USER, NEXT_DATE, NEXT_SEC, BROKEN FROM DBA_JOBS;

JOB WHAT                                  FAILURES PRIV_USER                      NEXT_DATE NEXT_SEC B
———- ———————————– ———- —————————— ——— ——– –
241 coleta;                       0 SYS                            06-APR-12 14:29:11 N

Há apenas 1 job schedulado no Oracle para execução

Verificado na crontab do Oracle e não encontrado nada schedulado referente a solicitação, segue:

oracle@:/home/oracle>crontab -l
00,05,15,20,25,35,40,50 * * * * /home/oracle/ibmdba/scripts/verificar_archives.sh EIS 80  >/dev/null
00,05,15,20,25,35,40,50 * * * * /home/oracle/ibmdba/scripts/verificar_archives_EIS93.sh EIS93 80  >/dev/null
oracle@:/home/oracle>

Verificado nas scheduled`s que o job se encontra no ambiente, segue:

SQL> select * from DBA_SCHEDULER_JOBS where JOB_NAME=’JOB_CONSOLIDAR_DEPARTAMENTOS’;

OWNER                          JOB_NAME                       JOB_SUBNAME                    JOB_CREATOR
—————————— —————————— —————————— ——————————
CLIENT_ID                                                        GLOBAL_UID
———————
WMSAP                          JOB_CONSOLIDAR_DEPARTAMENTOS                                  RIO
WMSAP
CONSOLIDAR_POR_DEPARTAMENTOS
FREQ=HOURLY                                                                                                                                              DEFAULT_JOB_CLASS              BROKEN
JOB DE EXECUCAO POR HORA
4196436

Bom tirei o cabeçalho pois ele é muito grande O mesmo está com o status broken, vamos analisar se gerou erro no alert log do banco de dados de posse do numero do job, procurei no Alert log

oracle@:/u00/app/oracle/admin/EIS/bdump>cat alert_EIS.log |grep 4196436
oracle@:/u00/app/oracle/admin/EIS/bdump>

Nada encontrei então procurei no banco mesmo

LOG_ID LOG_DATE                                                                    OWNER
———- ———————- ——————————
JOB_NAME                                                          JOB_SUBNAME                                                       JOB_CLASS
—————————————————————– ———————————————————
OPERATION                      STATUS                         USER_NAME                      CLIENT_ID
—————————— —————————— ——————————
GLOBAL_UID                       ADDITIONAL_INFO
——————————– ——————————-
24261 25-MAY-12 06.31.51.322178 AM -03:00                                         WMSAP
JOB_CONSOLIDAR_DEPARTAMENTOS                                                                                                        DEFAULT_JOB_CLASS
RUN                            SUCCEEDED

24322 28-MAY-12 11.11.41.077652 AM -03:00                                         WMSAP
JOB_CONSOLIDAR_DEPARTAMENTOS                                                                                                        DEFAULT_JOB_CLASS
BROKEN
REASON=”Job creator: RIO dropped”

Verificado que a razão de que o job não está mais executando é devido o criador do job ter sido dropado  REASON=”Job creator: RIO dropped”, Bom pela política de segurança da minha empresa eu não poderia recria-lo, então simplesmente teria que recriar o job na mão ou copia-lo ou extrair seu DDL, segue algumas tentativas:

Tentado copia-lo com a DBMS_SCHEDULER, segue:

begin
dbms_scheduler.copy_job(old_job =>’JOB_CONSOLIDAR_DEPARTAMENTOS’, new_job => ‘JOB_CONSOLIDAR_DEPARTAMENTOS2’);
end;
/

Executado porém esta copia do job ele realmente copia tudo e mantem toda a sua estrutura owner criado o que ele executa, como se funcionasse apenas para renomear algum job, então não atendeu aos meu requisitos o copy do JOB.
Bom então decidi tentar pelo modo mais dificil cria-lo na mão, verificado que o mesmo executa 1 program, então recriei ele desta maneira:

Begin
DBMS_SCHEDULER.create_job (
job_name             => ‘WMSAP.JOB_CONSOLIDAR_DEPARTAMENTOS’,
program_name         => ‘WMSAP.CONSOLIDAR_POR_DEPARTAMENTOS’,
START_DATE           => ’05-JUN-12 09.39.36.811043 AM AMERICA/SAO_PAULO’,
REPEAT_INTERVAL      => ‘FREQ=HOURLY’,
JOB_CLASS            => ‘DEFAULT_JOB_CLASS’,
ENABLED              => TRUE,
AUTO_DROP            => TRUE,
COMMENTS             => ‘JOB DE EXECUCAO POR HORA DE CONSOLIDACAO POR DEPARTAMENTOS’);
End;
/

Habilitado o JOB mesmo eu tendo passado para habilitar na criação do job, segue:

SQL> BEGIN DBMS_SCHEDULER.enable (name => ‘WMSAP.JOB_CONSOLIDAR_DEPARTAMENTOS’);
end;
/

– Executando com sucesso, o criador do job(JOB_CREATOR) ficou como sendo SYS pois fiz 1 conexão com SYS, bom até ai tudo bem, executou com sucesso na proxima scheduled do job demorou um pouco mais executou, segue log:

LOG_ID LOG_DATE                                                                    OWNER
———- ————————————————————————— ——————————
JOB_NAME                                                          JOB_SUBNAME                                                       JOB_CLASS
—————————————————————– ————————————————-
OPERATION                      STATUS                         USER_NAME                      CLIENT_ID
—————————— —————————— ——————————
GLOBAL_UID                       ADDITIONAL_INFO
——————————– ———————————————-
24479 05-JUN-12 08.21.06.602887 PM -03:00                                         WMSAP
JOB_CONSOLIDAR_DEPARTAMENTOS                                                                                                        DEFAULT_JOB_CLASS
RUN                            SUCCEEDED

– Porém tem 1 meio mais facil de que ficar se matando para criar na mão o job, consegui extrair o DDL do job, segue comando:

SQL> set long 99999999
SQL> SELECT dbms_metadata.get_ddl(‘PROCOBJ’,’JOB_CONSOLIDAR_DEPARTAMENTOS’, ‘WMSAP’) from dual;

DBMS_METADATA.GET_DDL(‘PROCOBJ’,’JOB_CONSOLIDAR_DEPARTAMENTOS’,’WMSAP’)
——————————————————————————–

BEGIN
dbms_scheduler.create_job(‘”JOB_CONSOLIDAR_DEPARTAMENTOS”‘,
program_name=>'”CONSOLIDAR_POR_DEPARTAMENTOS”‘,
start_date=>’05-JUN-12 09.39.36.811043 AM AMERICA/SAO_PAULO’, repeat_interval=>

‘FREQ=HOURLY’
, end_date=>NULL,
job_class=>'”DEFAULT_JOB_CLASS”‘, enabled=>FALSE, auto_drop=>TRUE,comments=>
‘JOB DE EXECUCAO POR HORA DE CONSOLIDACAO POR DEPARTAMENTOS’
);
dbms_scheduler.enable(‘”JOB_CONSOLIDAR_DEPARTAMENTOS”‘);
COMMIT;
END;

Bom é isso galera só para documentar este problema.
Abraço!

Categorias:Oracle
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: