物化视图定时指定时间点刷新

 对于oracle10g简单方法:
1. 先建立一个物化视图,不用指明刷新参数,只要create materialized view,如
  CREATE MATERIALIZED VIEW mv_emp 
  AS SELECT * FROM scott.emp;

2. 建立一个用来刷新物化视图的存储过程,如

CREATE OR REPLACE PROCEDURE auto_refresh_mview_job_proc
AS
BEGIN
  dbms_mview.REFRESH('mv_emp');
END;
/


3. 用ORACLE 10g的scheduler每天12:00和19:00定期刷新物化视图

  BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'auot_refresh_mview_job',
job_type => 'STORED_PROCEDURE',
job_action => 'scott.auto_refresh_mview_job_proc',
start_date => SYSDATE,
repeat_interval => 'FREQ=DAILY; BYHOUR=12,19',
enabled => TRUE,
comments => 'Refresh materialized view mv_emp'
);
END;
/

4. 删除scheduler对象的方法

BEGIN
DBMS_SCHEDULER.DROP_JOB(
job_name => 'auot_refresh_mview_job'
);
END;

把刷新物化视图的JOB 删除了就可以了,下面是查询物化视图及对应的jobno的语句: 
SELECT job, what from user_jobs;

找到jobno后,用dbms_Job.remove就可以删除job了

exec dbms_job.remove(:jobno);

物化视图的定时刷新其实是用Oracle的任务实现的,就是按照刷新的时间间隔定期的执行DBMS_MVIEW.REFRESH('mv_emp')的.由于Oracle10g增加了功能更为强大的scheduler功能,可以更加灵活的定义执行任务的时间,因此这里我给出的方法就是用10g的SCHEDULER,用scheduler要用到Oracle的内部包DBMS_SCHEDULER,其中DBMS_SCHEDULER.CREATE_JOB就是来创建一个实时执行的任务,下面是一个例子

BEGIN 
DBMS_SCHEDULER.CREATE_JOB( 
job_name => 'auto_refresh_mview_job', 
job_type => 'STORED_PROCEDURE', 
job_action => 'scott.auto_refresh_mview_job_proc', 
start_date => SYSDATE, 
repeat_interval => 'FREQ=DAILY; BYHOUR=12,19', 
enabled => TRUE, 
comments => 'Refresh materialized view mv_emp' 
); 

job_name对应的参数是任务名,这个任务的名字就是'auto_refresh_mview_job'
job_type是任务的类型,这里是存储过程类型
job_action是任务的名称,这里就是存储过程'scott.auto_refresh_mview_job_proc',存储过程的功能就是执行dbms_mviw.refresh('mv_emp')
start_date是开始执行的时间,这里是从任务创建时就开始执行
repeat_interval是执行的时间间隔,FREQ表示执行频率,DAILY表示每天执行,BYHOUR定义了具体的执行时间为每天的12时和19时
enabled表示任务为启用状态,如果不加这个参数,为缺省的不启用
comments为任务的一个说明,这里面的内容可以根据实际情况自行填写。

定义了上面的任务后,可以从字典表dba_scheduler_jobs查询出这个任务来。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值