2011-02-16 58 views
2

我有两个PL/SQL系统,驻留在两个单独的数据库中。 SystemA需要填充SystemB的表格。这可能会在数据链路上完成。每次将一组记录插入到SystemB的表中时,系统B中的进程必须运行。我可以等待SystemA完成,然后运行一个脚本以开始在SystemB中进行处理,但由于SystemA可能需要花费很多小时来处理然后填充SystemB,所以我宁愿SystemB尽快处理每一组记录(每个记录设置可以独立处理,所以这应该工作正常)。PL/SQL中的事件驱动编程

我不确定的是我如何在PL/SQL中执行偶数驱动的编程。我需要SystemA通知SystemB一套已准备好处理。我的第一个想法是在SystemB中有一个特殊的“事件”表,然后当SystemA完成一个集合时,它将插入到“事件”表中,并在插入时触发一个启动流程的触发器(并且流程可能是一个很长的流程,每个进程可能需要5-10分钟)在SystemB中。我没有足够的Oracle触发器经验来知道这是否是一种既定的方法,或者是否有更好的机制。建议?提示?建议吗?

回答

6

使用Oracle高级队列;它是为此而设计的。我相信你仍然需要在两个系统之间建立一个数据库链接(在这种情况下,从B到A,消耗A上的队列)。

+0

将有一个从A到B的dblink,因此A可以插入到B的表格中。队列必须在A中,B需要连接到B? – FrustratedWithFormsDesigner 2011-02-16 19:30:02

+0

最常见的情况是,你在A上有一个队列,A上的进程将插入,B上的队列将B上的进程从队列中取出队列,并且你会使用AQ来告诉A上的队列传递消息到B上的队列。这样,你的代码永远不需要处理临时中断的网络连接的问题--AQ将处理到远程机器的交付。 – 2011-02-16 19:42:01

2

是的,Oracle高级队列或者甚至让甲提交一份令人尊敬的Oracle作业给B是更好的主意。

而且,如果您的流程需要将数据从A完全复制到B,那么您可能希望看起来像Oracle Streams流程,以复制数据并进行处理。