Таблица 8.Программы пакета DBMS_JOB.
Программа
Описание программы
SUBMIT (процедура)
отправляет новое задание в очередь заданий
CHANGE (процедура)
изменяет параметры задания
WHAT (процедура)
изменяет описание задания
NEXT_DATE (процедура)
изменяет следующее время выполнения задания
REMOVE (процедура)
удаляет задание из очереди
RUN (процедура)
указывает немедленно выполнить задание
INTERVAL (процедура)
изменяет интервал между запусками задания
Будем рассматривать в качестве задания анонимный блок PL/SQL, запускающий процедуру p1.
CREATE TABLE job_test (insert_date DATE);
CREATE PROCEDURE p1 AS
BEGIN
INSERT INTO job_test VALUES(SYSDATE);
COMMIT;
END;
Отправим задание в очередь со следующими параметрами:
SQL> DECLARE
2 l_job_num INTEGER;
3 BEGIN
4 DBMS_JOB.submit(job =>l_job_num,
5 what=>'BEGIN p1; END;',
6 next_date=>sysdate,
7 interval=>'sysdate+10/24/60/60');
8 COMMIT;
9 DBMS_OUTPUT.PUT_LINE(l_job_num);
10 END;
11 /
23
PL/SQL procedure successfully completed.
В очередь будет помещено новое задание BEGIN p1; END; с немедленным выполнением после помещения в очередь и последующим выполнением каждые десять секунд, что задается выражением sysdate+10/24/60/60. На экран выводится уникальный номер задания, назначенный ему при постановке в очередь (23). Важно отметить, что после вызова процедуры DBMS_JOB.submit необходимо явно зафиксировать транзакцию, в противном случае задание в очередь поставлено не будет.
Посмотрим на результаты работы процедуры p1 и убедимся, что задание запускается каждые десять секунд:
SQL> SELECT TO_CHAR(insert_date,'DD.MM.YYYY HH24:MI:SS') AS insert_date
2 FROM job_test ORDER BY insert_date;
INSERT_DATE
–
25.01.2015 11:26:18
25.01.2015 11:26:28
25.01.2015 11:26:38
Данные о заданиях пользователя, которые в данный момент находятся в очереди, можно просмотреть в представлении словаря-справочника данных USER_JOBS:
SQL> SELECT job,log_user,last_sec,next_sec,broken,interval,what
2 FROM USER_JOBS;
JOB LAST_SEC NEXT_SEC BROKEN INTERVAL WHAT
– – – – – –
23 11:26:51 11:27:01 N sysdate+10/24/60/60 BEGIN p1; END;
В первом столбце отображаются номера заданий, назначаемые им при постановке в очередь. В следующих столбцах отображаются время последнего и следующего выполнения задания, интервал выполнения и анонимный блок PL/SQL для выполнения задания. Меткой BROKEN (заблокировано) помечаются те задания, при шестнадцати попытках выполнения которых произошли ошибки. Заблокированные задания перестают выполняться, поэтому администратору баз данных следует контролировать содержание представления DBA_JOBS, в котором отображаются сведения обо всех заданиях. Если в задании временно отпала необходимость, то его можно пометить как заблокированное специально, используя для этого процедуру DBMS_JOB.broken.
Удаляется из очереди задание следующим образом:
SQL> BEGIN
2 DBMS_JOB.remove(23);
3 COMMIT;
4 END;
5 /
PL/SQL procedure successfully completed.
Встроенный пакет UTL_FILE предоставляет программам PL/SQL возможность работать с файлами на сервере. С помощью этого пакета можно решать следующие задачи:
формирование на сервере небольших текстовых отчетов;
загрузка в базу данных строк небольших текстовых файлов;
чтение log-файлов сервера для мониторинга ошибок;
формирование log-файлов программ PL/SQL.
Для загрузки/выгрузки данных значительных (мегабайты, гигабайты) объемов следует использовать не пакет UTL_FILE, а использовать клиентские приложения – SQL*Loader для загрузки данных и SQL*Plus для их выгрузки. Если запускать эти утилиты на сервере баз данных, то их использование – самый быстрый способ загрузить и выгрузить данные из базы в файлы. В то же время при разработке серверной бизнес-логики встречаются ситуации, когда читать и писать в файлы хотелось бы именно в хранимых программах на PL/SQL без усложнений, вызванных обращениями к другим средствам. Чтобы для каждого поступившего платежа выгружать на сервере XML-файл размером меньше килобайта пакет UTL_FILE вполне подходит.
Настройка ограничений доступа к каталогам
Считается, что UTL_FILE потенциально может представлять большую угрозу безопасности баз данных Oracle. Этот пакет дает возможность доступа к файлам от имени такого пользователя операционной системы, который в ней имеет доступ ко всем файлам данных, журнала базы данных, управляющим файлам, файлам паролей и параметров. Получив неправомерный доступ к пакету UTL_FILE, при определенных навыках можно довольно быстро грамотно вывести базу данных из строя или реализовать угрозу нарушения конфиденциальности информации (например, прочитать файлы данных).
По этой причине перед использованием пакета UTL_FILE требуется настроить ограничения доступа к каталогам, с файлами из которых сможет осуществлять операции пакет. Настроить ограничения доступа к каталогам можно сделать двумя способами:
Читать дальше