之前通过数据库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
 
  

解决方案 »

  1.   

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

  2.   

    不错不错,不过如果企业中用的话要注意控制这个SHELL的权限,里面有数据库密码别给不相关的人看到了~
      

  3.   

    其实这个调度最终执行的存储过程 exec package.存储过程名(); 检查下存储过程是否有效
      

  4.   

    之前通过数据库job 有一定时任务,中间数据库宕机后,该任务就不再执行JOB为什么不执行了呢,我觉得还是用JOB调度方便维护,使用CRONTAB只是来弥补不能使用job调用的,如DATASTAGE使用CRONTAB就比他本身带的方便
      

  5.   

    原因找到了,之前的job因为oracle的BUG,执行到一定的次数后,不再执行,
    双机切换后,数据库重启,job又开始了重新执行。
    现在我又把cron的定时任务取消掉了。
    目前仍采用oracle的job来执行。