Как создать "синглтон" запланированное задание в Oracle?
Вероятно, это просто словарный запас, который мне не хватает, чтобы узнать, как это сделать:
Задание запланировано на регулярное выполнение каждые 5 минут, однако отслеживается, что никогда не будет запущено два его экземпляра одновременно, т. Е. Следующий экземпляр будет отложен или пропущен, если предыдущие запуски выполнялись дольше 5 минут.
Какой самый простой / изящный способ добиться этого?
4 ответа
Из руководства администратора Oracle 10g:
"Пакет DBMS_JOB был заменен пакетом DBMS_SCHEDULER. В частности, если вы управляете заданиями для управления загрузкой системы, вам следует рассмотреть возможность отключения DBMS_JOB путем отмены привилегии выполнения пакета для пользователей".
DBMS_SCHEDULER - рекомендованный Oracle способ сделать это сейчас. Одним из преимуществ, которое он имеет, является то, что вы можете управлять своими заданиями через Enterprise Manager/Grid Control, если вы используете это.
Другое преимущество, которое dbms_scheduler имеет над dbms_job, заключается в том, что вы можете лучше контролировать загрузку, использование ресурсов, а также то, что вы также можете запускать задания, внешние по отношению к базе данных.
Х, Рональд.
Если по какой-то причине dbms_job или dbms_scheduler не работает для вас, вы также можете использовать DBMS_APPLICATION_INFO.SET_APPLICATION_INFO
чтобы задать имя модуля вашей работы, вы можете запросить v$session, чтобы увидеть, сколько сессий в данный момент выполняет этот модуль.
Что это за работа? Хранимая процедура PL/SQL?