首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

利用ORACLE JOB 模拟多线程运用

2012-08-17 
利用ORACLE JOB 模拟多线程应用最近在做一个信息集成发布的项目,主要功能是根据用户输入的集成条件实现数

利用ORACLE JOB 模拟多线程应用
最近在做一个信息集成发布的项目,主要功能是根据用户输入的集成条件实现数据的过滤和目标数据的生成。由于数据量比较大,而且数据来源都是生产环境下的,完全实时的方式会对生成数据库造成压力,项目组考虑使用ORACLE存储过程的方式来实现,采用多个ORACLE JOB来模拟实现多线程的方式完成。

为了简单起见,前台把启动任务的相关参数信息写入到一张表,如下为表的结构:

executed successful ........ 125executed successful ........ 125executed successful ........ 125executed successful ........ 126executed successful ........ 126executed successful ........ 127executed successful ........ 127executed successful ........ 128executed successful ........ 128executed successful ........ 129executed successful ........ 129



这里用到了dbms_job包的submit,what和broken函数,用法如下:
1. Broken()过程更新一个已提交的工作的状态,典型地是用来把一个已broken的job标记为未broken工作。
这个过程有三个参数:job 、broken与next_date。

Broken (job       IN binary_integer,
                  Broken    IN boolean,
                  next_date IN date :=SYSDATE)

job参数是工作号,它在问题中唯一标识工作。
broken参数指示此工作是否将标记为broken——TRUE说明此工作将标记为停止执行,而FLASE说明此工作将标记为正常执行。
next_date参数指示在什么时候此工作将再次运行。此参数缺省值为当前日期和时间。
使用Submit()过程,工作被正常地计划好。
这个过程有五个参数:job、what、next_date、interval与no_parse。

2. Submit ( job       OUT binary_ineger,
                   What      IN  varchar2,
                   next_date IN  date,
                   interval  IN  varchar2,
                   no_parse  IN  booean:=FALSE)

job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。
what参数是将被执行的PL/SQL代码块。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE
指示此PL/SQL代码在它第一次执行时应进行语法分析,
而FALSE指示本PL/SQL代码应立即进行语法分析。

3
What()过程应许在工作执行时重新设置此正在运行的命令。这个过程接收两个参数:job与what。

PROCEDURE What (job  IN binary_ineger,
                What IN OUT varchar2)

job参数标识一个存在的工作。what参数指示将被执行的新的PL/SQL代码。


这里使用了动态SQL用来接收任务ID和JOB编号,实现动态分配,貌似在ORACLE 10G中已经对DBMS_JOB包进行了升级,有了新的DBMS_SHEDULE包,有时间再研究一下。

热点排行