Oracle任务调度工具学习


没想到接触Oracle任务调度工具是从解决Oracle自动统计功能开始的。

      话说从10g开始,cbo便大行其道,oracle更是不遗余力的在推动这个优化器,因为它可以智能化的生成执行计划。但是,要实现智能化,就必须有大量的后台数据做支撑。这些用来告诉优化器如何去生成计划的数据就是表的统计信息,包括行数、块数、基数等各类运行时所需考虑的成本。

      但是,这些智能化所依赖的信息是不会自然生成的,也不会在表数据的变化的时候自动告诉优化器,我的数据变化了,变化了哪些。所以,Oracle要有一个工具按照一定的时间规则去搜集这些信息。于是便有了Oracle的自动统计功能,其对应的任务名称为:GATHER_STATS_JOB。

      该功能是通过dbms_schedule包来实现的,是对数据库所有的表信息进行统计和搜集。

      默认的,在数据库创建的时候就创建了gather_stats_job,执行dbms_stats.gather_database_stats_job_proc过程,使用schedular。默认的定义了两个窗口:
weekenight_window定义在下午10点到上午六点.从周一到周五.
weekend_window定义从上午12点到周一12点。

      从这样的情况来看,执行的时间与我系统的一个批处理时间是重合的,两个在一起处理的时候都会占用大量的资源,而导致互相争夺的情况出现。为了错开两个处理时间,必须要将其中一个的触发点延后,我选择了自动统计,将其延到凌晨三点,此时批处理已经处理完成,所以可以正常搜集统计信息了。

      要做的事情很简单,两个步骤:
1、取消原有的计划模式
call dbms_scheduler.set_attribute('GATHER_STATS_JOB', 'SCHEDULE_NAME', '');

2、启用新的调度模式(每天凌晨三点开始执行)
call dbms_scheduler.set_attribute('GATHER_STATS_JOB', 'REPEAT_INTERVAL', 'FREQ=DAILY;BYHOUR=3');
      如果需要改为每周执行一次(以下表示在每个星期六的晚上10点执行该计划),则可以如下:
call dbms_scheduler.set_attribute('GATHER_STATS_JOB', 'REPEAT_INTERVAL', 'FREQ=WEEKLY;BYDAY=SAT;BYHOUR=22');

3、如果该调度没有启用,则可以按如下命令启用:
call dbms_scheduler.enable('GATHER_STATS_JOB');

4、如果需要停止正在执行的中的调度,则可以:
begin dbms_scheduler.stop_job('GATHER_STATS_JOB',true); end;

参考网页:
http://space.itpub.net/7301064/viewspace-468575
http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sched.htm

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12932950/viewspace-717869/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12932950/viewspace-717869/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值