Oracle定时任务:job与schedules详解与实例操作

5星 · 超过95%的资源 需积分: 16 17 下载量 150 浏览量 更新于2024-09-16 收藏 40KB TXT 举报
Oracle的定时任务执行管理主要通过两个模块进行,分别是9i时代的`dbms_job`和10g、11g及后续版本的`schedules`。这两个模块在处理任务调度和管理上有所不同,且具有各自的特性和用法。 首先,`dbms_job`主要用于Oracle 9i时期的定时任务,它提供了一种简单的方式来安排一次性或周期性的PL/SQL代码执行。`dbms_job`的核心API包括`CREATE_JOB`、`BEGIN_JOB`、`END_JOB`以及查询和设置job属性的方法,如`GET_ATTRIBUTE`和`SET_ATTRIBUTE`。用户可以通过这些函数创建job,指定起始时间(start_time)、重复间隔(repeat_interval)、结束时间(end_time)等参数,并配置job的优先级(job_priority)、自动删除(auto_drop)和其他特性。权限管理也十分重要,非SYS用户通常需要相应权限才能创建和管理job。 然而,随着Oracle版本的升级,`dbms_job`逐渐被`schedules`取代。`schedules`模块在10g及以后的版本中引入,提供了更强大的任务调度能力。它允许用户创建更复杂的任务,支持多种作业类型,如EXECUTABLE(可执行脚本)、PLSQL_BLOCK(PL/SQL块)、STORED_PROCEDURE(存储过程)等。`CREATE_SCHEDULE`函数用于创建一个新的调度,用户可以指定job与schedule关联,以及job的运行策略,比如是否重启(restartable)、最大运行次数(max_runs)和失败次数限制(max_failures)等。 在实际操作中,例如创建一个名为`ARC_MOVE`的job,用户可以编写shell脚本作为job_action,然后通过`scheduler`模块将其与特定的schedule关联,如`EVERY_60_MINS`,表示每60分钟执行一次。此外,job的命名(job_name)和schedule的名称(schedule_name)都是必需的,且job_name在整个数据库中必须唯一,而schedule_name在同一个scheduler下是唯一的。 对于查询和管理,用户不仅可以通过`DBA_SCHEDULER_JOBS`视图查看job列表,还可以使用`DBMS_SCHEDULER.GET_ATTRIBUTE`获取job的详细属性,并通过`DBMS_SCHEDULER.SET_ATTRIBUTE`来修改它们。权限控制同样关键,创建和修改特定job时,需要确保具有相应的系统权限。 Oracle的定时任务执行管理经历了从`dbms_job`到`schedules`的演进,后者提供了更灵活、功能更丰富的任务调度方案。熟悉这两个模块的操作,对于有效地管理和优化数据库的日常维护工作至关重要。