并行运行/执行多个过程 - Oracle PL / SQL

时间:2016-01-22 13:29:27

标签: oracle plsql oracle11g parallel-processing dbms-scheduler

我有一个Activity表,它获取系统的所有表事件。所有系统表上的新订单,插入/删除等事件都将插入此表中。因此,对于Activity表,事件/秒的数量非常大。

现在,我想根据负责引发事件的表,根据业务逻辑处理传入事件。每个表可能有不同的程序来进行处理。

我使用了相同的链接 Parallelizing calls in PL/SQL

作为一种解决方案,我创建了多个dbms_scheduler个作业,这些作业将同时被调用。所有这些作业(JOB1, JOB2--- - -JOB10)将与ProcForAll_Processing具有相同的过程( 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 用于并行处理。

请帮助我,因为我真的很难完成它

3 个答案:

答案 0 :(得分:3)

在没有工作的情况下,通常情况下是不可能的,并且会为此进行多次会话。除了少数例外,没有多线程PL\SQL之类的东西。其中之一是并行执行sql 语句[1]。因此有一些尝试滥用这些东西用于并行执行PL \ SQL代码,例如试着看看这里[2]。

但正如我所说的那样滥用恕我直言。

参考:

  1. https://docs.oracle.com/cd/B19306_01/server.102/b14223/usingpe.htm
  2. http://www.williamrobertson.net/documents/parallel-plsql-launcher.html

答案 1 :(得分:3)

获得新的DBA。甚至更好,将它们从任何决策过程中删除。 DBA不应该检查您的代码,也不应该告诉您不创建工作,除非有一个很好的,特定的原因。

使用DBMS_SCHEDULER并行运行是迄今为止实现此结果的最简单,最常用的方法。 当然它将消耗更多资源,这就是并行性将不可避免地要做的事情。

另一个较差的选择是使用并行流水线表函数。这是一个先进的PL / SQL功能,在一个简单的例子中无法轻易解释。我能做的最好的就是推荐你the manual

答案 2 :(得分:1)