各位达人,
我在专家 海鲨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;