Отправлять почту, когда время транзакции отстает от системного времени в UNIX

У меня есть запрос для запуска на оракуле, который выводит как sid, серийный номер, время начала транзакции, sql_id, идентификатор транзакции.

Что мне нужно сделать, так это то, что всякий раз, когда время начала транзакции отстает от системного времени более чем на 1 час, мне нужно запустить другой запрос с этим sql_id и отправить его по электронной почте.

Как мне сравнить этот вывод времени из ORACLE sql и сравнить его с системным временем?

Мне нужно автоматизировать этот процесс и добавить его в cron в UNIX.

Пожалуйста помоги!


person sandeep tnvs    schedule 06.07.2011    source источник
comment
Сразу много вопросов. У вас уже запущен crontab? Он уже отправляет электронную почту? Вы используете sqlplus или что-то еще для подключения к базе данных? Что вы уже пробовали? Пожалуйста, уточните еще кое-что.   -  person Martin Schapendonk    schedule 06.07.2011
comment
Вместо cron загляните в DBMS_JOB/DBMS_SCHEDULER. Вы также можете отправлять почту прямо из базы данных. Но я предлагаю вам задать их как отдельные вопросы, если это необходимо.   -  person Gary Myers    schedule 06.07.2011


Ответы (1)


Функция SYSDATE возвращает текущую системную дату. Когда вы вычитаете две даты, вы получаете разницу в днях. Умножьте на 24, и вы получите разницу в часах.

SELECT *
  FROM v$transaction
 WHERE (sysdate - start_date)*24 > 1

даст вам транзакции, которые начались более 1 часа назад. Вы также можете использовать интервальную арифметику, если считаете, что это понятнее.

SELECT *
  FROM v$transaction
 WHERE sysdate - interval '1' hour > start_date 
person Justin Cave    schedule 06.07.2011