Oracle同时运行相同的过程

Oracle同时运行相同的过程,oracle,plsql,Oracle,Plsql,如何在oracle中同时使用不同的参数运行相同的过程 Begin exec ProcDeleteA(1); exec ProcDeleteA(2); exec ProcDeleteA(3); END; 我创建了过程ProcDeleteA(tablenumber)。我创建了100个临时表 其中每个都有500万个孤立ID,需要从中删除 生产表。每天晚上,我都要跑三张桌子 从一个生产表中删除。我想运行相同的过程三次 同时,使三个进程运行并完成从生产中删除 早上5点前就座。同时运行proc

如何在oracle中同时使用不同的参数运行相同的过程

Begin
  exec ProcDeleteA(1);
  exec ProcDeleteA(2);
  exec ProcDeleteA(3);
END;
我创建了过程ProcDeleteA(tablenumber)。我创建了100个临时表 其中每个都有500万个孤立ID,需要从中删除 生产表。每天晚上,我都要跑三张桌子 从一个生产表中删除。我想运行相同的过程三次 同时,使三个进程运行并完成从生产中删除 早上5点前就座。同时运行proc的任何建议。这个 临时表编号存储在表中。每天三个临时表号码 插入,这些表ID将从生产表中删除

请建议如何同时运行该过程?能否通过以下途径实现 pl/SQL还是shell脚本


我创建了100个临时表,每个临时表中有500万条记录,这些记录需要从生产表中删除。基本上,我将生产表的主键(ID)存储在这些临时表中。这些是应用程序生成的孤立ID,预先标识并存储在这些临时表中,需要从生产表中删除这些ID。所以临时表就像TENTAB1,TENTAB2…TENTAB100。基本上我想从生产表中删除5亿行。每天我想运行3个表,它会从生产表中删除ID。删除5亿行大约需要30天。无法在白天删除,每晚只能删除1500万,因为删除是通过金门进行的。

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

但是,通过使用
DBMS\u调度器
将作业安排在给定的时间运行,您基本上可以按要求完成任务

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 );

您是否因为认为这会比一个更快而启动三个不同的程序实例?取决于你在做什么,可能不会。

谢谢你的回复。我不能使用dbms_调度程序。它必须通过pl/sql或shell脚本。我有一个从晚上11点到早上5点的窗口,可以从生产表中删除1500万条记录,这些记录的主键被预先标识并存储在这些临时表中。dbms_调度程序是pl/sql,为什么不呢?您有什么限制?DBMS_调度程序是在有限的时间窗口内运行多个PL/SQL任务的最合适的解决方案。所以,你真的应该解释为什么你需要使用次优解。我想每晚跑3个表号。我每天在一个表中插入3个表号,这3个表号将每晚运行。例如Procdeletetab1、procdeletetab2、procdeletetab3今晚按假设,然后明晚将运行procdeletetab4、procdeletetab5和procdeletetab6。需要通过shell脚本运行此命令。