利用SCHEDULER呼叫shell指令碼

yangtingkun發表於2012-03-10

10gSCHEDULER的一個重要的功能是可以呼叫作業系統命令或SHELL指令碼。而在10g以前,這個功能只能通過外部儲存過程來實現。

 

 

下面是一個簡單的例子,首先編輯一個test.sh指令碼:

#!/usr/bin/ksh
echo abc >> /home/xxx/a.txt

注意,#!/usr/bin/ksh是必須的,否則JOB執行會出現ORA-27369錯誤。

給這個shell設定執行許可權:

$ chmod 744 test.sh

下面就可以在資料庫中建立PROGRAM

SQL> BEGIN
  2     DBMS_SCHEDULER.CREATE_JOB(
  3             JOB_NAME => 'J_TEST',
  4             JOB_TYPE => 'EXECUTABLE',
  5             JOB_ACTION => '/home/xxx/test.sh',
  6             ENABLED => TRUE,
  7             AUTO_DROP => TRUE);
  8  END;
  9  /

PL/SQL procedure successfully completed.

SQL> SELECT * FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'J_TEST';

no rows selected

SQL> COL JOB_NAME FORMAT A30
SQL> SELECT TO_CHAR(LOG_DATE, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM'),
  2     JOB_NAME,
  3     STATUS
  4  FROM DBA_SCHEDULER_JOB_RUN_DETAILS
  5  WHERE JOB_NAME = 'J_TEST';

TO_CHAR(LOG_DATE,'YYYY-MM-DDHH24:MI: JOB_NAME                       STATUS
------------------------------------ ------------------------------ ----------------------
2012-03-12 18:41:16.275361 +08:00    J_TEST                         SUCCEEDED

檢查shell執行資訊:

SQL> EXIT
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[xxx@hpserver2 ~]$ more a.txt
abc
[xxx@hpserver2 ~]$ ls -l a.txt
-rw-r--r-- 1 xxx oinstall 4 Mar 12 18:41 a.txt

通過這個簡單的方法,就可以實現作業系統命令的呼叫。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-718391/,如需轉載,請註明出處,否則將追究法律責任。

相關文章