利用SCHEDULER调用shell脚本

10g的SCHEDULER的一个重要的功能是可以调用操作系统命令或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

通过这个简单的方法,就可以实现操作系统命令的调用。

This entry was posted in ORACLE and tagged , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *