【发布时间】:2019-07-22 18:52:40
【问题描述】:
我正在尝试创建一个在 Oracle 中运行存储过程的作业。我尝试使用脚本和 SQL Developer 中的 UI 创建作业,但没有任何运气。它毫无问题地显示在 Scheduler/Jobs 文件夹中,并且所有详细信息都与脚本匹配。我已将 repeat_interval 更改为更频繁的测试,但这并没有改变任何东西。手动运行作业也不起作用,尽管它确实会显示一个弹出窗口,上面写着“已成功处理 SQL 命令”。
我浏览了此答案中提到的配置列表:Oracle DBMS Job not running,但一切似乎都是正确的。存储过程确实运行没有任何问题,这只是给我带来问题的工作。
这是我一直在使用的脚本(repeat_interval 的值是期望的结果,但我一直在使用不同的值):
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'J_CAPTURE_TABLE_DATA_FOR_WEEK',
job_type => 'PLSQL_BLOCK', -- I've also tried 'STORED_PROCEDURE here
job_action => 'CAST.SP_CAPTURE_TABLE_DATA_FOR_WEEK',
comments => 'Capture Table data for older data',
start_date => SYSDATE,
end_date => null,
repeat_interval => 'FREQ=WEEKLY;BYDAY=MON;BYHOUR=2;',
enabled => true,
auto_drop => false,
number_of_arguments => 0);
COMMIT;
END;
期望的结果:作业实际上按计划运行(或完全按计划运行)。
【问题讨论】:
-
我遇到了同样的问题 - 程序/作业已创建/计划,但计划的工作没有开始。我记得这不是特权问题。我找到了这篇文章,也许有帮助:community.oracle.com/thread/648581
-
你能告诉我们你用来运行这项工作的代码吗?不要使用 GUI,使用
begin dbms_scheduler.run_job('J_CAPTURE_TABLE_DATA_FOR_WEEK'); end; /之类的东西。然后使用以下查询查找运行的结果:select * from dba_scheduler_job_run_details where job_name = 'J_CAPTURE_TABLE_DATA_FOR_WEEK';我怀疑您发布的版本存在语法错误 - PL/SQL 块无效,因为它没有BEGIN和END。调度程序具有大量功能,您需要熟悉数据字典视图以便对它们进行故障排除。 -
@JonHeller 所以,我尝试使用 dbms_scheduler.run_job(),它确实执行了这项工作。我可能已经详细说明了,但是在代码中我有一条关于在 job_type 中使用“STORED_PROCEDURE”代替“PL/SQL”的评论。我尝试在 job_action 参数中使用 BEGIN 和 END,并以这种方式调用该过程,但仍然没有任何运气。
-
@Dortimer 作业手动运行,但没有按计划运行?
-
正确。除非您在 Sql Developer 中右键单击作业并点击运行。我尝试使用相同的脚本来创建一个针对不同模式运行存储过程的作业,并且它可以正常工作。从我可以访问的信息来看,一切似乎都很好,但我正在等待 DBA 检查他们的结果。这对我来说可能是愚蠢的。
标签: sql oracle stored-procedures oracle11g database-administration