Pular para o conteúdo
#109066
Avatar photoJosé Laurindo Chiappa
Moderador

    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