我有一个活动表,它获取系统的所有表事件。所有系统表上的新订单、插入/删除等事件都将插入到此表中。因此,对于活动表来说,事件/秒的大小是非常大的。
现在,我希望根据业务逻辑处理传入事件,这取决于负责引发事件的表。每个表可能有不同的处理过程。
我使用了相同的链接PL/SQL中的并行调用
作为一种解决方案,我创建了多个dbms_scheduler作业,这些作业将同时被调用。为了实现并行处理,所有这些作业(JOB1, JOB2--- - -JOB10)都将具有与JOB_ACTION相同的过程JOB_ACTION。
begin
dbms_scheduler.run_job('JOB1',false);
dbms_scheduler.run_job('JOB2',false);
end; ProcForAll_Processing:这个过程将依次调用6个其他过程Proc1,proc2,proc3 --- -- - -- - Proc6。我也想实现这些并行处理。
P.S:我们不能在ProcForAll_Processing proc中创建更多的工作来实现并行处理,因为它可能会消耗更多的资源,而且DBA也不同意创造更多的就业机会。而且,我不能使用dbms_parallel_execute进行并行处理。
请帮助我,因为我真的被困在做这件事上
发布于 2016-01-22 16:20:02
在一般情况下,没有作业是不可能的,而且它将为此进行多个会话。除了少数几个例外,没有多线程PL\SQL这样的东西。其中之一是SQL语句1的并行执行。因此,为了并行执行PL\代码,有一些滥用的尝试,例如,尝试在这里查看2。
但正如我所说的,这是虐待 IMHO。
参考资料:
发布于 2016-01-23 22:13:04
找个新的DBA。或者更好的是,把他们排除在任何决策过程之外。DBA不应该检查您的代码,也不应该告诉您不要创建工作,除非有一个好的、特定的原因。
到目前为止,使用DBMS_SCHEDULER并行运行是实现此结果的最简单和最常见的方法。当然,它将消耗更多的资源,这就是并行不可避免地要做的事情。
另一个更糟糕的选择是使用并行流水线表函数。这是一个高级的PL/SQL特性,很难在一个简单的例子中解释。我所能做的就是向您推荐手册。
https://stackoverflow.com/questions/34947855
复制相似问题