Oracle同时运行相同的过程

时间:2018-07-14 23:58:03

标签: oracle plsql

如何在oracle中同时运行具有不同参数的相同过程。

Begin
  exec ProcDeleteA(1);
  exec ProcDeleteA(2);
  exec ProcDeleteA(3);
END;

我创建了过程ProcDeleteA(表号number)。我创建了100个临时表 每个都有500万个孤儿ID,需要将其删除 生产表。每天晚上,我要争取三个表ID 从一个生产表中删除。我想运行相同的程序三遍 同时运行,以便三个proc运行并从生产中完全删除 在早上5点之前摆放桌子。任何建议同时运行proc。的 临时表号存储在一个表中。每天三个临时表编号 插入,这些表ID将从生产表中删除。

请建议如何同时运行程序?可以通过实现 pl / SQL或Shell脚本?

我创建了100个临时表,每个临时表中有500万条记录,需要从生产中的表中删除。基本上,我将生产表的主键(id)存储在这些临时表中。这些是应用程序生成的孤立ID,这些ID预先识别并存储在这些临时表中,并且需要从生产表中删除这些ID。因此临时表类似于temptab1,temptab2 ... temptab100。基本上我想从生产表中删除5亿行。每天我想运行3个表,它将从生产表中删除ID。删除5亿行大约需要30天。白天无法删除,每晚只能删除1500万,因为删除会流过金门。

1 个答案:

答案 0 :(得分:2)

关于您的实际问题,您没有告诉我们太多信息,所以我不明白为什么您需要此过程的三个实例。我也不明白为什么您不能按顺序运行它们。

但是您基本上可以通过安排作业在DBMS_SCHEDULER的给定时间运行来完成您要的工作。

exec dbms_scheduler.create_job(
    job_name => 'MYJOB1',
    job_type => 'PLSQL_BLOCK',
    job_action => 'begin ProcDeleteA(1); end;',
    start_date => SYSDATE,
    repeat_interval => 'FREQ=DAILY',
    enabled => TRUE );

它将在当前时间每天运行一次。

编辑:您需要一些可以启动过程,然后返回但保持运行状态的程序。这将产生一个立即开始运行的进程,但是将控制权交还给您,然后您可以为其他过程再次运行它。它不会重复。

exec dbms_scheduler.create_job(
    job_name => 'MYJOB1',
    job_type => 'PLSQL_BLOCK',
    job_action => 'begin ProcDeleteA(1); end;',
    start_date => SYSDATE,
    repeat_interval => NULL,
    enabled => TRUE,
    auto_drop => TRUE );

您是否正在启动过程的三个不同实例,因为您认为它会比单个实例快?根据您的操作,可能不会。