Friendão, fico contente de poder ter ajudado, e espero ter conseguido passar 
um pouco de conhecimento, sempre o objetivo aqui... De resto, não esquenta : 
quando inventarem o whisky por e-mail, manda pra gente um 18 aninhos que tá 
tudo certo :)..

 []s

  Chiappa

--- Em oracle_br@yahoogrupos.com.br, Rafael Mendonca <raffaell.ti77@...> 
escreveu
>
> Chiappa, sou seu fã.
> 
>  
> 
> ________________________________
>  De: J. Laurindo Chiappa <jlchiappa@...>
> Para: oracle_br@yahoogrupos.com.br 
> Enviadas: Quarta-feira, 24 de Julho de 2013 20:16
> Assunto: [oracle_br] Re: Ajuda sql de monitoramento de jobs.
>   
> 
> 
>  
>    
>  
> Colega, Absolutamente não é difícil : primeiro, talvez vc tenha pensado em 
> GROUP BY em algum momento (agrupando por JOB_NAME), e isso TOTALMENTE NÃO se 
> encaixa aqui : a questão é o GROUP BY *** faz um "SANDUÍCHE" dos n registros, 
> agrupando os n registros do grupo numa linha só... Nessa linha vc pode ter 
> uma CONTAGEM indicando quantos registros foram agrupados, pode ter um máximo, 
> um mínimo, uma média, etc, MAS o fato é que a informação individual é 
> logicamente eliminada, os N registros do grupo "viraram" um só.... 
> Isso não sendo possível, uma opção interessante é nós (dentro dos dados 
> ordenados por JOB_NAME), usarmos alguma alguma funcionalidade que atribua 
> (digamos) 1 para a primeira linha do JOB_NAME sendo lido, 2 para a segunda 
> execução, 3 para a terceira, etc, E QUE quando mudar de JOB_NAME resete a 
> contagem.... Aí ficaria MUITO FÁCIL, é só perguntar no WHERE para filtrar 
> esse "número de linha dependente do JOB_NAME" .... 
> Tal funcionalidade existe há MUUUUITO TEMPO (desde as priscas eras do Oracle 
> 8i), e é dada pelas funções analíticas - que, claro, servem para OUTRAS 
> coisas também... Na verdade, sempre que vc quer "processar a linha 
> anteriormente lida" - no seu caso para saber se mudou de JOB_NAME -, a 
> primeira coisa que se pensa é em alguma função analítica... 
> Vamos a um exemplinho (com os MEUS dados, no MEU database, que obviamente não 
> vão ser os mesmos que o seus) :
> 
> =>primeiro, vamos ver os dados brutos, só ordenados :
> 
> SYSTEM@o10gr2:SQL>SELECT
> JOB_NAME,
> STATUS,
> LOG_DATE
> FROM  DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS'
> order by job_name, log_date;
> 
> JOB_NAME                  STATUS     LOG_DATE
> ------------------------- ---------- --------------------------------
> RLM$EVTCLEANUP            SUCCEEDED  23/07/13 20:19:43,712000 -03:00
> RLM$EVTCLEANUP            SUCCEEDED  23/07/13 20:41:15,008000 -03:00
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 13:55:58,362000 -03:00
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 14:41:14,720000 -03:00
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 15:41:14,803000 -03:00
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 16:41:14,959000 -03:00
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 17:41:14,106000 -03:00
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 19:20:49,353000 -03:00
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 19:41:14,698000 -03:00
> RLM$SCHDNEGACTION         SUCCEEDED  23/07/13 20:19:43,962000 -03:00
> RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 13:55:58,939000 -03:00
> RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 14:53:34,171000 -03:00
> RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 15:51:10,220000 -03:00
> RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 16:48:46,115000 -03:00
> RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 17:46:22,135000 -03:00
> RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 19:20:50,180000 -03:00
> 
> 16 linhas selecionadas.
> 
> ==> legal : como eu falei acima, vamos Classificar , dar um número, para cada 
> linha com o mesmo JOB_NAME :
> 
> SYSTEM@o10gr2:SQL>SELECT
> JOB_NAME,
> STATUS,
> LOG_DATE,
> RANK() OVER(PARTITION BY JOB_NAME ORDER BY LOG_DATE) NUM_DA_EXEC
> FROM  DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS';
> 
> JOB_NAME                  STATUS     LOG_DATE                         
> NUM_DA_EXEC
> ------------------------- ---------- -------------------------------- 
> -----------
> RLM$EVTCLEANUP            SUCCEEDED  23/07/13 20:19:43,712000 -03:00    1
> RLM$EVTCLEANUP            SUCCEEDED  23/07/13 20:41:15,008000 -03:00    2
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 13:55:58,362000 -03:00    3
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 14:41:14,720000 -03:00    4
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 15:41:14,803000 -03:00    5
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 16:41:14,959000 -03:00    6
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 17:41:14,106000 -03:00    7
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 19:20:49,353000 -03:00    8
> RLM$EVTCLEANUP            SUCCEEDED  24/07/13 19:41:14,698000 -03:00    9
> RLM$SCHDNEGACTION         SUCCEEDED  23/07/13 20:19:43,962000 -03:00    1
> RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 13:55:58,939000 -03:00    2
> RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 14:53:34,171000 -03:00    3
> RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 15:51:10,220000 -03:00    4
> RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 16:48:46,115000 -03:00    5
> RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 17:46:22,135000 -03:00    6
> RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 19:20:50,180000 -03:00    7
> 
> 16 linhas selecionadas.
> 
> => Taí, EXATAMENTE o que queríamos : o RANK indica que vc vai ter uma 
> classificação dentro de um contador, o PARTITION BY JOB_NAME indica que o 
> contador vai ser em cima da coluna JOB_NAME (ier, assim que mudar o JOB_NAME 
> o contador é zerado, voltando a 1 no próximo JOB_NAME), e dentro de cada 
> JOB_NAME as linhas devem ser ordenadas por LOG_DATE, é o que o ORDER BY faz, 
> e essa "coluna" com o ranking, com a classificação da linha dentro de cada 
> JOB_NAME eu chamei de NUM_DA_EXEC.... 
> Agora é babinha , para ter apenas as 5 primeiras linhas dentro de cada 
> JOB_NAME é só pedir NUM_DA_EXEC < 6 , olha aí :
> 
> SYSTEM@o10gr2:SQL>select * from
> (
> SELECT
> JOB_NAME,
> STATUS,
> LOG_DATE,
> RANK() OVER(PARTITION BY JOB_NAME ORDER BY LOG_DATE) NUM_DA_EXEC
> FROM  DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS'
> )
> where NUM_DA_EXEC < 6;
> 
> JOB_NAME                  STATUS      LOG_DATE                          
> NUM_DA_EXEC
> ------------------------- ----------- --------------------------------- 
> -----------
> RLM$EVTCLEANUP            SUCCEEDED   23/07/13 20:19:43,712000 -03:00     1
> RLM$EVTCLEANUP            SUCCEEDED   23/07/13 20:41:15,008000 -03:00     2
> RLM$EVTCLEANUP            SUCCEEDED   24/07/13 13:55:58,362000 -03:00     3
> RLM$EVTCLEANUP            SUCCEEDED   24/07/13 14:41:14,720000 -03:00     4
> RLM$EVTCLEANUP            SUCCEEDED   24/07/13 15:41:14,803000 -03:00     5
> RLM$SCHDNEGACTION         SUCCEEDED   23/07/13 20:19:43,962000 -03:00     1
> RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 13:55:58,939000 -03:00     2
> RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 14:53:34,171000 -03:00     3
> RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 15:51:10,220000 -03:00     4
> RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 16:48:46,115000 -03:00     5
> 
> 10 linhas selecionadas.
> 
> E veja que eu POSSO SIM pedir num WHERE uma coluna que não é exibida, então 
> se quiser eu Poderia Sim ao invés de exibir tudo optar por Não Exibir a 
> coluna de classificação , veja :
> 
> SYSTEM@o10gr2:SQL>select JOB_NAME, STATUS, LOG_DATE from
> (
> SELECT
> JOB_NAME,
> STATUS,
> LOG_DATE,
> RANK() OVER(PARTITION BY JOB_NAME ORDER BY LOG_DATE) NUM_DA_EXEC
> FROM  DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS'
> )
> where NUM_DA_EXEC < 6;
> 
> JOB_NAME                  STATUS      LOG_DATE
> ------------------------- ----------- ---------------------------------
> RLM$EVTCLEANUP            SUCCEEDED   23/07/13 20:19:43,712000 -03:00
> RLM$EVTCLEANUP            SUCCEEDED   23/07/13 20:41:15,008000 -03:00
> RLM$EVTCLEANUP            SUCCEEDED   24/07/13 13:55:58,362000 -03:00
> RLM$EVTCLEANUP            SUCCEEDED   24/07/13 14:41:14,720000 -03:00
> RLM$EVTCLEANUP            SUCCEEDED   24/07/13 15:41:14,803000 -03:00
> RLM$SCHDNEGACTION         SUCCEEDED   23/07/13 20:19:43,962000 -03:00
> RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 13:55:58,939000 -03:00
> RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 14:53:34,171000 -03:00
> RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 15:51:10,220000 -03:00
> RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 16:48:46,115000 -03:00
> 
> 10 linhas selecionadas.
> 
> valews ?? Espero que esta abordagem passo-a-passo, mostrando as diferentes 
> "fases" da escrita de um SQl, tenha te sido útil, e que vc passe a contar com 
> uma ferramentinha a mais na sua caixa de ferramentas de programação...
> 
> []s
> 
> Chiappa
> 
> --- Em mailto:oracle_br%40yahoogrupos.com.br, Rafael Mendonca 
> <raffaell.ti77@> escreveu
> >
> > SELECT to_char(log_date, 'DD-MON-YY HH24:MI:SS') TIMESTAMP, job_name, 
> > status,
> >        SUBSTR(additional_info, 1, 300) ADDITIONAL_INFO
> >   FROM dba_scheduler_job_run_details 
> >  where owner = 'XUXA'
> >  ORDER BY log_date desc;
> >  
> >  
> > Pessoal, eu queria que essa consulta me retornasse as últimas 5 execuções 
> > por nome do JOB. Com essa consulta ele me mostra tudo.
> > Alguém poderia ajudar?
> > 
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> 
>    
>       
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a