我们可以在后台调用 DBMS_JOB.RUN 吗?
Can we call DBMS_JOB.RUN in the background?
我在 DBMS_JOB.SUBMIT 的帮助下将一些作业插入到作业队列中。
我是否在下一步使用 DBMS_JOB.RUN 在后台 运行 它们?
我不想让用户等待 DBMS_JOB.RUN。
谢谢!
您可以使用 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;
我在 DBMS_JOB.SUBMIT 的帮助下将一些作业插入到作业队列中。
我是否在下一步使用 DBMS_JOB.RUN 在后台 运行 它们?
我不想让用户等待 DBMS_JOB.RUN。
谢谢!
您可以使用 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;