- This topic has 30 replies, 2 voices, and was last updated 7 years ago by José Laurindo Chiappa.
-
AuthorPosts
-
1 de novembro de 2017 at 11:32 pm #109052airoospParticipant
Chiappa,
Fiz um outro teste pesquisando mais sobre o assunto.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => ‘TESTE13’,
job_type => ‘CHAIN’,
job_action => ‘TESTE_GRAVA’,
repeat_interval => ‘freq=MINUTELY;INTERVAL=5’,
enabled => TRUE);
END;Job criado, depois executo:
BEGIN
DBMS_SCHEDULER.STOP_JOB(‘TESTE13’);
END;E depois:
BEGIN
DBMS_SCHEDULER.RUN_JOB(‘TESTE13’,FALSE);
END;Ai ele aparece corretamente com o campo next_run_date com 5 minutos a mais, só que não executa após os 5 minutos.
2 de novembro de 2017 at 12:36 am #109053José Laurindo ChiappaModeratorSe quando vc força a rodagem do JOB com o DBMS_SCHEDULER.RUN_JOB o job roda mas quando vc programa a execução não vai direito, pra mim OU tem alguma falha no seu procedimento OU é bug na sua versão…
A primeira coisa, REPETE o meu exemplo, fazendo PASSO A PASSO tudo que eu fiz (INCLUSIVE criando as procedures SIMPLES, DE TESTE, que criei, cria os steps, tudo by the book) e veja o que acontece : se rodar ok, tá comprovada alguma falha no seu procedimento, se não rodar tá comprovado bug…[]s
Chiappa
6 de novembro de 2017 at 6:49 pm #109054airoospParticipantChiappa,
Executei todas as etapas seguindo os procedimentos que você fez, e realmente o job só é executado uma vez.
Há um outro job que funciona corretamente usando um scheduler com agendamento para ser executado a cada 1 hora. Este funciona direito.
A diferença entre este que funciona e o outro que não funciona, é o chain.
Obrigado.
Airton
6 de novembro de 2017 at 8:08 pm #109055José Laurindo ChiappaModeratorComo eu mostrei na minha resposta anterior (ela é um copy/paste do procedimento que fiz via sqlplus) deveria funcionar 100% : e mais, o JOB CHAIN não é um recurso licenciado à parte ou coisa assim : se vc fez o passo-a-passo Exato que eu mostrei, com as MESMAS procedures simples de teste que usei e não obteve o mesmo Resultado imho tá mais que comprovado um BUG no recurso de JOB CHAIN no teu ambiente/SO/versão do RDBMS, pode abrir um Chamado e forneça esse mesmo teste simples que forneci e vc tentou reproduzir sem sucesso pro Suporte Oracle : só eles vão poder ajudar na correção…
Enquanto vc providencia a correção do tal bug/comportamento errático com a ajuda do Suporte Oracle, nesse meio tempo acredito que a alternativa possível para que a tal tool de monitoração tome ciência da Execução do job acho que seria mesmo ela fazer Queries constantes no banco de dados (a cada 5 minutos talvez) consultando as views de logs de Execução dos jobs…
[]s
Chiappa
6 de novembro de 2017 at 11:07 pm #109056airoospParticipantChiappa,
Os testes você vez no banco 11g XE, linux, certo?
Aqui estou fazendo com o 11g R2 (11.2.0.4) Standard Edition em Windows Server 2012.
7 de novembro de 2017 at 12:40 am #109057José Laurindo ChiappaModeratorSim, meu teste foi num XE 11gR2 (o XE 11gR2 é baseado no código do SE 11.2.0.2), no meu notebook pessoal com Windows 8.1 de 64 bits….
Como teste, se quiser vc pode também reproduzir meu exemplo em qquer outra Edition/versão/release de 11g ou de 12c que vc tenha aí (iirc no 10G a anteriores não tinha Chain), nalguma máquina de estudos / pessoal sua : até por isso passei os GRANTs, os CREATE TABLEs. CREATE PROCEDUREs, a criação, permissão e Ativação do Chain e do JOB que dispara o Chain…
[]s
Chiappa
7 de novembro de 2017 at 7:38 pm #109062airoospParticipantChiappa,
Criei os exemplos em uma máquina XE 11g e a execução do job funcionou, só que apenas 1 vez, e no campo NEXT_RUN_DATE ficou registrada apenas a primeira execução, isto é, não executou a cada 5 minutos que foi a configuração feita.
Entendo que deveria ser executado a cada 5 minutos.
Estou pesquisando mais sobre o assunto.
Obrigado.
Airton
8 de novembro de 2017 at 2:07 am #109063airoospParticipantChiappa,
Pesquisando mais sobre o assunto do dbms_scheduler, vi que o problema de não estar executando o job após a primeira execução, pode ser por causa do horário não estar definido com o timezone.
Ao executar a consulta abaixo,
select extract(timezone_region from current_timestamp) from dual
O resultado é: UNKNOWN
Não teria que voltar algo parecido com America/Denver, America/Phoenix, US…
http://www.snapdba.com/2014/10/dbms_scheduler-jobs-running-an-hour-late-dstbst-issues/#.WgIjPWhSxpg
Obrigado.
Airton
8 de novembro de 2017 at 4:10 pm #109064José Laurindo ChiappaModeratorNa verdade não deve ser isso o problema, https://community.oracle.com/thread/3689051?start=0&tstart=0 já registra que isso pode acontecer se o banco não tem todos os patches de TZ, e acontece no meu, onde o CHAIN JOB rodou ok :
SCOTT:@XE:SQL>select extract(timezone_region from current_timestamp) from dual;
EXTRACT(TIMEZONE_REGIONFROMCURRENT_TIMESTAMP)
UNKNOWN
SCOTT:@XE:SQL>SELECT SYSTIMESTAMP FROM DUAL;
SYSTIMESTAMP
08/11/17 09:11:32,006000 -02:00
SCOTT:@XE:SQL>SELECT EXTRACT(TIMEZONE_HOUR FROM SYSTIMESTAMP)||’:’||
2 EXTRACT(TIMEZONE_MINUTE FROM SYSTIMESTAMP)
3 FROM dual;EXTRACT(TIMEZONE_HOURFROMSYSTIMESTAMP)||’:’||EXTRACT(TIMEZONE_MINUTEFROMSYSTIMEST
-2:0
SCOTT:@XE:SQL>
==> O que eu vi na documentação foi outra coisa, é que se vc criar um CHAIN sem um step de END e com TIMEOUT null em algumas circunstâncias o JOB pode ficar STALLED : manda (num SQL DEVELOPER ou outra GUI do tipo, já que o resultset vai ser bem largo) uns :
SELECT * FROM DBA_SCHEDULER_JOBS;
select * from DBA_SCHEDULER_RUNNING_JOBS;
select * from DBA_SCHEDULER_JOB_LOG;
select * from DBA_SCHEDULER_JOB_RUN_DETAILS;e veja se vc vê para o JOB que dispara o CHAIN alguma coluna com valor de BROKEN, ou STALLED, ou com FAILURES > 0, ou coisa do tipo…
Eu vou tentar adicionar um STEP com ACTION de END ou então desnulificar o parâmetro de TIMEOUT, vamos ver se é isso… Tenta aí também, e vamos ver..
[]s
Chiappa
OBS : ao que entendo, vc tem *** OUTRO(s) Scheduler JOBs já rodando ok, então a issue é mesmo relacionada com CHAIN, certo ?
8 de novembro de 2017 at 6:10 pm #109065airoospParticipantChiappa,
Verificando as informações da View dba_scheduler_jobs, o campo state tem o valor CHAIN_STALLED para o job que foi criado.
Pesquisando sobre CHAIN_STALLED vi que isso ocorre quando não é definido no CHAIN o evaluation_interval.
“The job is of type chain and has no steps running, no steps scheduled to run, and no event steps waiting on an event, and the chain evaluation_interval is set to NULL. No progress will be made in the chain unless there is manual intervention.”
https://docs.oracle.com/cd/B28359_01/server.111/b28310/schedadmin002.htm#ADMIN12038
Criei o job:
BEGIN
dbms_scheduler.create_job(job_name => ‘SCOTT.CHAIN_JOB_11’,
job_type => ‘CHAIN’,
job_action => ‘chain1′,
start_date => to_date(’08-11-2017 11:46:39’, ‘dd-mm-yyyy hh24:mi:ss’),
repeat_interval => ‘Freq=MINUTELY;Interval=5’,
end_date => to_date(null),
job_class => ‘DEFAULT_JOB_CLASS’,
enabled => true,
auto_drop => false,
comments => ”);
END;
/E no CHAIN alterei o atributo conforme abaixo:
BEGIN
dbms_scheduler.set_attribute(
name => ‘CHAIN1’,
attribute => ‘evaluation_interval’,
value => numtodsinterval(5,’minute’)
);
END;
/Depois disso, ao executar novamente a consulta abaixo, é possível ver que o campo NEXT_RUN_DATE, esta sendo atualizado. Só que as duas procedures que são executadas pelo CHAIN1, não estão sendo executadas.
select job_name, program_name, enabled, run_count, auto_drop, failure_count, start_date, last_start_date,
last_run_duration, next_run_date
from user_scheduler_jobs
order by start_date8 de novembro de 2017 at 8:04 pm #109066José Laurindo ChiappaModeratorNeca, eu estou usando Exatamente o mesmo XE, então OU vc tem uma má-conffiguração geral aí (improvável mas não Impossível, EM ESPECIAL se teu servidor tá numa timezone customizada) OU vc ** pulou ** algum dos passos, Principalmente o ENABLE dos programs ou do CHAIN…
Pra tirar a dúvida, Faz o procedimento abaixo NO SQLPLUS (abre duas janelas sqlplus, uma com SCOTT (ou seja qual for o usuário não-SYSDBA que vc vai usar pra criar as procedures, a tabela, o CHAIN e o JOB) e depois copia e cola pra gente poder criticar, que nem eu fiz antes e faço agora :=> não mostro aqui mas dropei o JOB anterior e o chain anterior… Depois, apenas por questão de Ordem, repito aqui os GRANTs que devem ser dados, de modo que vc confira que não esqueceu NENHUM :
SYS:AS SYSDBA@XE:SQL>grant SELECT on DBA_SCHEDULER_JOBS to SCOTT;
Concessão bem-sucedida.
SYS:AS SYSDBA@XE:SQL>grant SELECT on DBA_SCHEDULER_CHAINS to scott;
Concessão bem-sucedida.
SYS:AS SYSDBA@XE:SQL>grant CREATE JOB to scott;
Concessão bem-sucedida.
SYS:AS SYSDBA@XE:SQL>grant CREATE EVALUATION CONTEXT to scott;
Concessão bem-sucedida.
SYS:AS SYSDBA@XE:SQL>grant CREATE RULE SET to scott;
Concessão bem-sucedida.
SYS:AS SYSDBA@XE:SQL>grant CREATE RULE to scott;
Concessão bem-sucedida.
SYS:AS SYSDBA@XE:SQL>
==> agora confirmo que tenho JOB QUEUES ativos :
SYS:AS SYSDBA@XE:SQL>show parameters job
NAME TYPE VALUE
job_queue_processes integer 4
SYS:AS SYSDBA@XE:SQL>==> ok, vamos criar passo-a-passo : PLEASE conecte VIA SQLPLUS no seu XE com o usuário SCOTT (ou seja qual for o user que vai criar tudo E que recebeu os privs no passo anterior) ** e ** nos mostre um copy/paste de tudo abaixo, que nem vou fazer :
SCOTT:@XE:SQL>alter session SET NLS_DATE_FORMAT=’DD/MM/YYYY HH24:MI:SS’;
Sessão alterada.
SCOTT:@XE:SQL>ALTER SESSION SET NLS_TIMESTAMP_FORMAT = ‘DD/MM/YYYY HH24:MI:SS.FF’;
Sessão alterada.
SCOTT:@XE:SQL>
SCOTT:@XE:SQL>create table TAB_LOG2(C1 varchar2(200));
Tabela criada.
SCOTT:@XE:SQL>create table TAB_LOG2(C1 varchar2(200));
Tabela criada.
SCOTT:@XE:SQL>create OR REPLACE procedure PROCEDURE11 is
2 BEGIN
3 insert into TAB_LOG2 values(‘PROCEDURE11 executou em:’ || to_char(sysdate, ‘dd/mm/yyyy hh24:mi:ss’) || ‘!!’);
4 commit;
5 END;
6 /Procedimento criado.
SCOTT:@XE:SQL>create OR REPLACE procedure PROCEDURE22 is
2 BEGIN
3 insert into TAB_LOG2 values(‘PROCEDURE22 executou em:’ || to_char(sysdate, ‘dd/mm/yyyy hh24:mi:ss’) || ‘!!’);
4 commit;
5 END;
6 /Procedimento criado.
SCOTT:@XE:SQL>
==> e crio as dependências e o CHAIN em si – perceba que os Programs inicialmente vão ser criados NOT ENABLED, mas eu ** vou ** os Habilitar mais tarde :
SCOTT:@XE:SQL>BEGIN
2 sys.dbms_scheduler.create_program(
3 program_name => ‘SCOTT.PROGRAM11’,
4 program_action => ‘SCOTT.PROCEDURE11’,
5 program_type => ‘STORED_PROCEDURE’,
6 number_of_arguments => 0,
7 comments => NULL,
8 enabled => FALSE);
9 —
10 sys.DBMS_SCHEDULER.ENABLE(name=>’SCOTT.PROGRAM11′);
11 —
12 sys.dbms_scheduler.create_program(
13 program_name => ‘SCOTT.PROGRAM22’,
14 program_action => ‘SCOTT.PROCEDURE22’,
15 program_type => ‘STORED_PROCEDURE’,
16 number_of_arguments => 0,
17 comments => NULL,
18 enabled => FALSE);
19 —
20 sys.DBMS_SCHEDULER.ENABLE(name=>’SCOTT.PROGRAM22′);
21 END;
22 /Procedimento PL/SQL concluído com sucesso.
SCOTT:@XE:SQL>BEGIN
2 DBMS_SCHEDULER.CREATE_CHAIN (
3 chain_name => ‘CHAIN11’,
4 rule_set_name => NULL,
5 evaluation_interval => NULL,
6 comments => ‘CHAIN DE TESTE NO XE!!’);
7 END;
8 /Procedimento PL/SQL concluído com sucesso.
SCOTT:@XE:SQL>BEGIN
2 DBMS_SCHEDULER.DEFINE_CHAIN_STEP (
3 chain_name => ‘CHAIN11’,
4 step_name => ‘STEP11’,
5 program_name => ‘PROGRAM11’);
6 DBMS_SCHEDULER.DEFINE_CHAIN_STEP (
7 chain_name => ‘CHAIN11’,
8 step_name => ‘STEP22’,
9 program_name => ‘PROGRAM22’);
10 END;
11 /Procedimento PL/SQL concluído com sucesso.
SCOTT:@XE:SQL>
=> Definindo as Regras : aqui no caso vou usar uma regra SIMPLES, ie, que o step anterior se completou : veja no Manual que vc pode ter regras MUITO mais complexas, por exemplo que contenham um SELECT pra ver se a eventual ‘carga de dados’ feita antes se completou sem erros, pode ter uma validação de data/hora/dia da semana…. Vou NO SIMPLÃO, CRIANDO DUAS REGRAS SIMPLES: a primeira é TRUE e a ação é que o STEP11 startou, a segunda Exige que o STEP11 tenha completado antes de startar o STEP22 :
SCOTT:@XE:SQL>BEGIN
2 DBMS_SCHEDULER.DEFINE_CHAIN_RULE (
3 chain_name => ‘CHAIN11’,
4 condition => ‘TRUE’,
5 action => ‘START STEP11’,
6 rule_name => ‘RULE11’,
7 comments => ‘Rule para Start do Chain’);
8 —
9 DBMS_SCHEDULER.DEFINE_CHAIN_RULE (
10 chain_name => ‘CHAIN11’,
11 condition => ‘STEP11 completed’,
12 action => ‘START STEP22’,
13 rule_name => ‘RULE22’,
14 comments => ‘Rule Executando 2o Step do chain’);
15 —
16 DBMS_SCHEDULER.DEFINE_CHAIN_RULE (
17 chain_name => ‘CHAIN11’,
18 condition => ‘STEP22 completed’,
19 action => ‘END’,
20 comments => ‘Rule de Final do chain’,
21 rule_name => ‘FINISHED’);
22 END;
23 /Procedimento PL/SQL concluído com sucesso.
==> habilitando :
SCOTT:@XE:SQL>BEGIN
2 DBMS_SCHEDULER.ENABLE (‘CHAIN11′);
3 END;
4 /Procedimento PL/SQL concluído com sucesso.
SCOTT:@XE:SQL>
==> PRONTO, no que Habilitei o CHAIN os STEPs foram também habilitados E os programs também – penso que pode ter sido POR AQUI que vc errou :
SCOTT:@XE:SQL>select chain_name, RULE_SET_OWNER, RULE_SET_NAME, NUMBER_OF_RULES, NUMBER_OF_STEPS,
2 ENABLED, COMMENTS from DBA_SCHEDULER_CHAINS where owner=’SCOTT’
3 and chain_name=’CHAIN11′
4 ;CHAIN_NAME RULE_SET_OWNER RULE_SET_NAME NUMBER_OF_RULES NUMBER_OF_STEPS
ENABL COMMENTS
CHAIN11 SCOTT SCHED_RULESET$1 3 2
TRUE CHAIN DE TESTE NO XE!!SCOTT:@XE:SQL>
=> veja que NÂO TEM SKIP em nenhum step, não tem PAUSE, não tem TIMEOUT, E tem uma RULE final com ACTION de END, para evitar que o CHAIN fique permanentemente rodando… No caso, como não dei GRANT nas views DBA_xxx de STEPs e de PROGRAMs faço a consulta com SYS mesmo :
SYS:AS SYSDBA@XE:SQL>select STEP_name, program_owner, program_name, skip, pause, step_type, timeout
2 from dba_scheduler_chain_steps where chain_name=’CHAIN11′ order by 1;STEP_NAME
PROGRAM_OWNER
PROGRAM_NAME
SKIP PAUSE STEP_TYPE TIMEOUT
STEP11
SCOTT
PROGRAM11
FALSE FALSE PROGRAMSTEP22
SCOTT
PROGRAM22
FALSE FALSE PROGRAMSYS:AS SYSDBA@XE:SQL>
SYS:AS SYSDBA@XE:SQL>select PROGRAM_NAME, PROGRAM_TYPE, PROGRAM_ACTION, ENABLED, DETACHED, MAX_RUNS, MAX_FAILURES, MAX_RUN_DURATION,
2 NLS_ENV, COMMENTS FROM DBA_SCHEDULER_PROGRAMS WHERE PROGRAM_NAME LIKE ‘PROGRAM__’ ORDER BY 1
3 ;PROGRAM_NAME PROGRAM_TYPE
PROGRAM_ACTION
ENABL DETAC MAX_RUNS MAX_FAILURES MAX_RUN_DURATION
NLS_ENV
COMMENTS
PROGRAM11 STORED_PROCEDURE
SCOTT.PROCEDURE11
TRUE FALSE
NLS_LANGUAGE=’BRAZILIAN PORTUGUESE’ NLS_TERRITORY=’BRAZIL’ NLS_CURRENCY=’R$’ NLS_ISO_CURRENCY=’BRAZIL’ NLS_NUMERIC_CHARACTERS=’,.
‘ NLS_CALENDAR=’GREGORIAN’ NLS_DATE_FORMAT=’DD/MM/YYYY HH24:MI:SS’ NLS_DATE_LANGUAGE=’BRAZILIAN PORTUGUESE’ NLS_SORT=’WEST_EUROPE
AN’ NLS_TIME_FORMAT=’HH24:MI:SSXFF’ NLS_TIMESTAMP_FORMAT=’DD/MM/YYYY HH24:MI:SS.FF’ NLS_TIME_TZ_FORMAT=’HH24:MI:SSXFF TZR’ NLS_TI
MESTAMP_TZ_FORMAT=’DD/MM/RR HH24:MI:SSXFF TZR’ NLS_DUAL_CURRENCY=’Cr$’ NLS_COMP=’BINARY’ NLS_LENGTH_SEMANTICS=’BYTE’ NLS_NCHAR_CO
NV_EXCP=’FALSE’PROGRAM22 STORED_PROCEDURE
SCOTT.PROCEDURE22
TRUE FALSE
NLS_LANGUAGE=’BRAZILIAN PORTUGUESE’ NLS_TERRITORY=’BRAZIL’ NLS_CURRENCY=’R$’ NLS_ISO_CURRENCY=’BRAZIL’ NLS_NUMERIC_CHARACTERS=’,.
‘ NLS_CALENDAR=’GREGORIAN’ NLS_DATE_FORMAT=’DD/MM/YYYY HH24:MI:SS’ NLS_DATE_LANGUAGE=’BRAZILIAN PORTUGUESE’ NLS_SORT=’WEST_EUROPE
AN’ NLS_TIME_FORMAT=’HH24:MI:SSXFF’ NLS_TIMESTAMP_FORMAT=’DD/MM/YYYY HH24:MI:SS.FF’ NLS_TIME_TZ_FORMAT=’HH24:MI:SSXFF TZR’ NLS_TI
MESTAMP_TZ_FORMAT=’DD/MM/RR HH24:MI:SSXFF TZR’ NLS_DUAL_CURRENCY=’Cr$’ NLS_COMP=’BINARY’ NLS_LENGTH_SEMANTICS=’BYTE’ NLS_NCHAR_CO
NV_EXCP=’FALSE’SYS:AS SYSDBA@XE:SQL>
==> veja acima que salvo se teu Windows for em Inglês ou tiver alguma Customização, o XE já DEVERIA ter assumido os NLS corretos…
==> agora o item 5 e final do manual (criar o JOB que dispara o CHAIN), que VAI SER CRIADO pelo mesmo usuário em questão :
SCOTT:@XE:SQL>BEGIN
2 DBMS_SCHEDULER.CREATE_JOB (
3 job_name => ‘CHAIN_JOB_11_MINUTELY’,
4 job_type => ‘CHAIN’,
5 job_action => ‘CHAIN11’,
6 repeat_interval => ‘freq=MINUTELY;INTERVAL=5’,
7 start_date => systimestamp,
8 enabled => TRUE);
9 END;
10 /Procedimento PL/SQL concluído com sucesso.
SCOTT:@XE:SQL>
==> ok, vamos ver os detalhes do JOB :
==> Ao consultar a DBA_SCHEDULER_JOBS via o SQL abaixo (onde tiro da consulta os JOBs internos do meu banco, que não me interessam no momento) tenho :
select OWNER,JOB_NAME,JOB_STYLE,JOB_CREATOR,JOB_TYPE,JOB_ACTION,SCHEDULE_TYPE,START_DATE,REPEAT_INTERVAL,END_DATE,JOB_CLASS,ENABLED,AUTO_DROP,
RESTARTABLE,STATE,JOB_PRIORITY,RUN_COUNT,MAX_RUNS,FAILURE_COUNT,MAX_FAILURES,RETRY_COUNT,LAST_START_DATE,LAST_RUN_DURATION,NEXT_RUN_DATE,MAX_RUN_DURATION,
LOGGING_LEVEL,STOP_ON_WINDOW_CLOSE,INSTANCE_STICKINESS,RAISE_EVENTS,SYSTEM,JOB_WEIGHT,NLS_ENV,SOURCE,NUMBER_OF_DESTINATIONS,DEFERRED_DROP,
ALLOW_RUNS_IN_RESTRICTED_MODE,COMMENTS from DBA_SCHEDULER_JOBS;OWNER JOB_NAME JOB_STYLE JOB_CREATOR JOB_TYPE JOB_ACTION SCHEDULE_TYPE START_DATE,REPEAT_INTERVAL END_DATE JOB_CLASS ENABLED AUTO_DROP RESTARTABLE STATE JOB_PRIORITY RUN_COUNT MAX_RUNS FAILURE_COUNT MAX_FAILURES,RETRY_COUNT LAST_START_DATE LAST_RUN_DURATION NEXT_RUN_DATE MAX_RUN_DURATION LOGGING_LEVEL STOP_ON_WINDOW_CLOSE INSTANCE_STICKINESS RAISE_EVENTS SYSTEM JOB_WEIGHT NLS_ENV SOURCE NUMBER_OF_DESTINATIONS DEFERRED_DROP ALLOW_RUNS_IN_RESTRICTED_MODE COMMENTS
SCOTT CHAIN_JOB_11_MINUTELY REGULAR SCOTT CHAIN CHAIN11 CALENDAR 08/11/17 12:19:36,974000000 -02:00 freq=MINUTELY;INTERVAL=5 DEFAULT_JOB_CLASS TRUE TRUE FALSE SCHEDULED 3 1 0 0 08/11/17 12:19:37,208000000 -02:00 +00 00:00:00.328000 08/11/17 12:24:37,000000000 -02:00 OFF FALSE TRUE FALSE 1 NLS_LANGUAGE=’BRAZILIAN PORTUGUESE’ NLS_TERRITORY=’BRAZIL’ NLS_CURRENCY=’R$’ NLS_ISO_CURRENCY=’BRAZIL’ NLS_NUMERIC_CHARACTERS=’,.’ NLS_CALENDAR=’GREGORIAN’ NLS_DATE_FORMAT=’DD/MM/YYYY HH24:MI:SS’ NLS_DATE_LANGUAGE=’BRAZILIAN PORTUGUESE’ NLS_SORT=’WEST_EUROPEAN’ NLS_TIME_FORMAT=’HH24:MI:SSXFF’ NLS_TIMESTAMP_FORMAT=’DD/MM/YYYY HH24:MI:SS.FF’ NLS_TIME_TZ_FORMAT=’HH24:MI:SSXFF TZR’ NLS_TIMESTAMP_TZ_FORMAT=’DD/MM/RR HH24:MI:SSXFF TZR’ NLS_DUAL_CURRENCY=’Cr$’ NLS_COMP=’BINARY’ NLS_LENGTH_SEMANTICS=’BYTE’ NLS_NCHAR_CONV_EXCP=’FALSE’ 1 FALSE FALSE
==> alguns minutos depois :
OWNER JOB_NAME JOB_STYLE JOB_CREATOR JOB_TYPE JOB_ACTION SCHEDULE_TYPE START_DATE,REPEAT_INTERVAL END_DATE JOB_CLASS ENABLED AUTO_DROP RESTARTABLE STATE JOB_PRIORITY RUN_COUNT MAX_RUNS FAILURE_COUNT MAX_FAILURES,RETRY_COUNT LAST_START_DATE LAST_RUN_DURATION NEXT_RUN_DATE MAX_RUN_DURATION LOGGING_LEVEL STOP_ON_WINDOW_CLOSE INSTANCE_STICKINESS RAISE_EVENTS SYSTEM JOB_WEIGHT NLS_ENV SOURCE NUMBER_OF_DESTINATIONS DEFERRED_DROP ALLOW_RUNS_IN_RESTRICTED_MODE COMMENTS
SCOTT CHAIN_JOB_11_MINUTELY REGULAR SCOTT CHAIN CHAIN11 CALENDAR 08/11/17 12:19:36,974000000 -02:00 freq=MINUTELY;INTERVAL=5 DEFAULT_JOB_CLASS TRUE TRUE FALSE SCHEDULED 3 2 0 0 08/11/17 12:24:37,013000000 -02:00 +00 00:00:00.344000 08/11/17 12:29:37,000000000 -02:00 OFF FALSE TRUE FALSE 1 NLS_LANGUAGE=’BRAZILIAN PORTUGUESE’ NLS_TERRITORY=’BRAZIL’ NLS_CURRENCY=’R$’ NLS_ISO_CURRENCY=’BRAZIL’ NLS_NUMERIC_CHARACTERS=’,.’ NLS_CALENDAR=’GREGORIAN’ NLS_DATE_FORMAT=’DD/MM/YYYY HH24:MI:SS’ NLS_DATE_LANGUAGE=’BRAZILIAN PORTUGUESE’ NLS_SORT=’WEST_EUROPEAN’ NLS_TIME_FORMAT=’HH24:MI:SSXFF’ NLS_TIMESTAMP_FORMAT=’DD/MM/YYYY HH24:MI:SS.FF’ NLS_TIME_TZ_FORMAT=’HH24:MI:SSXFF TZR’ NLS_TIMESTAMP_TZ_FORMAT=’DD/MM/RR HH24:MI:SSXFF TZR’ NLS_DUAL_CURRENCY=’Cr$’ NLS_COMP=’BINARY’ NLS_LENGTH_SEMANTICS=’BYTE’ NLS_NCHAR_CONV_EXCP=’FALSE’ 1 FALSE FALSE
*** nada *** de STALLED JOBS, okdoc ?? E consultando JOBs em execução via select * from DBA_SCHEDULER_RUNNING_JOBS; não trouxe nada, E consultando os logs da execução :
select * from DBA_SCHEDULER_JOB_RUN_DETAILS where job_name=’CHAIN_JOB_11_MINUTELY’ order by LOG_ID;
LOG_ID LOG_DATE OWNER JOB_NAME JOB_SUBNAME STATUS ERROR# REQ_START_DATE ACTUAL_START_DATE RUN_DURATION INSTANCE_ID SESSION_ID SLAVE_PID CPU_USED CREDENTIAL_OWNER CREDENTIAL_NAME DESTINATION_OWNER DESTINATION ADDITIONAL_INFO
7739 08/11/17 12:19:37,317000000 -02:00 SCOTT CHAIN_JOB_11_MINUTELY STEP11 SUCCEEDED 0 08/11/17 12:19:37,224000000 -02:00 08/11/17 12:19:37,317000000 -02:00 0 0:0:0.0 1 94,487 512 0:0:0.0 CHAIN_LOG_ID=”7738″, STEP_NAME=”STEP11″
7740 08/11/17 12:19:37,427000000 -02:00 SCOTT CHAIN_JOB_11_MINUTELY STEP22 SUCCEEDED 0 08/11/17 12:19:37,317000000 -02:00 08/11/17 12:19:37,427000000 -02:00 0 0:0:0.0 1 94,489 512 0:0:0.0 CHAIN_LOG_ID=”7738″, STEP_NAME=”STEP22″
7741 08/11/17 12:19:37,536000000 -02:00 SCOTT CHAIN_JOB_11_MINUTELY SUCCEEDED 0 08/11/17 12:19:37,000000000 -02:00 08/11/17 12:19:37,208000000 -02:00 0 0:0:0.0 1 94,491 512 0:0:0.0 CHAIN_LOG_ID=”7738″
7744 08/11/17 12:24:37,138000000 -02:00 SCOTT CHAIN_JOB_11_MINUTELY STEP11 SUCCEEDED 0 08/11/17 12:24:37,029000000 -02:00 08/11/17 12:24:37,138000000 -02:00 0 0:0:0.0 1 94,499 7744 0:0:0.0 CHAIN_LOG_ID=”7743″, STEP_NAME=”STEP11″
7745 08/11/17 12:24:37,248000000 -02:00 SCOTT CHAIN_JOB_11_MINUTELY STEP22 SUCCEEDED 0 08/11/17 12:24:37,138000000 -02:00 08/11/17 12:24:37,248000000 -02:00 0 0:0:0.0 1 94,501 7744 0:0:0.0 CHAIN_LOG_ID=”7743″, STEP_NAME=”STEP22″
7746 08/11/17 12:24:37,357000000 -02:00 SCOTT CHAIN_JOB_11_MINUTELY SUCCEEDED 0 08/11/17 12:24:37,000000000 -02:00 08/11/17 12:24:37,013000000 -02:00 0 0:0:0.0 1 94,503 7744 0:0:0.0 CHAIN_LOG_ID=”7743″==> E finalmente Olhando a minha tabela de LOGs :
SCOTT:@XE:SQL>select TO_DATE(to_char(substr(c1, -21, 19)), ‘DD/MM/YYYY HH24:MI:SS’) DT_EXEC, c1 from tab_log2 order by 1;
DT_EXEC C1
08/11/2017 12:19:37 PROCEDURE22 executou em:08/11/2017 12:19:37!!
08/11/2017 12:19:37 PROCEDURE11 executou em:08/11/2017 12:19:37!!
08/11/2017 12:24:37 PROCEDURE11 executou em:08/11/2017 12:24:37!!
08/11/2017 12:24:37 PROCEDURE22 executou em:08/11/2017 12:24:37!!c.q.d. … Executa PASSO-A-PASSO no sqlplus esta demo e mostra o copy/paste pra gente, que se vc não obter Exatamente o Mesmo resultado aí só mesmo o Suporte pra poder te ajudar mais…
[]s
Chiappa
8 de novembro de 2017 at 8:09 pm #109067José Laurindo ChiappaModeratorE reforço : ** atenção ** no passo dos DBMS_SCHEDULER.DEFINE_CHAIN_RULE, veja lá que eu DEFINI uma rule com ACTION de END, para encerrar o chain…. Como a doc diz, se vc não tiver uma RULE com isso no fecho do chain vc vai estar sujeito a TIMEOUT : de repente foi esse seu problema, até entrar em ação o timeout a próxima execução do job entrava e aí tinha Encavalamento…
[]s
Chiappa
8 de novembro de 2017 at 10:55 pm #109069airoospParticipantChiappa,
Criei o Chain conforme abaixo:
begin
dbms_scheduler.create_chain(chain_name => ‘CHAIN4’,
rule_set_name => ‘SCHED_RULESET$1’,
evaluation_interval => ‘0 00:05:00’,
comments => ‘My first chain’);dbms_scheduler.define_chain_step(chain_name => ‘CHAIN4’,
step_name => ‘STEP1’,
program_name => ‘PROGRAM1’);dbms_scheduler.define_chain_step(chain_name => ‘CHAIN4’,
step_name => ‘STEP2’,
program_name => ‘PROGRAM2’);dbms_scheduler.define_chain_rule(chain_name => ‘CHAIN4’,
rule_name => ‘RULE1’,
condition => ‘TRUE’,
action => ‘START “STEP1″‘,
comments => ‘start the chain’);dbms_scheduler.define_chain_rule(chain_name => ‘CHAIN4’,
rule_name => ‘RULE2’,
condition => ‘step1 SUCCEEDED’,
action => ‘START “STEP2″‘,
comments => ‘start step2’);dbms_scheduler.define_chain_rule(chain_name => ‘CHAIN4’,
rule_name => ‘FINISHED’,
condition => ‘STEP2 SUCCEEDED’,
action => ‘END’,
comments => ‘Rule de Final do chain’);dbms_scheduler.enable(name => ‘CHAIN4’);
end;
/begin
dbms_scheduler.create_job(job_name => ‘CHAIN_JOB_13’,
job_type => ‘CHAIN’,
job_action => ‘chain4′,
start_date => to_date(’08-11-2017 16:28:04’, ‘dd-mm-yyyy hh24:mi:ss’),
repeat_interval => ‘Freq=MINUTELY;Interval=5’,
end_date => to_date(null),
job_class => ‘DEFAULT_JOB_CLASS’,
enabled => true,
auto_drop => false,
comments => ”);
end;
/select job_name, program_name, enabled, run_count, auto_drop, failure_count, start_date, last_start_date,
last_run_duration, next_run_date
from user_scheduler_jobs
order by start_dateRetorna as informações conforme anexo. É possível ver que as alterações no agendamento acontecem, mas a execução das procedures não.
Attachments:8 de novembro de 2017 at 11:18 pm #109070José Laurindo ChiappaModeratorTá, mas ** cadê ** o teste copy/paste no SQLPLUS, que nem eu fiz, com os GRANTs e daí por diante, tudinho ?? EM ESPECIAL, como eu disse antes nesta thread, criando os PROGRAMS, dando os GRANTs necessários, criando a tabela de log, criando as procedures de teste que fazem um simples INSERT numa tabela de LOG ** E ** commitam… Que nem eu fiz ??
Pois só um teste passo-a-passo, repetindo EXATAMENTE e DETALHADAMENTE o mesmo procedimento que fiz no mesmo XE que vc usa é que pode se avaliar se é um problema genérico de CHAIN no seu ambiente ou não, se é algum procedimento que vc pulou… ok ??[]s
Chiappa
8 de novembro de 2017 at 11:33 pm #109071airoospParticipantChiappa,
Seguem abaixo os demais itens que foram criados.
create user SCOTT
default tablespace USERS
temporary tablespace TEMP
profile DEFAULT;grant select on DBA_SCHEDULER_CHAINS to SCOTT;
grant select on DBA_SCHEDULER_JOBS to SCOTT;grant connect to SCOTT;
grant resource to SCOTT;grant create evaluation context to SCOTT;
grant create job to SCOTT;
grant create rule to SCOTT;
grant create rule set to SCOTT;
grant unlimited tablespace to SCOTT;create procedure PROCEDURE1 is
BEGIN
insert into TAB_LOG(C1) values(‘PROCEDURE1 executou em:’ || to_char(sysdate, ‘dd/mm/yyyy’) || ‘!!’);
commit;
END;create procedure PROCEDURE2 is
BEGIN
insert into TAB_LOG(C1) values(‘PROCEDURE2 executou em:’ || to_char(sysdate, ‘dd/mm/yyyy’) || ‘!!’);
commit;
END;begin
dbms_scheduler.create_program(program_name => ‘PROGRAM1’,
program_type => ‘STORED_PROCEDURE’,
program_action => ‘PROCEDURE1’,
number_of_arguments => 0,
enabled => true,
comments => ”);
end;
/begin
dbms_scheduler.create_program(program_name => ‘PROGRAM2’,
program_type => ‘STORED_PROCEDURE’,
program_action => ‘PROCEDURE2’,
number_of_arguments => 0,
enabled => true,
comments => ”);
end;
/No seu ambiente o agendamento funcionou executando as etapas de acordo com o intervalo do período informado?
Executei as procedures separadamente e elas funcionam.
Obrigado.
Airton
-
AuthorPosts
- You must be logged in to reply to this topic.