Neca, 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 PROGRAM
STEP22
SCOTT
PROGRAM22
FALSE FALSE PROGRAM
SYS: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