0

目前在我的应用程序中,我有一个每隔 3 分钟触发一次的 dbms 作业。Dbms 作业调用使用全局临时表的过程。

设想:

1.假设我的第一份工作在时间 (X) 触发,大约需要一个小时才能完成。
2.同时在时间(X+3分钟)触发第二个工作。

问题:

这两个 dbms 作业是否共享相同的连接?我的意思是他们会为全局临时表使用相同的会话吗?

4

1 回答 1

1

Oracle 不会自动启动同一个作业两次,即使完成时间比 INTERVAL 指定的时间间隔长。如果您强制它运行两次,它们将不会共享数据库会话。

编辑:要使其以特定间隔并行运行,您可以这样做:

 declare id number;
 begin
   dbms_job.submit(id, 'myjobstarter;', sysdate, 'sysdate+3/24/60');
   commit;
 end;

 create procedure myjobstarter as
   id number;
 begin
   dbms_job.submit(id, 'longRunningProcedure;');
   commit;
 end;

因此,您的常规作业每次运行时都会提交一个新作业。但是当然,您可能会以这种方式遇到一些锁定问题或其他竞争条件。另请注意,DBMS_JOB 不会无限并行运行作业,因此实际行为可能会变得有些不可预测。

于 2012-09-07T07:13:20.380 回答