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