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
通过这个简单的方法,就可以实现操作系统命令的调用。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-718391/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-718391/