Oracle10g调度例行任务解放DBA时间

网络整理 - 07-26

例行任务是单调和令人厌烦的。如果你以手动方式执行这些例行任务,则你不得不紧张地一次又一次地重复执行相同的任务,Oracle数据库10g新的内置任务调度程序为你提供了调度例行任务的强大功能。利用这一调度程序,你可以规定要完成的工作、指定什么时候完成该工作,并监测该工作的完成情况,以便能纠正任何问题。你甚至可以控制分配给您所调度的任务的数据库资源和优先级,以确保首先完成最重要的工作,而不会对其它系统的活动产生不可抵抗的影响。

体系结构

你可以通过 DBMS_SCHEDULER 包或者通过Oracle企业管理器10g的数据库控制功能来访问这一新的调度程序。图1给出了与任务的创建和执行具有最直接关系的调度程序组件。一项任务将一个程序和一个调度表结合在一起。该程序定义将要运行的内容。例如,一个程序可以是一个 PL/SQL 块、一个存储过程,或者一个操作系统脚本。而调度表则定义什么时候运行该程序。对于一个一次性任务,调度表中仅包含一个起始时间。对于一个重复性任务,你可以指定一个起始时间,一个重复运行调度表,还可以根据需要指定结束时间。每次运行一项任务都被看作是一个任务实例。在开始使用该程序调度程序时必须掌握的三个核心组件就是任务、调度表和程序。

如图1所示,任务类将调度系统与资源管理系统连接起来,使你可以控制如何将数据库资源分配给正在运行的任务。利用任务类将一个任务下达到资源使用者组,该组是一个共享 CPU 时间、并行操作和其它资源分配的会话期组。然后,你可以利用资源计划来控制将这些资源分配给这个使用者组或其它使用者组。图2 显示出调度程序窗口如何控制不同资源计划在何时被激活。图2 还显示一个窗口组,它将类似的窗口组合成一个单一的实体。窗口和窗口组使你可以在很好地控制如何将数据库资源分配给不同的任务类。

 

Oracle10g调度例行任务解放DBA时间

 

图1:调度程序核心组件

Oracle10g调度例行任务解放DBA时间

   

图2:调度程序资源管理

开始

要创建并运行任务,你需要至少具有CREATE JOB 系统权限。如果你是一位 DBA,那么你将通过授予DBA 角色的SCHEDULER_ADMIN角色而具有 CREATE JOB权限和所有其它调度程序权限。你可以将 CREATE JOB 权限授予数据库用户,允许他们在其自己的模式中创建和运行他们自己的任务。例如,下面的语句将 CREATE JOB 授予用户 gennick:

    GRANT CREATE JOB TO gennick;

  

与你应用DBMS_JOB时的情况不同,你不需要设置一个初始化参数,以启动一个任务协调程序后台进程。如果你使用该新的调度程序创建任务,则你的实例会在需要时自动启动一个任务协调程序后台进程。

如果你计划使用资源计划和使用者组来控制数据库资源的分配,则将你实例的RESOURCE_LIMIT 参数设置为TRUE。可以通过 ALTER SYSTEM完成该项设置,如下所示:

    ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;

  

最后,如果您将CREATE JOB 权限授予了一个非DBA用户,而且你希望该用户能够使用数据库控制的图形用户界面来调度任务,那么你还需要授予该用户 SELECT ANY DICTIONARY 系统权限。

你还可以使用 DBMS_SCHEDULER 包。通过SQL*Plus 调用DBMS_SCHEDULER使你完全可以通过命令行访问该调度程序。DBMS_SCHEDULER 还提供了将调度程序功能内嵌于用户应用程序中的能力。