目前在我的应用程序中,我有一个每隔 3 分钟触发一次的 dbms 作业。Dbms 作业调用使用全局临时表的过程。
设想:
1.假设我的第一份工作在时间 (X) 触发,大约需要一个小时才能完成。
2.同时在时间(X+3分钟)触发第二个工作。
问题:
这两个 dbms 作业是否共享相同的连接?我的意思是他们会为全局临时表使用相同的会话吗?
目前在我的应用程序中,我有一个每隔 3 分钟触发一次的 dbms 作业。Dbms 作业调用使用全局临时表的过程。
1.假设我的第一份工作在时间 (X) 触发,大约需要一个小时才能完成。
2.同时在时间(X+3分钟)触发第二个工作。
这两个 dbms 作业是否共享相同的连接?我的意思是他们会为全局临时表使用相同的会话吗?
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 不会无限并行运行作业,因此实际行为可能会变得有些不可预测。