|
Программирование >> Oracle
Пакет DBMS JOB 1605 11 Next date ИМЕЕТ значение 12 to char(p next date,dd-mon-yyyy hh24:mi:ss)) ; 13 end; 14 / Procedure created. Теперь пошлем эту процедуру на выполнение, используя метод, рассмотренный в подразделе Однократное выполнение задания . Другими словами, не зададим значение параметра INTERVAL: tkyte@TKYTE816> variable n number tkyte@TKYTE816> exec dbms job.submit(:n, p(JOB,NEXT DATE);); PL/SQL procedure successfully completed. tkyte@TKYTE816> select what, interval, 2 to char(last date,dd-mon-yyyyhh2 4:mi:ss) last date, 3 to char(next date,dd-mon-yyyyhh2 4:mi:ss) next date 4 from user jobs 5 where job = :n WHAT INTERVAL LAST DATE NEXT DATE p(JOB,NEXT DATE); null 28-apr-2001 18:23:01 В данном случае процедуре переданы только параметры JOB и NEXT DATE. Их значения будут получены при выполнении. Как видите, это задание еще не выполнялось (столбец LAST DATE имеет значение Null), a параметр INTERVAL получил пустое значение, так что значение NEXT DATE будет вычисляться как SELECT NULL FROM DUAL. Обычно это означает, что задание выполнится один раз, после чего будет удалено из очереди заданий. Однако при выполнении этого задания оказывается: tkyte@TKYTE816> exec dbms job.run(:n) ; PL/SQL procedure successfully completed. tkyte@TKYTE816> select * from t; Next date ела значение Next date ИМЕЕТ значение 29-apr-2001 03:00:00 tkyte@TKYTE816> select what, interval, 2 to char(last date,dd-non-yyyyhh24:mi:ss) last date, 3 to char(next date,dd-mon-yyyyhh24:mi:ss) next date 4 from user jobs 5 where job = :n WHAT INTERVAL LAST DATE NEXT DATE p(JOB,NEXT DATE); null 28-apr-2001 18:23:01 29-apr-2001 03:00:00 что параметр NEXTDATE получает другое значение. Это значение NEXTDATE было вычислено в самой процедуре, и задание снова оказалось в очереди. Пока задание бу- 1606 Приложение А дет устанавливать непустое значение NEXT DATE, оно будет оставаться в очереди. Если когда-нибудь после успешного выполнения не будет установлено значение NEXT DATE, задание будет удалено из очереди. Этот прием пригодится для заданий, в которых значение NEXT DATE сложно вычислить или оно зависит от данных в других таблицах. Контроль заданий и обнаружение ошибок Для контроля заданий в базе данных используется три основных представления. USER JOBS. Список всех заданий, посланных текущим зарегистрированным пользователем. У этого представления есть также общедоступный синоним, ALL JOBS. ALL JOBS содержит ту же информацию, что и USER JOBS. DBA JOBS. Полный список всех заданий, находящихся в очередях базы данных. DBA JOBS RUNNING. Список выполняющихся заданий. Обычно представление USER JOBS доступно всем пользователям, а представления DBA * - только пользователям с привилегией DBA или получившим привилегию SELECT непосредственно для этих представлений. В этих представлениях находится следующая информация. LAST DATE/LAST SEC Когда последний раз выполнялось задание. ST DATE -столбец типа DATE. LAST SEC - строка символов, содержащая только время (в формате часов:минут:секунд). THIS DATE/HIS SEC. Если задание в настоящий момент выполняется, в этом столбце будет время начала выполнения. Как и пара столбцов LAST DATE/ LAST SEC, столбец THIS DATE содержит дату и время, а столбец THIS SEC -символьную строку, в которой указано только время. NEXT DATE/NEXT SEC. Время, когда задание будет выполнено в следующий раз. TOTAL TIME. Общее время выполнения задания в секундах. Включает время выполнения предыдущих прогонов - это суммарное значение. BROKEN. Флаг Yes/No, показывающий, что задание разрушено. Разрушенные задания не выполняются процессами обработчик очередей. Задание разрушается после 16 неудачных попыток выполнения. Для разрушения задания можно использовать процедуру DBMS JOB.BROKEN (что временно предотвращает его выполнение). INTERVAL. Функция, возвращающая дату, которая вызывается в начале следующего выполнения задания, чтобы определить, когда снова выполнять задание. FAILURES. Сколько раз подряд задание не было успешно выполнено. При успешном выполнении задания в этом столбце устанавливается значение 0. WHAT. Текст задания. NLS ENV. Среда NLS (National Language Support - поддержка национальных языков), в которой будет выполняться задание. Включает язык, формат даты, фор- Пакет DBMS JOB 1607 мат чисел и т.п. Среда NLS полностью наследуется из среды, откуда было послано задание. При изменении этой среды и повторной отправке задания оно будет выполняться в измененной среде. instance. Имеет смысл только в режиме Parallel Server. Это идентификатор экземпляра, на котором может выполняться задание, а в представлении DBA JOBS RUNNING - экземпляра, на котором оно выполняется. Предположим, в этих представлениях обнаружено задание с положительным значением в столбце FAILURES. Где найти сообщения об ошибках для этого задания? Они не хранятся в базе данных, а записываются в журнал уведомлений (alert log) базы данных. Например, создана следующая процедура: tkyte@TKYTE816> create or replace procedure run by jobs 2 as 3 l cnt number; 4 begin 5 select user id into l cnt from all users; 6 - другой необходим1й код 7 end; Procedurecreated. tkyte@TKYTE816> variable n number tkyte@TKYTE816> exec dbms job.submit(:n, run by jobs;); PL/SQL procedure successfully completed. tkyte@TKYTE816> commit; Goit complete. tkyte@TKYTE816> exec dbms lock.sleep(60) ; PL/SQL procedure successfully completed. tkyte@TKYTE816>select job, what, failures 2 from user jobs 3 where job = :n; JOB WHAT FAILURES 3 5 run by jobs; 1 Если в базе данных больше одного пользователя (во всех базах данных их больше), эта процедура, определенно, не сработает. Оператор SELECT ... INTO всегда будет возвращать слишком много строк; при программировании б1ла допущена ошибка. Однако, поскольку она происходит в фоновом режиме, причину ошибки трудно определить. К счастью, сообщение об ошибке записывается в журнал уведомлений базы данных. Если открыть этот файл в редакторе, в конце файла можно будет найти следующее: Tue Jan 09 13:07:51 2001 Errors in file G:\oracle\admin\tkyte816\bdump\tkyte816SNP0.TRG: ORA-12012: error on auto execute of job 35 ORA-01422 : exact fetch returns more than requested number of rows
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |