ITPub博客

首页 > 数据库 > Oracle > 基于事件的调度

基于事件的调度

原创 Oracle 作者:jidongzheng 时间:2008-08-04 11:32:21 0 删除 编辑
Oracle 数据库 10g 第 1 版中引入的 Oracle Scheduler 是下一代作业调度系统,它取代了 DBMS_JOB 附带的程序包。与该程序包相比,此 Scheduler 工具有一些显著的优点(详见此处最初的介绍)。

在 Oracle Scheduler 的第一版中,作业基于时间并根据时间触发。但如果要使触发器基于事件该怎么办?例如,当帐户的 Account Manager 更改时,您可能希望一个批处理程序自动执行以重新计算收入并重新发布报表。

可以在 Oracle 数据库 10g 第 2 版的 Scheduler 工具中实现此类基于事件的触发。事件通过 Advanced Queueing (AQ)(其中有效载荷是一个对象类型)传递给 Scheduler。因此,您首先需要创建一个 AQ(如 proc_queue),在这里将把任意这样的事件排队。然后,您必须基于此事件创建一个调度。

begin
dbms_scheduler.create_event_schedule (
schedule_name   => 'accadmin.acc_mgr_change',
start_date      => systimestamp,
event_condition => 'tab.user_data.event_name = ''acc_mgr_change''',
queue_spec      => 'proc_queue');
end;
接着,您将创建一个作业以遵循此调度。您也可以直接调度一个作业而不用先创建一个调度。
begin
dbms_scheduler.create_job (
job_name        => acc_mgr_change,
program_name    => acc_mgr_change_procs,
start_date      => 'systimestamp,
event_condition => 'tab.user_data.event_name = ''acc_mgr_change''',
queue_spec       => 'proc_queue'
enabled          => true);
end;
默认值是 UNLIMITED。

如果事件(而不是特定时间)是触发作业的决定因素,则基于事件的调度很有帮助。[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/197458/viewspace-1008487/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    152
  • 访问量
    724077