2013-11-05 75 views
1

我有一个工作计划在后端(用于发送电子邮件)使用DBMS_Scheduler。但是,要求允许用户安排电子邮件,并允许他们通过点击按钮立即发送电子邮件立即如何在Oracle中多次(并行)执行相同的作业?

为了做到这一点,我做了以下安排:当用户点击一个按钮时,调用一个过程。该过程执行我上面提到的工作(使用run_job)。这使我可以立即使用相同的工作发送电子邮件,并在预定的时间晚些时候发送。

我现在面临的问题是:假设用户A单击按钮。同时,用户B点击他系统上的按钮。然后用户B得到以下错误信息:作业已在运行。

如何在Oracle中多次执行相同作业并行)?

回答

2

DBMS_SCHEDULER.RUN参数USE_CURRENT_SESSION设置为TRUE

--Create a test job. 
begin 
    dbms_scheduler.create_job(
     job_name => 'TEST_JOB', 
     job_type => 'PLSQL_BLOCK', 
     job_action => 'BEGIN dbms_lock.sleep(3); END;'); 
end; 
/

--This fails if run concurrently. 
begin 
    dbms_scheduler.run_job(job_name => 'TEST_JOB', use_current_session => FALSE); 
end; 
/

--This can run concurrently. 
begin 
    dbms_scheduler.run_job(job_name => 'TEST_JOB', use_current_session => TRUE); 
end; 
/
+0

非常感谢!我会试试这个!但是,你能告诉我“use_current_session”是如何工作的吗? –

+0

@SinghSiddharth该文档是开始的好地方:http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_sched.htm#ARPLS72395 –

1

如果您可以将您的工作转换为基于事件的工作,你可以使用在触发它们的事件做出响应轻巧的工作。对于基于事件的作业,您可以将parallel_instances设置为true,从而允许同一作业的多个实例并行运行。

这是做你想做的事。

轻量级并行作业旨在成为具有简单任务的简短生活作业。

相关问题