Информация

Последние записи

Теги


Блоги


Записи из всех блогов с тегом: jobs


Планировщик JOB заданий. Управление.

Блог: Oracle SQL
Чалышев Максим Михайлович

SQL. 5 дней которые изменят твою жизнь.

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

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

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

Для управления заданиями в Oracle существует специальные пакет DBMS_JOB:
Создание заданий
Можно использовать механизм dbms_job
Или механизм dbms_scheduler – более современный способ
DBMS_JOB.SUBMIT(
 JOB OUT BINARY_INTEGER,
 WHAT IN VARCHAR2,
 NEXT_DATE IN DATE DEFAULT SYSDATE,
 INTERVAL IN VARCHAR2 DEFAULT NULL,
 NO_PARSE IN BOOLEAN DEFAULT FALSE,
 INSTANCE IN BINARY_INTEGER DEFAULT any_instance,
 FORCE IN BOOLEAN DEFAULT FALSE
);


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



Ошибка при создания SQL задания… Try again later.


После переноса SQL задания на новый SQL Server получил ошибку при создании и правки SQL задания:

Cannot perform this operation while SQLServerAgent is starting. Try again later.





При том, что сервер работает уже давно, а создать новое задание не дает.
Смотрим журналы SQl агента, видим ошибки:

[191] Warning [4]: Possible date calculation spin for Schedule 38
Date                      16.05.2018 13:22:08
Log                        SQL Server Agent (Archive #1 - 16.05.2018 13:22:00)
Message
[192] Date calculation spin detected for Schedule 38

Ошибка связана  тем, что SQL не "может рассчитать" время запуска для некоторых расписаний.
Смотрим расписания SQL агента:

Обращаем на задания которые созданы давно и их частота запуска очень большая: каждые N секунд , минуты.



Решения: меняем время активации данных заданий на текущую дату. 

Проблема в том, что SQL «просто не может рассчитать время запуска» с момента старта распиcания.
Как такое может быть - SQL расписание переносится в процессе миграций с SQL заданиями, при обновлениях SQL версий и т.к. Даже выше у меня есть расписание, созданное в 2008 году, т.е более 10 лет, и если бы оно еще запускалось каждые 10 секунд, то была бы выше указанная проблема.
Эти расписания можно получить  так же запросом:

use msdb

select name , active_start_date,date_created,* from dbo.sysschedules order by 2


После того как исправил дату , все рассчиталось и проблема исчезла.

автор: dbasimple добавлено: 27 май 18 просмотры: 2425, комментарии: 1