如何在Oracle中异步执行耗时的过程

时间:2015-02-03 07:16:09

标签: oracle stored-procedures plsql oracle11g

我需要从客户端应用程序执行某个Oracle过程,它通常需要更长的时间,并且无法真正增加响应的等待时间,因为执行时间是不可预测的!

有没有办法在运行时异步执行该过程作为调度程序作业?

如果异步执行“Oracle AQ Asynchronous Notification”会用于通知应用程序吗?

1 个答案:

答案 0 :(得分:2)

您可以使用dbms_scheduler包(或较旧的dbms_job包)以异步方式在单独的会话中运行过程。根据您预计运行的作业数量(以及您希望应用程序写入某种作业队列的后台作业数量,以及固定数量的后台作业从中读取并处理工作。这就是作业queue"可以是实际的Oracle AQ队列,也可以是作业读取的常规表。

您可以让该过程使用Oracle AQ向客户端发送消息。但是,在我看到这种设置的99%的时间里,作业为表格写了某种状态(或者只是使用了dbms_scheduler数据字典),而前端仅仅调查了定期状态以确定作业何时完成。