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] >