【DB笔试面试483】通过DBMS_SCHEDULER如何调用SHELL脚本?

  • 2019 年 10 月 11 日
  • 筆記

题目部分

通过DBMS_SCHEDULER如何调用SHELL脚本?

答案部分

可以直接创建JOB来调用SHELL脚本,如下所示:

BEGIN DBMS_SCHEDULER.CREATE_JOB(JOB_NAME=>'TEST13',  JOB_TYPE=>'EXECUTABLE',  ENABLED =>FALSE,  AUTO_DROP =>FALSE,  JOB_ACTION=>'/u01/dw/regain/test1.sh',  NUMBER_OF_ARGUMENTS => 1);  END;  /  BEGIN DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(JOB_NAME=>'TEST13',  ARGUMENT_POSITION => 1,  ARGUMENT_VALUE => 'AAAA');  END;  /

若是以普通用户执行上述代码的话,在执行过程中会遇到ORA-27486: insufficient privileges和ORA-27399: job type EXECUTABLE requires the CREATE EXTERNAL JOB privilege的错误,这是由于权限不足的缘故导致的。

解决方法:以SYSDBA连接,然后执行上述代码,或者用SYS用户进行赋权操作,这里假设普通用户的用户名为LHR:

GRANT CREATE ANY JOB TO LHR;  GRANT CREATE EXTERNAL JOB TO LHR;

赋权之后接着执行就好了:

SQL> EXEC DBMS_SCHEDULER.ENABLE('TEST13');  SQL> EXEC DBMS_SCHEDULER.RUN_JOB('TEST13');  SQL> EXEC DBMS_SCHEDULER.DROP_JOB('TEST13');

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。