值得看、讨论的问题,关于在Oracle中实现定时操作的,高手们请进。

white_dove3000 2003-10-17 09:08:27
我写了一个简单的存储过程,并想实现其定时操作,每分钟运行一次,我已经把任务加入到了数据库的存储队列中了,并能用dbms_job.run(1)调用任务,但它并不能实现每分钟自动调用一次。
我看了一篇文章,说是:
实现步骤

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.将任务加入到数据库的任务队列中

×××××××××××××××××××××××××××××××××
但我在sql plus中,sql> alter system enable restricted session;

可以执行,sql> alter system disenable restricted session;执行不了,该如何做?

我用的是数据库oracle9,在确保Oracle的系统已经配置了任务队列管理器的启动参数时,我根本找不到有这样的*.ora文件,在其中含有这样的参数。

我觉得我的问题是出在这两个环节上,但我不知道如何去做???


...全文
82 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
penitent 2003-10-17
  • 打赏
  • 举报
回复
还有,9i一般使用spfile

可以通过show parameter spfile获知

spfile可以通过alter system来修改参数
如alter system set job_queue_process =10 scope=memory|spfile|both
beckhambobo 2003-10-17
  • 打赏
  • 举报
回复
本人也测试,不能精确到一分钟执行一次,有误差的
suleen 2003-10-17
  • 打赏
  • 举报
回复
1.系统不能在restricted方式下:
sql>alter system disable restricted session;
2.在9.0.1中,job_queue_interval已经改成了隐藏的_job_queue_interval,一般不要修改.
3.如果job_queue_process不能设置成0,它是后台进程的个数,设置之后,可以查看有多少个后台进程ps -ef|egrep ora

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧