Preciso monitorar por procedure das procedures de carga em tempo de execução e através de uma tabela de parâmetros com tempo limite definir que aquela procedure ultrapassou o tempo e assim enviar e-mail sobre isso.
select t_min.procedure_dsc,
t_min.min_dt_update,
t_max.max_dt_update,
to_number(trim(to_char((t_max.max_dt_update - t_min.min_dt_update) * 1440,
'9999.99'))) Tempo_Minutos,
to_number(trim(to_char((t_max.max_dt_update - t_min.min_dt_update) * 1440 / 60,
'9999.99'))) Tempo_Horas
from (select t.procedure_dsc, min(t.dt_update) min_dt_update, t.usr_update
from temp_carga t
group by t.procedure_dsc, t.usr_update) t_min,
(select t.procedure_dsc, max(t.dt_update) max_dt_update, t.usr_update
from temp_carga t
group by t.procedure_dsc, t.usr_update) t_max
where t_min.procedure_dsc = t_max.procedure_dsc
and t_min.usr_update = t_max.usr_update
order by t_min.min_dt_update
Se efetivamente é saber quando a procedure ultrapassou o tempo, você pode tentar implementar esta lógica na procedure que está sendo executada. Ela poderia guardar o dia/hora de início e ficar verificando de tempos em tempos se algum limite foi ultrapassado (ex: dentro de algum LOOP de instruções, caso existir).
Uma outra opção seria você criar uma tabela onde cada procedure a ser monitorada registraria seu início e posteriormente seu término de execução (com sucesso ou mesmo quando aborta com erro). Você poderia criar então uma procedure de monitoramento que avaliaria com base nesta tabela o tempo de execução da procedure.
Acho que teria várias formas de você tentar monitorar este tempo de execução. Talvez detalhando um pouco mais qual a sua dúvida, os foristas possam apresentar outras recomendações.
Entendi..Tens algum exemplo dessa procedure que você comentou?
Uma outra opção seria você criar uma tabela onde cada procedure a ser monitorada registraria seu início e posteriormente seu término de execução (com sucesso ou mesmo quando aborta com erro). Você poderia criar então uma procedure de monitoramento que avaliaria com base nesta tabela o tempo de execução da procedure.
Procedure Tempo de Execução DataInicio DataFim Status
mmmm 01:00 23/05/2013 08:00 23/05/2013 08:00 ok
E uma outra procedure que verificaria quando essa procedure MMMM ultrapasse essa 01 hora e quando isso acontecesse poderia ter uma ação de envio de e-mail para o DBA ou Desenvolvedor.Hoje até tenho essa tabela de log de carga que tem algumas dessas informações mas precisaria ser separado.
Não creio que existam procedures de monitoramento de outras procedures.
A solução para o seu caso parece simples:
- Crie uma tabela e com 3 colunas (nome procedure, data inicio, data fim);
- Altere cada uma procedures a serem monitoradas. Por exemplo, adicione no inicio da execução da mesma
um INSERT na tabela do passo anterior. Popule com o nome da procedure e a data/hora de inicio. No final
desta mesma procedure, coloque um comando de UPDATE, para atualizar a coluna de data de finalização;
Não parece complicado, bastando você conhecer as sintaxes de CREATE TABLE, INSERT e UPDATE.