Dbms job submit пример

добавлено: 18 фев 19
понравилось:0
просмотров: 6991
комментов: 0

Введение
В Oracle есть специальный механизм запланировать выполнение определённой программы, на заданное время, это может быть оператор SQL, программа на языке PLSQL, либо даже внешняя программа. Этот механизм называется механизмом заданий Job

Данный механизм может применяться, например, для планирования запуска тяжелых запросов в ночное время или на выходные дни, распределения задач построения отчетности.

Теория и практика

Для управления заданиями в Oracle существует специальные пакет DBMS_JOB:
Создание заданий
Можно использовать механизм dbms_job
Или механизм dbms_scheduler – более современный способ

Здесь:
JOB – Входной параметр уникальный идентификатор задания. Идентификатор генерируется специальной системной последовательностью.
WHAT — анонимный PL/SQL блок, в данном блоке указывается последовательность команд которая будет выполнена в процессе работы задания.
В же в этом параметре можно также писать команды вставки удаления редактирования (inser update delete), а так же команды для создания создания индексов таблиц, создания индексов, ограничений.
NEXT_DATE – дата время следующего выполнения задания.
Если будет указана дата меньше чем текущую дата, то выполнение задания будет начато немедленно.
INTERVAL – Вычисляемая дата следующего выполнения задания в столбце NEXT_DATE. Примеры интервала задания:
NULL
Задание выполнится однократно и удалится.

Задание будет выполняться ровно в 10 часов каждого дня

Задание будет выполняться ровно в 11 часов 15 минут каждого дня.

Задание будет выполняться ровно в n часов m минут последнего дня каждого месяца.

Задание будет выполняться ровно в n часов m минут первого дня каждого месяца.

NO_PARSE — флаг разбора PL/SQL выражения. Если его значение равно FALSE разбор происходит в момент установки задания. Иначе, в момент выполнения задания.

INSTANCE — какой экземпляр производит выполнение задания

FORCE – если значение этого параметра истинно тогда в качестве INSTANCE может выступать любое положительное целое число. В противном случае экземпляр, указанный в INSTANCE должен быть обязательно запущен, иначе будет вызвано исключение.
Пример2 создания задания

Таблица будет очищаться каждый день в один час пять минут

Пример2 создания задания

Таблица будет очищаться каждый день в три часа пять минут и заполняться данными из AUTO1
Пример3 создания задания

Таблица будет очищаться каждый день в три часа пять минут и заполняться данными из AUTO1
Удаления задания можно сделать следующей процедурой:

Здесь
JOB – идентификатор задачи
Выключение задания
Бывают случаи, когда задание временно не должно выполняться. Для этого совсем необязательно его удалять. Достаточно его просто выключить. Выключение (включение) задания производится установкой специального флага состояния — BROKEN. Делается это с помощью следующей процедуры:

Просмотр всех заданий
Для просмотра всех заданий используются следующие таблицы DBA_JOBS, ALL_JOBS и USER_JOBS.
• DBA_JOBS – показывает все задания (JOB)
• ALL_JOBS -показвает задания (JOB) текущего пользователя
• USER_JOBS -показывает задания (JOB) текущего пользователя

Важные замечания
Вычисление NEXT_DATE с помощью формулы интервала происходит после выполнения задания. Поэтому, всегда учитывайте это время и старайтесь не ставить их на время близкое к окончанию суток из-за возможного неправильного расчёта следующей даты выполнения.

При создании задания или изменения его параметров ORACLE записывает текущие параметры NLS владельца. Эти параметры каждый раз восстанавливаются при выполнении задания. Это может приводить к некоторым ошибкам в случае ожидания других значений. Поэтому если необходимо лучше производить установку нужных NLS значений с помощью команды ALTER SESSION в параметре WHAT задания.

Задания в теле завершаются COMMIT;

Вопросы учеников
Есть ли еще способы создать задние используя планировщик заданий.
Да есть более современный метод DBMS_SCHEDULLER
Как создать задание которое бы выполнялось каждые полдня
Пример задания

The DBMS_JOB package schedules and manages jobs in the job queue.

The DBMS_JOB package has been superseded by the DBMS_SCHEDULER package. In particular, if you are administering jobs to manage system load, you should consider disabling DBMS_JOB by revoking the package execution privilege for users.

This chapter contains the following topics:

Using DBMS_JOB

Security Model

No specific system privileges are required to use DBMS_JOB . No system privileges are available to manage DBMS_JOB . Jobs cannot be altered or deleted other than jobs owned by the user. This is true for all users including those users granted DBA privileges.

You can execute procedures that are owned by the user or for which the user is explicitly granted EXECUTE . However, procedures for which the user is granted the execute privilege through roles cannot be executed.

Note that, once a job is started and running, there is no easy way to stop the job.

Operational Notes

Working with Real Application Clusters

DBMS_JOB supports multi-instance execution of jobs. By default jobs can be executed on any instance, but only one single instance will execute the job. In addition, you can force instance binding by binding the job to a particular instance. You implement instance binding by specifying an instance number to the instance affinity parameter. Note, however, that in Oracle Database 10g Release 1 (10.1) instance binding is not recommended. Service affinity is preferred. This concept is implemented in the DBMS_SCHEDULER package.

The following procedures can be used to create, alter or run jobs with instance affinity. Note that not specifying affinity means any instance can run the job.

DBMS_JOB.SUBMIT

To submit a job to the job queue, use the following syntax:

Use the parameters instance and force to control job and instance affinity. The default value of instance is 0 (zero) to indicate that any instance can execute the job. To run the job on a certain instance, specify the instance value. Oracle displays error ORA-23319 if the instance value is a negative number or NULL.

The force parameter defaults to false. If force is TRUE, any positive integer is acceptable as the job instance. If force is FALSE, the specified instance must be running, or Oracle displays error number ORA-23428.

DBMS_JOB.INSTANCE

To assign a particular instance to execute a job, use the following syntax:

The FORCE parameter in this example defaults to FALSE. If the instance value is 0 (zero), job affinity is altered and any available instance can execute the job despite the value of force. If the INSTANCE value is positive and the FORCE parameter is FALSE, job affinity is altered only if the specified instance is running, or Oracle displays error ORA-23428.

If the force parameter is TRUE , any positive integer is acceptable as the job instance and the job affinity is altered. Oracle displays error ORA-23319 if the instance value is negative or NULL .

DBMS_JOB.CHANGE

To alter user-definable parameters associated with a job, use the following syntax:

Two parameters, instance and force, appear in this example. The default value of instance is null indicating that job affinity will not change.

The default value of force is FALSE. Oracle displays error ORA-23428 if the specified instance is not running and error ORA-23319 if the instance number is negative.

DBMS_JOB.RUN

The force parameter for DBMS_JOB.RUN defaults to FALSE. If force is TRUE, instance affinity is irrelevant for running jobs in the foreground process. If force is FALSE , the job can run in the foreground only in the specified instance. Oracle displays error ORA-23428 if force is FALSE and the connected instance is the incorrect instance.

Stopping a Job

Note that, once a job is started and running, there is no easy way to stop the job.

Summary of DBMS_JOB Subprograms

Table 48-1 DBMS_JOB Package Subprograms

Subprogram Description

Disables job execution

Alters any of the user-definable parameters associated with a job

Assigns a job to be run by a instance

Alters the interval between executions for a specified job

Alters the next execution time for a specified job

Removes specified job from the job queue

Forces a specified job to run

Submits a new job to the job queue

Re-creates a given job for export, or re-creates a given job for export with instance affinity

Alters the job description for a specified job

BROKEN Procedure

This procedure sets the broken flag. Broken jobs are never run.

Table 48-2 BROKEN Procedure Parameters

Parameter Description

Number of the job being run.

Job broken: IN value is FALSE .

Date of the next refresh.

If you set job as broken while it is running, Oracle resets the job’s status to normal after the job completes. Therefore, only execute this procedure for jobs that are not running.

You must issue a COMMIT statement immediately after the statement.

CHANGE Procedure

This procedure changes any of the fields a user can set in a job.

Table 48-3 CHANGE Procedure Parameters

Parameter Description

Number of the job being run.

PL/SQL procedure to run.

Date of the next refresh.

Date function; evaluated immediately before the job starts running.

When a job is submitted, specifies which instance can run the job. This defaults to NULL , which indicates that instance affinity is not changed.

If this is FALSE , then the specified instance (to which the instance number change) must be running. Otherwise, the routine raises an exception.

If this is TRUE , then any positive integer is acceptable as the job instance.

You must issue a COMMIT statement immediately after the statement.

The parameters instance and force are added for job queue affinity. Job queue affinity gives users the ability to indicate whether a particular instance or any instance can run a submitted job.

If the parameters what , next_date , or interval are NULL , then leave that value as it is.

I NSTANCE Procedure

This procedure changes job instance affinity.

Table 48-4 INSTANCE Procedure Parameters

Parameter Description

Number of the job being run.

When a job is submitted, a user can specify which instance can run the job.

If this is TRUE , then any positive integer is acceptable as the job instance. If this is FALSE (the default), then the specified instance must be running; otherwise the routine raises an exception.

You must issue a COMMIT statement immediately after the statement.

INTERVAL Procedure

This procedure changes how often a job runs.

Table 48-5 INTERVAL Procedure Parameters

Parameter Description

Number of the job being run.

Date function, evaluated immediately before the job starts running.

If the job completes successfully, then this new date is placed in next_date . interval is evaluated by plugging it into the statement select interval into next_date from dual;

The interval parameter must evaluate to a time in the future. Legal intervals include:

Interval Description
‘sysdate + 7’ Run once a week.
‘next_day(sysdate,»TUESDAY»)’ Run once every Tuesday.
‘null’ Run only once.

If interval evaluates to NULL and if a job completes successfully, then the job is automatically deleted from the queue.

You must issue a COMMIT statement immediately after the statement.

NEXT_DATE Procedure

This procedure changes when an existing job next runs.

Table 48-6 NEXT_DATE Procedure Parameters

Parameter Description

Number of the job being run.

Date of the next refresh: it is when the job will be automatically run, assuming there are background processes attempting to run it.

You must issue a COMMIT statement immediately after the statement.

REMOVE Procedure

This procedure removes an existing job from the job queue. This currently does not stop a running job.

Table 48-7 REMOVE Procedure Parameters

Parameter Description

Number of the job being run.

You must issue a COMMIT statement immediately after the statement.

RUN Procedure

This procedure runs job JOB now. It runs it even if it is broken.

Running the job recomputes next_date . See view user_jobs .

Table 48-8 RUN Procedure Parameters

Parameter Description

Number of the job being run.

If this is TRUE , then instance affinity is irrelevant for running jobs in the foreground process. If this is FALSE , then the job can be run in the foreground only in the specified instance.

This re-initializes the current session’s packages.

An exception is raised if force is FALSE , and if the connected instance is the wrong one.

SUBMIT Procedure

This procedure submits a new job. It chooses the job from the sequence sys . jobseq .

Table 48-9 SUBMIT Procedure Parameters

Parameter Description

Number of the job being run.

PL/SQL procedure to run.

Next date when the job will be run.

Date function that calculates the next time to run the job. The default is NULL . This must evaluate to a either a future point in time or NULL .

A flag. The default is FALSE . If this is set to FALSE , then Oracle parses the procedure associated with the job. If this is set to TRUE , then Oracle parses the procedure associated with the job the first time that the job is run.

For example, if you want to submit a job before you have created the tables associated with the job, then set this to TRUE .

When a job is submitted, specifies which instance can run the job.

If this is TRUE , then any positive integer is acceptable as the job instance. If this is FALSE (the default), then the specified instance must be running; otherwise the routine raises an exception.

You must issue a COMMIT statement immediately after the statement.

The parameters instance and force are added for job queue affinity. Job queue affinity gives users the ability to indicate whether a particular instance or any instance can run a submitted job.

This submits a new job to the job queue. The job calls the procedure DBMS_DDL . ANALYZE_OBJECT to generate optimizer statistics for the table DQUON . ACCOUNTS . The statistics are based on a sample of half the rows of the ACCOUNTS table. The job is run every 24 hours:

USER_EXPORT Procedures

There are two overloaded procedures. The first produces the text of a call to re-create the given job. The second alters instance affinity (8 i and after) and preserves the compatibility.

Table 48-10 USER_EXPORT Procedure Parameter

Parameter Description

Number of the job being run.

Text of a call to re-create the given job.

Text of a call to alter instance affinity.

WHAT Procedure

This procedure changes what an existing job does, and replaces its environment.

Table 48-11 WHAT Procedure Parameters

Parameter Description

Number of the job being run.

PL/SQL procedure to run.

You must issue a COMMIT statement immediately after the statement.

Some legal values of what (assuming the routines exist) are:

‘myproc(»10-JAN-82», next_date, broken);’

  • Главная /
  • Статьи /
  • Oracle /
  • RMAN В ПРИМЕРАХ — Использование флэш-области восстановления. Глава 2. Часть 3.

Задания в Oracle9i

В Oracle существует возможность запланировать выполнение определенного набора действий в виде заданий. Задание может, представляет собой хранимую процедуру, анонимный блок PL /SQL, внешнюю процедуру на языке C или Java. Время выполнения может иметь значение любого времени суток и подчинятся заданному интервалу. Это хорошо подходит для переноса тяжёлых в обработке расчётов на менее загруженное ночное время. По умолчанию выполнение заданий выключено. Поэтому надо провести небольшую дополнительную настройку сервера.

Настройка сервера

Для того чтобы задания начались выполняться необходимо, установить параметр инициализации JOB_QUEUE_PROCESSES. Изначально он имеет значение 0 и задаёт максимальное количество фоновых процессов для выполнения заданий. В версии Oracle 9.2 максимальное значение этого параметра может составлять 1000. На практике же обычно можно ограничиться не более 5 процессами. В любом случае вы всегда можете изменить это значение с помощью команды ALTER SYSTEM SET без перезагрузки сервера. Итак, для начала внесем новую строчку в файл инициализации и перезагрузим сервер:

В файле alert.log мы увидим, что в момент, когда стартуют фоновые процессы, у нас появилось новая запись:

Это стартовал новый фоновый процесс CJQ0, так называемый координатор заданий. Что он делает и для чего он нужен, мы рассмотрим чуть ниже, а на этом предварительную настройку сервера можно считать законченной.

Процессы

Итак, процесс координатора заданий запущен, и как можно догадаться из его названия именно этот процесс осуществляет общее управление всеми заданиями. Для начала он выбирает таблицу SYS.JOB$, в которой хранятся параметры заданий. Если среди заданий имеются те, которые будут выполняться в ближайший интервал времени указанный в скрытом параметре _JOB_QUEUE_INTERVAL (по умолчанию его значение составляет 5 секунд), то для них порождаются фоновые процессы очереди заданий Jnnn, которые в свою очередь создают сеансы для непосредственного выполнения запланированных действий. Именно максимальное количество процессов Jnnn, которые могут быть одновременно запущены и отражает настраиваемый параметр JOB_QUEUE_PROCESSES.

После того как выбранным заданиям были выделены процессы Jnnn, координатор выжидает интервал времени, указанный в параметре _JOB_QUEUE_INTERVAL. Процессы заданий в тоже время продолжают работать. После выполнения задания процесс Jnnn считается свободным, и координатор распределяет его на выполнение другого задания. Если такого задания не находится в течение определенного времени, то процесс Jnnn уничтожается. В случае, когда процессов Jnnn не хватает, задание будет выполнено в тот момент времени, когда один из них освободится.

Выставляйте значение параметра JOB_QUEUE_PROCESSES чуть больше максимального количества одновременно запускаемых заданий. Маленькое значение может привести к сдвигу времени выполнения из-за конкуренции за процессы Jnnn. Большое значение к неоправданному запуску этих же процессов в исключительных ситуациях.

Создание заданий

Для управления заданиями в Oracle существует специальный пакет DBMS_JOB. С его помощью над ними можно осуществлять различные действия. Для начала попробуем создать новое задание. В нашем случае для этого, нужно применить следующую процедуру пакета:

Опишем параметры этой процедуры:

JOB — это идентификатор задания. Имеет уникальное значение для каждого задания, генерируемое системной последовательностью. Является выходным параметром. Его лучше запомнить, если потребуются дальнейшие действия над заданиями.

WHAT — тело задания. Представляет собой анонимный PL/SQL блок. Всё что здесь указано, будет выполнено в процессе работы задания. Если вы запускаете только одну процедуру, то можно не заключать её в блок достаточно поставить в конце названия процедуры точку с запятой. Значение WHAT в этом случае автоматически будет помещено в PL/SQL блок. Если процедура имеет строковые параметры, то они обязательно должны заключаться в две одинарные кавычки с каждой стороны. В PL/SQL блоке можно также писать DML и DDL команды, но нельзя производить создание и запуск заданий. Это только приведёт к ошибке ORA-32317. Если же используются ссылки на удалённую базу данных, то они должны явно включать имя и пароль. Анонимные ссылки здесь не поддерживаются. И, наконец, владельцу задания требуется явно предоставить привилегии, на объекты, используемые в теле задания.

NEXT_DATE — дата следующего выполнения задания. Время непосредственно задаётся владельцем или автоматически вычисляется Oracle.

Если вы введёте дату меньше чем текущую, то выполнение задания может начаться немедленно или отложится на неопределённое время. В этом случае попробуйте принудительно запустить задание или повторно изменить этот параметр, это инициирует немедленный запуск задания.

INTERVAL — формула интервала времени. Представляет собой DATE функцию. Именно от её правильного значения будет зависеть дата следующего выполнения задания казанного в столбце NEXT_DATE. Приведём некоторые примеры формулы интервала задания:

(function() { if (window.pluso)if (typeof window.pluso.start == "function") return; if (window.ifpluso==undefined) { window.ifpluso = 1; var d = document, s = d.createElement('script'), g = 'getElementsByTagName'; s.type = 'text/javascript'; s.charset='UTF-8'; s.async = true; s.src = ('https:' == window.location.protocol ? 'https' : 'http') + '://share.pluso.ru/pluso-like.js'; var h=d[g]('body')[0]; h.appendChild(s); }})();

[an error occurred while processing the directive]
Карта сайта