На протяжении всей главы я показывал, как можно назначать свойства различным компонентам планировщика в момент их создания (например, посредством процедуры CREATE_JOB
или CREATE_WINDOW).
Однако в некоторых случаях требуется изменение таких свойств после создания компонента планировщика. Например, может возникнуть необходимость изменения интервала между выполнениями задания после того, как задание создано в базе данных. Можно изменить свойства, удалив и пересоздав объект, но это не единственное решение.
Такие свойства, как периодичность выполнения, имя расписания, уровень журналирования и другие, называют атрибутами задания, программы или объекта. Пакет DBMS_SCHEDULER
содержит процедуру SET_AT- TRIBUTE,
которая позволяет изменять атрибуты существующего задания, класса заданий, программы, расписания, окна или группы окон.
Предположим, например, что необходимо изменить комментарий для задания PURGE_LOG на значение «This job purges the log entries of jobs and windows». Делаем следующее:
Процедура принимает три параметра: имя_элемента
Имя элемента, свойства которого будут изменяться. Задания, окна, классы заданий, группы окон и расписания имеют уникальные имена, поэтому нет необходимости в указании типа элемента.
атрибут
Изменяемое свойство в виде значения типа VARCHAR2.
Набор допустимых значений определяется типом элемента. Например, max_fail- ures
- допустимый атрибут для задания, но не для программы.
значение
Значение атрибута. Тип данных определяется выбором атрибута. Например, для окон атрибут window_priority
принимает значение VARCHAR2 (LOW
или HIGH),
в то время как атрибут duration
требует использования типа данных INTERVAL.
Теперь перейдем к рассмотрению допустимых значений для разных типов атрибутов. В связи с тем, что для каждого элемента они будут разными, каждый элемент будет рассмотрен в отдельном разделе. Атрибуты задаются явно и по одному, поэтому значений по умолчанию для них не предусмотрено. (Значения параметров по умолчанию были приведены при описании создания объектов.)
Атрибут
|
Тип данных
|
|
auto_drop
|
BOOLEAN
|
Указывает, следует ли удалять задание после его завершения. Допустимы следующие значения:
TRUE и FALSE.
|
comments
|
VARCHAR2
|
|
end_date
|
TIMESTAMP
|
Дата, после которой задание больше не будет запускаться. Задание будет удалено (если задан атрибут auto_drop) или отключено. Его статус изменится на COMPLETED (если оно завершено). Если этот атрибут задан, то атрибут schedule_name должен содержать NULL.
|
instance_sti- ckiness
|
BOOLEAN
|
При работе в базе данных RAC задание запускается на любом одном экземпляре. Следующий запуск может быть осуществлен уже на другом экземпляре, который будет меньше загружен. Если данный атрибут установлен в значение TRUE, будет использоваться один и тот же экземпляр, вне зависимости от его загруженности. Допустимы следующие значения: TRUE и FALSE.
|
job_action
|
VARCHAR2
|
Природа программы. Для PL/SQL-блока указывается исполняемый анонимный блок. Для хранимой процедуры указывается ее имя (можно также указать имя схемы и пакета). Для исполняемого файла приводится полный путь к файлу операционной системы или сценарию оболочки.
|
job_class
|
VARCHAR2
|
Класс заданий, с которым связано данное задание.
|
Атрибут
|
Тип данных
|
|
job_p riority
|
PLS_
|
JNTEGER
|
Приоритет здания по отношению к другим заданиям того же класса. Если выполнение нескольких заданий одного класса запланировано на одно и то же время, то порядок отбора заданий из класса для выполнения будет определяться по их приоритетам. Допустимы значения от 1 (наивысший приоритет) до 5 (самый низкий приоритет). Значение по умолчанию - 3.
|
job_type
|
VARCHAR2
|
Тип задания. Допустимы следующие значения:
|
|
|
|
PLSQL_BLOCK
STORED_PROCEDURE
EXECUTABLE
|
|
|
|
Если данный атрибут задан, то атрибут program_na- me должен содержать NULL.
|
job_weight
|
PLS_
|
JNTEGER
|
Степень параллелизма для задания. Допустимы значения от 1 до 100. Значение по умолчанию - 1.
|
logging_level
|
PLS_
|
JNTEGER
|
Подробность регистрируемой информации. Подменяет свойства класса заданий. Допустимы следующие значения:
DBMS_SCHEDULER.LOGGING_OFF DBMS_SCHEDULER.LOGGING_RUNS (по умолчанию) DBMS_SCHEDULER.LOGGING_FULL
|
max_failures
|
PLS_
|
JNTEGER
|
Количество неудачных выполнений, по достижении которого статус задания изменится на BROKEN. Допустимы значения от 1 до 1000000. Значение по умолчанию - NULL, что означает, что новые экземпляры задания будут запускаться вне зависимости от того, сколько экземпляров уже не удалось выполнить. Отличие от старого пакета DBMS_JOB, в котором было разрешено максимум 16 неудачных выполнений задания, после чего оно помечалось как BROKEN (и эту цифру нельзя было изменить).
|
max_runs
|
NUMBER
|
Максимальное количество последовательных запланированных выполнений задания. При достижении этого максимума задание отключается, его статус меняется на COMPLETED. Допустимы значения от 1 до 1000000. Значение по умолчанию - NULL, что означает, что задание будет выполняться вечно или до достижения значений, указанных в параметре end_date или max_failures.
|
number_of_ar- guments
|
PLS_
|
JNTEGER
|
Количество аргументов для подставляемой (inline) программы. Если данный атрибут задан, то атрибут prog ram_name должен содержать NULL.
|
program_name
|
VARCHAR2
|
Имя объекта-программы, который должен использоваться с этим заданием. Если данный атри-
|
Атрибут
|
Тип данных
|
|
|
|
бут задан, то атрибуты job_action, job_type и num- ber_of_arguments должны содержать NULL.
|
repeat_in- terval
|
INTERVAL
|
Символьное выражение, использующее синтаксис календарной строки (описанный ранее). Например: FREQ=YEARLY; BYMONTH = 12.
|
restartable
|
BOOLEAN
|
Указывает, следует ли пытаться повторно выполнить задание после неудачного завершения. Допустимы следующие значения: TRUE и FALSE. Значение по умолчанию - TRUE.
|
schedule_li- mit
|
PLS_INTEGER
|
В сильнозагруженных системах задания не всегда запускаются в запланированное время. Этот атрибут указывает планировщику на то, что уже не следует запускать задание, если задержка оказалась больше указанного в атрибуте промежутка времени. Допустимы значения от 1 минуты до 99 дней. Например, если планировалось запустить задание в полдень и предельная задержка задана равной 60 минутам, то если задание не будет запущено до часа дня, оно не будет запущено уже никогда.
Если schedule_limit не задан, то задание будет выполнено когда-нибудь впоследствии, когда освободятся ресурсы для его выполнения. По умолчанию атрибут установлен в NULL, что означает, что задание может быть запущено в любое время после запланированного. Задание, запуск которого пропущен согласно данному атрибуту, не учитывается в количестве успешных и неуспешных выполнений задания. В журнал вносится запись о пропуске выполнения задания.
|
schedule_name
|
VARCHAR2
|
Имя расписания, окна или группы окон, используемых в качестве расписания для данного задания. Если данный атрибут задан, то атрибуты
end_date, start_date и repeat_interval должны (одновременно) содержать NULL.
|
start_date
|
VARCHAR2
|
Исходная временная метка начала выполнения задания или запланированного выполнения задания. Если данный атрибут задан, то атрибут sched- ule_name должен содержать NULL.
|
stop_on_win- dow_close
|
BOOLEAN
|
Действие при закрытии окна. Что должно произойти с заданием, если оно связано с окном, а окно закрывается в процессе выполнения задания? Если данный атрибут установлен в значение TRUE, то задание также будет остановлено. Если атрибут установлен в значение FALSE, то выполнение задания будет продолжено даже при закрытии окна.
|
Атрибут
|
Тип данных
|
Описание
|
comments
|
VARCHAR 2
|
|
log_history
|
PLS_INTEGER
|
Срок хранения информации (в днях) в журнале для данного класса заданий. Допустимы значения от 1 до 999.
|
logging_level
|
PLS_INTEGER
|
Указывает уровень протоколирования. Допустимы следующие значения:
DBMS_SCHEDULER.LOGGING_OFF DBMS_SCHEDULER.LOGGING_RUNS (по умолчанию) DBMS_SCHEDULER.LOGGING_FULL
|
resou rce_con- sumer_group
|
VARCHAR2
|
Группа потребителей ресурсов, с которой связывается данный класс заданий. Если этот атрибут задан, то атрибут service должен содержать NULL.
|
service
|
VARCHAR2
|
Имя сервиса (определенное в базе данных), которому принадлежит данный класс заданий. Значение по умолчанию NULL соответствует сервису по умолчанию. Если этот атрибут задан, то атрибут
resource_consumer_group должен содержать NULL.
|
Атрибут
|
Тип данных
|
Описание
|
comments
|
VARCHAR2
|
|
end_date
|
TIMESTAMP
|
Временная метка отсечки, после которой расписание прекращает задание дат.
|
repeat_interval
|
VARCHAR2
|
Символьное выражение, использующее синтаксис календарной строки (описанный ранее). Например, FREQ=YEARLY; BYMONTH=12.
|
start_date
|
TIMESTAMP
|
Начальная временная метка, используемая в календарной строке.
|
Атрибут
|
Тип данных
|
Описание
|
comments
|
VARCHAR2
|
|
number_of_argu- ments
|
PLS_INTEGER
|
Количество аргументов программы.
|
program_action
|
VARCHAR2
|
Для PL/SQL-блока указывается исполняемый анонимный блок.
Для хранимой процедуры указывается ее имя (можно также указать имя схемы и пакета).
|
Атрибут
|
Тип данных
|
Описание
|
|
|
Для исполняемого файла приводится полный
|
|
|
путь к файлу операционной системы или сцена-
|
|
|
|
program_type
|
VARCHAR2
|
Тип программы. Допустимы следующие значе-
|
|
|
ния:
|
|
|
PLSQL_BLOCK
|
|
|
STORED_PROCEDURE
|
|
|
EXECUTABLE
|
Атрибут
|
Тип данных
|
Описание
|
comments
|
TIMESTAMP
|
|
duration
|
INTERVAL
|
|
end_date
|
TIMESTAMP
|
Временная метка, после которой окно не будет открываться. Если данный атрибут задан, то атрибут schedule_name должен содержать NULL.
|
repeat_interval
|
VARCHAR2
|
Символьная строка, использующая синтаксис календарной строки (описанный ранее). Если данный атрибут задан, то атрибут schedule_name должен содержать NULL.
|
resou rce_plan
|
VARCHAR2
|
Ресурсный план, который связывается с окном.
|
schedule_name
|
TIMESTAMP
|
Имя расписания, которое будет использоваться для данного окна. Если этот атрибут задан, то атрибуты start_date, end_date и repeat_inter- val должны содержать NULL.
|
start_date
|
TIMESTAMP
|
Следующая временная метка, на которую запланировано открытие окна. Если этот атрибут задан, то атрибут schedule_name должен содержать NULL.
|
window_priority
|
VARCHAR2
|
Приоритет окна. Допустимы следующие значения: LOW и HIGH.
|
Атрибут
|
Тип данных
|
Описание
|
comments
|
TIMESTAMP
|
Комментарий для группы окон. Это единственный атрибут, поддерживаемый для группы окон.
|
Планировщик Oracle Scheduler - это новая утилита управления заданиями, появившаяся в версии Oracle 10*. Она является гораздо более мощной, чем ее предшественник - пакет DBMS_JOB. При помощи планировщика можно обеспечивать выполнение хранимых процедур и анонимных блоков PL/SQL, а также исполняемых файлов операционной системы. Для календарных строк, задающих требуемое время выполнения заданий, используется нотация, практически не отличающаяся от обычного английского языка. Все операции планировщика доступны через программный интерфейс приложения во встроенном пакете DBMS_SCHEDULER. Кроме того, Enterprise Manager в Oracle 10* предоставляет графический интерфейс, который может быть использован для управления заданиями, что делает планирование выполнения заданий чрезвычайно простым даже для тех, кто пользуется им впервые. Планировщик позволяет определить именованное расписание, которое может вызываться независимо для выполнения действия, представляющего собой полное имя исполняемого файла или именованную программу, ссылающуюся на исполняемый файл. Задания также могут подчиняться системе управления ресурсами Oracle, которая может применяться для управления ресурсами (ЦПУ, серверы параллельных запросов), доступными отдельным заданиям. Подводя итог, можно сказать, что Scheduler - это единственная система управления заданиями, которая понадобится вам для планирования выполнения любых заданий, за исключением тех, которые точно должны выполняться вне связи с базой данных (например, для запуска самой базы данных).