Планировщик заданий в Oracle

ОГЛАВЛЕНИЕ

Первый механизм планового запуска появился в версии 7 для поддержки автоматических обновлений снимков (snapshots), как поначалу именовались нынешние материализованные виртуальные таблицы (materialized views). В версии 8 этот механизм был открыт для обычных пользователей через посредство некоторых параметров СУБД, таблиц словаря-справочника, а также пакета DBMS_JOB. Пакет DBMS_JOB позволял (и позволяет) запускать хранимую процедуру, или же неименованный блок PL/SQL в моменты времени, вычисляемые по указанной пользователем формуле.

К версии 10 такое устройство имевшегося планировщика заданий было сочтено слишком примитивным и к нему добавился новый, значительно более проработанный. Он использует следующие основные понятия:

  • Schedule (расписание)
  • Program (программа)
  • Job (плановое задание = расписание + программа)

Кроме того, с ним связаны дополнительные, более специфичные понятия:

  • Job class (класс заданий)
  • Window и window group (ресурсное «окошко», интервал для автоматического включения ресурсного плана СУБД и группа окошек)
  • Chain (цепочка заданий)
  • Event schedule (возможность запустить задание по событию, зафиксированному по сообщению из очереди AQ)

В отличие от старого планировщика, в новом «программой» может быть не только блок PL/SQL, но и хранимая процедура на PL/SQL или на Java, внешняя процедура на С или даже команда ОС. Последнее означает, что Oracle отменяет необходимость использовать специфичные для разных платформ планировщики заданий ОС (cron, at) при построении БД-центричного приложения. Вдобавок, сам запуск заданий получил возможность учета текущей вычислительной обстановки в СУБД, а также желаемой приоритетности среди прочих заданий.

Как и в случае со старым планировщиком, новый по сути представляет собой элемент ядра СУБД, доступ пользователя к которому предоставляется посредством программной логики и элементов схемы БД. Именно, в распоряжении пользователя имеется следующее:

  • таблицы словаря-справочника LIKE '%SCHEDULER_%' (DBA_SCHEDULER_JOBS,
    DBA_SCHEDULER_JOB_LOG и прочие);
  • несколько типов объектов хранения, как-то:
    JOB
    SCHEDULE
    PROGRAM
    JOB CLASS,
    ряд других;
  • системные привилегии:
    CREATE SESSION
    CREATE JOB
    CREATE ANY JOB
    EXECUTE ANY PROGRAM
    EXECUTE ANY CLASS
    MANAGE SCHEDULER
    CREATE EXTERNAL JOB,
    и объединяющая их роль SCHEDULER_ADMIN;
  • объектные привилегии:
    EXECUTE
    ALTER
    ALL,
    распространяющиеся на объекты типов JOB, SCHEDULE, PROGRAM и JOB CLASS;
  • пакет DBMS_SCHEDULER.
Версия 11 дополнила планировщик возможностями:
  • запуска «легковесных» заданий, делающая реальным их создание и удаление сотнями за секунду;
  • запуска заданий на удаленных машинах посредством использования специального агента;
  • запуска заданий только на основной БД физического горячего резерва или на страхующей логического.

Некоторые ключевые моменты использования планировщика в Oracle 10 рассматриваются ниже на примерах.