博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
物化视图每天自动刷新2次的方法
阅读量:3575 次
发布时间:2019-05-20

本文共 2467 字,大约阅读时间需要 8 分钟。

有用过ORCLE 物化视图的朋友,请帮个忙,我想每天刷新两次,比如中午十二点,晚上七点,不知道怎么写,急用!

你这个需要,可以这样实现 

建一个表,再写个存储过程 
再用个SCHEDULE JOB来实现 
用普通JOB,或者物化视图,对于时间间隔都需要有规律 
或者写个储存过程来手工刷新物化视图,然后用SCHEDULE JOB来实现每天12点,19点刷新

 

对于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; 
/

 

dbms_mview.REFRESH('mv_emp');  这个是我想要的,谢谢了,还有,如果我之前用alter materialized view  '||  a.table_name||' refresh complete  start with sysdate  next sysdate+100/(24*60*60)'||';' 建的刷新,怎么取消啊。 

 

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

SELECT job, what from user_jobs; 
找到jobno后,用dbms_Job.remove就可以删除job了 
exec dbms_job.remove(:jobno);

 

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' 
); 
上面这种方式我不怎么明白。

 

物化视图的定时刷新其实是用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查询出这个任务来。

转载地址:http://sapgj.baihongyu.com/

你可能感兴趣的文章
MySQL笔记
查看>>
计算机运算方法之(原码 补码 反码 移码)
查看>>
计算机组成原理之(二进制与十进制互相转换,数的定点表示与浮点数表示)例题:设浮点数字长16位,其中阶码5位(含有1位阶符),尾数11位(含有1位数符)
查看>>
选择排序(java代码实现)
查看>>
插入排序
查看>>
哈夫曼树java代码实现
查看>>
快速排序
查看>>
vue路由高亮的两种方式
查看>>
vue router 报错: Uncaught (in promise) NavigationDuplicated {_name:""NavigationDuplicated"... 的解决方法
查看>>
vue跳转页面的两种方式
查看>>
存储器题目解析(持续更新中....)
查看>>
存储器知识要点
查看>>
Cache模拟器的实现
查看>>
设计模式七大原则
查看>>
SpringBoot入门(二)场景启动器
查看>>
SpringBoot入门--自动配置
查看>>
自动配置原理
查看>>
TCP协议
查看>>
关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?
查看>>
spring注解版(一)
查看>>