问题描述
我的问题是关于在包中使用DBMS_SCHEDULER的问题。我已将调度器_管理员权限授予用户。现在,我可以在通过脚本在过程外部创建作业之后,在过程内部设置这些命令。
--设置作业参数
DBMS_SCHULER.SET_ATtriBTE(
名称=>作业标识符,
属性=>'job_action',
值=> jobparam) ;
--作业运行。
DBMS_SCHULER.ENE (作业标识符) ;
到目前为止一切都很顺利。
现在我的问题是:为什么这些命令在我的过程代码中不起作用?
--停止作业
DBMS_SCHEDULER.STOP_JOB(
作业名称=>作业标识符,
强制=> true) ;
--禁用作业
DBMS_SCHEDULER.DISABLE(jobidentifier);
只要我通过脚本在自己的会话中输入命令,而不是嵌入到包代码中,这些命令就会工作。问题是我想在PL-SQL包中输入这些命令,因为在包内我知道何时发生错误,所以我想输入这些命令。
你能帮我吗?谢谢你,谢谢你。
出现以下错误:
ORA-27486 :尼赫特ausreichende Berchttigungen ORA-06512 :在“SYS.DBMS_ISCHED”中, Zeile 210 ORA-06512 :在“SYS.DBMS_SCHEDULER”中, Zeile 557 ORA-06512 :在"SCHMANAME.JOB_KILEN_PCK"中, Zeile 31 ORA-06512 :在Zeile 6
我的授权由sys_user授予:
授权调度器管理到架构名称
在第31行中有以下代码
DBMS_SCHEDULER.STOP_JOB( job_name => jobname, force => true);
这是否出于安全原因, Oracle不希望我能够通过启动过程来stop_作业。因为这样我就能阻止我知道名字的每一份工作?如果这是正确的,我将无法停止作业,因为在我的操作过程中出现故障
如果你愿意,我可以把我的测试包寄给你。我回到9月28日。
--设置作业参数
DBMS_SCHULER.SET_ATtriBTE(
名称=>作业标识符,
属性=>'job_action',
值=> jobparam) ;
--作业运行。
DBMS_SCHULER.ENE (作业标识符) ;
到目前为止一切都很顺利。
现在我的问题是:为什么这些命令在我的过程代码中不起作用?
--停止作业
DBMS_SCHEDULER.STOP_JOB(
作业名称=>作业标识符,
强制=> true) ;
--禁用作业
DBMS_SCHEDULER.DISABLE(jobidentifier);
只要我通过脚本在自己的会话中输入命令,而不是嵌入到包代码中,这些命令就会工作。问题是我想在PL-SQL包中输入这些命令,因为在包内我知道何时发生错误,所以我想输入这些命令。
你能帮我吗?谢谢你,谢谢你。
出现以下错误:
ORA-27486 :尼赫特ausreichende Berchttigungen ORA-06512 :在“SYS.DBMS_ISCHED”中, Zeile 210 ORA-06512 :在“SYS.DBMS_SCHEDULER”中, Zeile 557 ORA-06512 :在"SCHMANAME.JOB_KILEN_PCK"中, Zeile 31 ORA-06512 :在Zeile 6
我的授权由sys_user授予:
授权调度器管理到架构名称
在第31行中有以下代码
DBMS_SCHEDULER.STOP_JOB( job_name => jobname, force => true);
这是否出于安全原因, Oracle不希望我能够通过启动过程来stop_作业。因为这样我就能阻止我知道名字的每一份工作?如果这是正确的,我将无法停止作业,因为在我的操作过程中出现故障
如果你愿意,我可以把我的测试包寄给你。我回到9月28日。
专家解答
在过程执行过程期间不会启用角色,因此在过程中, Scheduler_阮不会为您提供帮助。如果我们看一下调度器_
并查看有关
STOP_JOB with the force option requires that you have the MANAGE SCHEDULER privilege.
然后我们就可以做出必要的调整...
希望这个能帮上忙。
SQL> select * from dba_sys_privs 2 where grantee = 'SCHEDULER_ADMIN'; GRANTEE PRIVILEGE ADM COM --------------- ---------------------------------------- --- --- SCHEDULER_ADMIN CREATE JOB YES YES SCHEDULER_ADMIN EXECUTE ANY CLASS YES YES SCHEDULER_ADMIN CREATE CREDENTIAL YES YES SCHEDULER_ADMIN CREATE ANY CREDENTIAL YES YES SCHEDULER_ADMIN EXECUTE ANY PROGRAM YES YES SCHEDULER_ADMIN CREATE ANY JOB YES YES SCHEDULER_ADMIN MANAGE SCHEDULER YES YES SCHEDULER_ADMIN CREATE EXTERNAL JOB YES YES
并查看有关
STOP_JOB with the force option requires that you have the MANAGE SCHEDULER privilege.
然后我们就可以做出必要的调整...
SQL> create user DEMO identified by DEMO;
User created.
SQL>
SQL> grant connect, create job , manage scheduler, create procedure to demo;
Grant succeeded.
SQL> grant execute on dbms_lock to demo;
Grant succeeded.
SQL>
SQL> connect DEMO/DEMO
Connected.
SQL>
SQL> BEGIN
2 DBMS_SCHEDULER.create_job (
3 job_name => 'MY_JOB',
4 job_type => 'PLSQL_BLOCK',
5 job_action => 'BEGIN for i in 1 .. 60 loop dbms_lock.sleep(1); end loop; END;',
6 start_date => sysdate,
7 enabled => TRUE);
8 END;
9 /
PL/SQL procedure successfully completed.
SQL> create or replace
2 package DEMO.PKG is
3 procedure stopper;
4 end;
5 /
Package created.
SQL>
SQL> create or replace
2 package body DEMO.PKG is
3 procedure stopper is
4 begin
5 dbms_scheduler.stop_job('DEMO.MY_JOB',force=>true);
6 end;
7 end;
8 /
Package body created.
SQL>
SQL> exec pkg.stopper;
PL/SQL procedure successfully completed.
希望这个能帮上忙。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




