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 |
通过这个简单的方法,就可以实现操作系统命令的调用。