2015-02-03 3 views
0

Мне нужно выполнить определенную процедуру Oracle из клиентского приложения, и обычно это занимает больше времени и не может увеличить время ожидания ответа, поскольку время выполнения непредсказуемо!Как выполнить асинхронную процедуру времени в Oracle

Есть ли способ выполнить процедуру как задание планировщика асинхронно во время выполнения?

Если асинхронно выполняется, будет ли использоваться «Oracle AQ Asynchronous Notification» для уведомления приложения?

+0

Попробуйте 'DBMS_JOB 'или' dbms_scheduler' ссылаются http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sche d.htm или http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_job.htm#BABHCBFD – Exhausted

ответ

2

Вы можете использовать пакет dbms_scheduler (или более старый пакет dbms_job) для асинхронного запуска процедуры в отдельной сессии. В зависимости от количества заданий, которые вы планируете запускать (и количества фоновых заданий, которые вы хотите, чтобы ваше приложение записывалось в какую-то очередность заданий, чтобы фиксированное количество фоновых заданий считывалось, чтобы получать и обрабатывать работу. Эта «очередь заданий» могла быть реальной очередью Oracle AQ, или она может быть обычной таблицей, в которой заданы задания.

Возможно, вы также можете отправить сообщение клиенту с использованием Oracle AQ. 99% времени, которое я видел однако эта работа задала какой-то статус для таблицы (или просто использовала словарь данных dbms_scheduler), и интерфейс просто периодически проверял статус, чтобы определить, когда было выполнено задание.

Смежные вопросы