【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程式設計師面試筆試寶典》,作者:李華榮。

Tags: