Pular para o conteúdo
  • Este tópico contém 30 respostas, 2 vozes e foi atualizado pela última vez 6 anos, 10 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 15 posts - 16 até 30 (de 31 do total)
  • Autor
    Posts
  • #109052
    Avatar de airoospairoosp
    Participante

      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.

      #109053
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Se 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

        #109054
        Avatar de airoospairoosp
        Participante

          Chiappa,

          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

          #109055
          Avatar photoJosé Laurindo Chiappa
          Moderador

            Como 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

            #109056
            Avatar de airoospairoosp
            Participante

              Chiappa,

              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.

              #109057
              Avatar photoJosé Laurindo Chiappa
              Moderador

                Sim, 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

                #109062
                Avatar de airoospairoosp
                Participante

                  Chiappa,

                  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

                  #109063
                  Avatar de airoospairoosp
                  Participante

                    Chiappa,

                    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

                    #109064
                    Avatar photoJosé Laurindo Chiappa
                    Moderador

                      Na 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 ?

                      #109065
                      Avatar de airoospairoosp
                      Participante

                        Chiappa,

                        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_date

                        #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

                          #109067
                          Avatar photoJosé Laurindo Chiappa
                          Moderador

                            E 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

                            #109069
                            Avatar de airoospairoosp
                            Participante

                              Chiappa,

                              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_date

                              Retorna as informações conforme anexo. É possível ver que as alterações no agendamento acontecem, mas a execução das procedures não.

                              Attachments:
                              #109070
                              Avatar photoJosé Laurindo Chiappa
                              Moderador

                                Tá, 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

                                #109071
                                Avatar de airoospairoosp
                                Participante

                                  Chiappa,

                                  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

                                Visualizando 15 posts - 16 até 30 (de 31 do total)
                                • Você deve fazer login para responder a este tópico.
                                plugins premium WordPress