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

请教一个 Oralce 的任务调度的问题,万分感谢!
各位达人,

我在专家 海鲨Oracle的个人空间上看到一篇博客 “ORACLE 报表数据库开发设想”

地址是 http://blog.csdn.net/zengmuansha/article/details/7659870

里面提到


4  任务调度:

 采用储存过程和软件包来做每个报表,每个表的数据产生. 那么这些任务之间必然产生了依赖.

...

应该采用crontab 方式的调度. 比如说写个轮休的JOB 该JOB每隔5-10分钟运行一次. 该JOB只调用一个存储过程. 存储过程启动任务,任务是软件包或者是存储过程.

该存储过程 读取任务信息表, 任务依赖表,何时启动该任务, 并监督任务运行状况和报警.


这段话我没有看得明白。

请达人给个简单的例子以明示。

万分感谢!

------解决方案--------------------
任务信息表:保存任务的执行时间,状态,执行代码等
依赖表应该是指任务之间的关系,这个也要看实际情况,有的时候依赖直接在存储过程中做了,有的也喜欢通过主任务的依赖来做,必须某些任务完成后才能执行当前任务等。
存储过程启动任务:一般都是用户Crontab定时调用每隔一段时间扫描任务表,如果任务到了执行时间且没有被执行,就把任务的代码动态加到脚本中执行.
------解决方案--------------------
有个简单的例子,我自己的任务调度表:
create table T_SCHEDULER_TASK
(
  ID                  NUMBER not null,
  NAME                VARCHAR2(50),
  TYPE                CHAR(1),
  TASKEXECUTE         CHAR(1),
  TASKDATE            DATE,
  LASTEXECUTEDATE     DATE,
  LASTTIMETASKSTATUS  CHAR(1),
  MAILTOADDRESSLIST   VARCHAR2(1000),
  MAILSUBJECT         VARCHAR2(100),
  EVERYNUMBER         NUMBER,
  REDUCEWARNLEVEPOINT NUMBER,
  FREQUENCY           NUMBER(4,2)
)

任务调度是用crontab跑的,也发你看看吧。

export  ORACLE_BASE ORACLE_HOME ORACLE_SID PATHTH=/app/oracle/product/10.2.0/bin:/usr/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/bin
export ORACLE_BASE=/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/
export ORACLE_SID=vv
export ORACLE_TERM=xterm
export TMP=/tmp
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH

sqlplus aa/bb@vv @/drop.sql;
imp dd/ee@fftables=\(table\) file=/test.dmp ignore=y;