如图1所示,任务类将调度系统与资源治理系统连接起来,使你可以控制如何将数据库资源分配给正在运行的任务。利用任务类将一个任务下达到资源使用者组,该组是一个共享 CPU 时间、并行操作和其它资源分配的会话期组。然后,你可以利用资源计划来控制将这些资源分配给这个使用者组或其它使用者组。图2 显示出调度程序窗口如何控制不同资源计划在何时被激活。图2 还显示一个窗口组,它将类似的窗口组合成一个单一的实体。窗口和窗口组使你可以在很好地控制如何将数据库资源分配给不同的任务类。
要创建一个重复性任务,你首先需要定义程序和调度表。假定你需要在每隔一天的下午6:00加载一个外部表。首先创建一个调度程序,它提供一个 PL/SQL 块以执行该加载。代码清单1中的PL/SQL 块发出一个对DBMS_SCHEDULER.CREATE_PROGRAM的调用,作为程序操作所提供的 PL/SQL 块包含有一个简单的INSERT...SELECT FROM 语句,用于从该外部表中载入新的客户。
接着,创建一个调度表,根据该调度表运行该程序。代码清单2 给出一个对DBMS_SCHEDULER.CREATE_SCHEDULE的调用,用于创建我的 PERIODICLOADS调度表。注释和调度表名称参数相当简单。注释可以是提醒你为什么要创建该调度表的任意文本。schedule_ name 参数指明该调度表的所有者和名称。与程序和任务相类似,调度程序也是模式对象,它们的名称必须符合与表、索引等相同的命名规则。
start_date为一个TIMESTAMP WITH TIME ZONE 值,它指明该调度表什么时候被激活。此调度表在(美国东部时间)2004年3月22日星期一开始时被激活。
FREQ=DAILY 根据PERIODICLOADS 调度表规定,任何任务相继运行之间的重复时间间隔以天或者24小时为单位计算。INTERVAL=2 指明单位的数目,在此例中为2天。三个 BY 数值-BYHOUR=18, BYMINUTE=0, and BYSECOND=0-指明任务运行的时刻,以24小时制表示。代码清单2中的PERIODICLOADS 调度表将给出以下任务运行时间: