日期:2014-05-17  浏览次数:20960 次

分享oracle之crontab
之前通过数据库job 有一定时任务,中间数据库宕机后,该任务就不再执行,后来尝试通过crontab来定时执行该任务调度。
  通过telnet连接至数据库,执行export,查看系统环境,编写shell脚本test.sh,内容如下:
  #!/bin/sh
  ORACLE_BASE=/opt/oracle/products
  ORACLE_HOME=/opt/oracle/products/11.2.0.1/db
  NLS_LANG=AMERICAN_AMERICA.ZHS16GBK PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/home/oracle/bin:/usr/bin/X11:/sbin:.:/home/oracle/bin:
/opt/oracle/products/11.2.0.1/db/bin

  export ORACLE_BASE ORACLE_HOME NLS_LANG PATH

  sqlplus -s 用户名/密码@服务名<< EOF
  set serveroutput on;
  exec package.存储过程名();
  set serveroutput off;
  exit;
  EOF

  编写cron脚本,test.cron,内容如下:
  30 10 * * * /opt/oracle/test.sh
  
  执行命令:crontab test.cron 
  执行命令:crontab -l 可以查看到刚设置的任务执行信息:
  30 10 * * * /opt/oracle/test.sh
 
  


------解决方案--------------------
建议在sql语句中加入log信息。
这样如果出现问题的话,也可以查询log。

------解决方案--------------------
不错不错,不过如果企业中用的话要注意控制这个SHELL的权限,里面有数据库密码别给不相关的人看到了~
------解决方案--------------------
其实这个调度最终执行的存储过程 exec package.存储过程名(); 检查下存储过程是否有效