2016-02-12 51 views
1

在DBMS_JOB.SUBMIT的帮助下,我将一些作业插入到作业队列中。我们可以在后台调用DBMS_JOB.RUN吗?

是否有无论如何,我在后台使用DBMS_JOB.RUN在后台运行它们?

我不希望用户等待DBMS_JOB.RUN。

谢谢!

+1

哪您使用的是Oracle版本吗? [DBMS_JOB已弃用](http://docs.oracle.com/cd/E11882_01/server.112/e25494/appendix_a.htm#ADMIN11002),因此您最好查看DBMS_SCHEDULER。 –

回答

2

您可以使用DBMS_SCHEDULER作业:

BEGIN 
    -- Job defined entirely by the CREATE JOB procedure. 
    DBMS_SCHEDULER.create_job (
    job_name  => 'YourJobName', 
    job_type  => 'PLSQL_BLOCK', 
    job_action  => 'BEGIN NULL; /* Your code here*/ END;', 
    start_date  => SYSTIMESTAMP, // run the job as soon as possible 
    repeat_interval => NULL,   // don't repeat the job 
    end_date  => NULL,   // ignore this if its not a repeating job 
    enabled   => TRUE,   
    comments  => 'Your comments on and description of the job.'); 
END; 
/

您还可以更改job_type调用存储过程或外部可执行文件以及PL/SQL块。

如果你想查看当前运行的作业,你可以使用:

SELECT JOB_NAME, STATE 
FROM USER_SCHEDULER_JOBS; 

如果你想view a log of your jobs那么你可以使用:

SELECT * 
FROM USER_SCHEDULER_JOB_LOG 
ORDER BY LOG_DATE DESC; 

和:

SELECT * 
FROM USER_SCHEDULER_JOB_RUN_DETAILS 
ORDER BY LOG_DATE DESC; 
+0

嗨!谢谢你的评论。它会立即执行函数(job_action)还是将其放入作业队列中? – Dax

+0

它会在后台? – Dax

+0

它将被放入一个工作队列中,但是被安排在队列中尽快执行,并且当像这样安排时,我总是会体验到它在毫秒内进入队列。是的,它会在后台。 – MT0

相关问题