我的问题是关于在包中使用 DBMS_SCHEDULER 。我已将 SCHEDULER_ADMIN 权限授予用户。现在,在我通过程序外部的脚本创建作业后,我可以在我的程序中设置这些命令。
-- set Job-Parameters
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => jobidentifier,
attribute => 'job_action',
value => jobparam);
-- Job run.
DBMS_SCHEDULER.ENABLE(jobidentifier);
到目前为止一切顺利。
现在我的问题是:为什么这些命令不能在我的程序代码中工作?
-- Stop Job
DBMS_SCHEDULER.STOP_JOB (
job_name => jobidentifier,
force => true);
-- disable Job
DBMS_SCHEDULER.DISABLE(jobidentifier);
只要我通过脚本在自己的会话中输入命令而不是嵌入到包代码中,命令就会起作用。问题是我想在我的 PL-SQL 包中输入这些命令,因为在我的包中我知道何时发生错误,所以我想输入这些命令。
你能帮助我吗?非常感谢。
我收到以下错误:
ORA-27486: Nicht ausreichende Berechtigungen ORA-06512: 在 "SYS.DBMS_ISCHED", Zeile 210 ORA-06512: 在 "SYS.DBMS_SCHEDULER", Zeile 557 ORA-06512: 在 "SCHEMANAME.JOB_KILLEN_PCK", Zeile 31 ORA-06512:在泽勒 6
我所做的授权是由 sys_user 提供的:
GRANT SCHEDULER_ADMIN TO SCHEMANAME
在第 31 行有以下代码
DBMS_SCHEDULER.STOP_JOB ( job_name => jobname, force => true);
这是出于安全原因,Oracle 不希望我能够通过启动过程来停止作业。因为这样我就可以停止我知道名字的每一个工作?如果这是正确的,如果在我的过程中的作业期间发生故障,我将无法停止作业
如果你愿意,我可以给你发我的测试包