数据库 job 的启用及参数设置
2010-07-06 20:20:36| 分类: oracle | 标签: |举报 |字号大中小 订阅
众所周知,一般操作系统会提供定时执行任务的方法,例如:Unix 平台上提供了让系统定时执行任务的命令
Crontab。但是,对于某些需求,例如:一些对数据库表的操作,最为典型的是证券交易所每日收盘后的结算,它涉
及大量的数据库表操作,如果仍然利用操作系统去定时执行,不仅需要大量的编程工作,而且还会出现用户不一致等
运行错误,甚至导致程序无法执行。
一、分析问题
事实上,对于以上需求,我们可以利用数据库本身拥有的功能 Job Queue(任务队列管理器)去实现。任务队列管理
器允许用户提前调度和安排某一任务,使其能在指定的时间点或时间段内自动执行一次或多次,由于任务在数据库中
被执行,所以执行效率很高。
任务队列管理器允许我们定制任务的执行时间,并提供了灵活的处理方式,还可以通过配置,安排任务在系统用户访
问量少的时段内执行,极大地提高了工作效率。例如,对于数据库日常的备份、更新、删除和复制等耗时长、重复性
强的工作,我们就可以利用任务队列管理器去自动执行以减少工作量。
目前,拥有此项功能的数据库有许多,最有代表性的是 SQL Server 7.0、Oracle 8.0.5 等。但是,要让任务队列管理
器工作,还需要我们加以配置才能实现。SQL Server 的功能配置是在一个图形化界面(GUI)中实现的,非常简
单。利用 OEM 客户端管理工具,Oracle 的配置也可以在一个图形界面中完成。然而大多数的用户更习惯于命令行的
方式去操纵数据库。本文介绍如何通过命令行实现这种配置。
二、实现步骤
1
.确保
Oracle
的工作模式允许启动任务队列管理器
Oracle 定时执行“Job Queue”的后台程序是 SNP 进程,而要启动 SNP 进程,首先要确保整个系统的模式是可以启动
SNP 进程的,这需要以 DBA 的身份去执行如下命令:
svrmgrl> alter system enable restricted session;
或 sql> alter system disenable restricted session;
利用如上命令更改系统的会话方式为 disenable restricted,为 SNP 的启动创造条件。
2
.确保
Oracle
的系统已经配置了任务队列管理器的启动参数
SNP 的启动参数位于 Oracle 的初始化文件中,该文件放在$ORACLE_HOME/dbs 路径下,如果 Oracle 的 SID 是
myora8 的话,则初始化文件就是 initmyora8.ora,在文件中对 SNP 启动参数的描述部分如下:
job_queue_process=n
job_queue_interval=N
第一行定义 SNP 进程的启动个数为 n。系统缺省值为 0,正常定义范围为 0~36,根据任务的多少,可以配置不同的
数值。
第二行定义系统每隔 N 秒唤醒该进程一次。系统缺省值为 60 秒,正常范围为 1~3600 秒。事实上,该进程执行完当
前任务后,就进入睡眠状态,睡眠一段时间后,由系统的总控负责将其唤醒。
如果该文件中没有上面两行,请按照如上配置添加。配置完成后,需要重新启动数据库,使其生效。注意:如果任务
要求执行的间隔很短的话,N 的配置也要相应地小一点。
3
.将任务加入到数据库的任务队列中
调用 Oracle 的 dbms_job 包中的存储过程,将任务加入到任务队列中:
dbms_job.submit( job out binary_integer,
what in archar2,
next_date in date,
interval in varchar2,
no_parse in boolean)
其中:
●job:输出变量,是此任务在任务队列中的编号;
●what:执行的任务的名称及其输入参数;
●next_date:任务执行的时间;