oracle 物化视图的自动刷新方法

oracle 物化视图的自动刷新方法:
方法1,直接在创建的时候,指定start with ,如下代表每分钟执行1次
create materialized view big_table_mv nologging
refresh fast on demand
with rowid
START WITH TO_DATE('18-03-2011 10:09:08', 'DD-MM-YYYY HH24:MI:SS') NEXT SYSDATE + 1 / 60*24
as select * from big_table;

方法2:编写批量刷新某个用户的所有物化视图的procedure,然后结合job可以定时去执行,
create or replace procedure pro_refresh_maview   is
begin
 declare  CURSOR   c_number   is
select user||'.'||mview_name mview_name from user_mviews;
    my_re     c_number%rowtype;
    begin
    open   c_number;
    loop
   exit  when c_number%notfound;
   fetch c_number  into  my_re;
  DBMS_MVIEW.REFRESH(my_re.mview_name,'C');
   end loop;
   close c_number;
   end;
   end  pro_refresh_maview   ;   
刷新某一个物化视图的存储过程mv_emp :
CREATE OR REPLACE PROCEDURE auto_refresh_mview_job_proc
AS
BEGIN
dbms_mview.REFRESH('mv_emp');
END;
/
创建前面存储过程pro_refresh_maview的job (每五分钟执行一次存储过程)这压根就自动刷新了
declare
   pro_refresh_maview_job   number;
begin
  dbms_job.submit(  pro_refresh_maview_job ,' pro_refresh_maview ;',sysdate,'sysdate+1/24/60*5');     ##绿色部分是前面创建的存储过程。红色部分是自己编写的名字
  end;
2、查询job的ID,前面创建的job,
select * from dba_jobs; 
select * from all_jobs; 
select * from user_jobs;
3、根据job的id手动执行前面该job , 
begin
  dbms_job.run(44);
  end;
引申内容。。。。
Oracle 11g 物化视图语法如下:
create materialized view [view_name]
refresh [fast|complete|force]
[
on [commit|demand] |
start with (start_time) next (next_time)
]
as
{创建物化视图用的查询语句}
以上是Oracle创建物化视图(Materialized View,以下简称MV)时的常用语法,各参数的含义如下:
1.refresh [fast|complete|force] 视图刷新的方式:
fast: 增量刷新.假设前一次刷新的时间为t1,那么使用fast模式刷新物化视图时,只向视图中添加t1到当前时间段内,主表变化过的数据.为了记录这种变化,建立增量刷新物化视图还需要一个物化视图日志表。create materialized view log on (主表名)。(多张表时,此语句也生效,创建后,原来的表中会多出两类视图表:MLOG$_table_name和RUPD$_table_name)
complete:全部刷新。相当于重新执行一次创建视图的查询语句。
force: 这是默认的数据刷新方式。当可以使用fast模式时,数据刷新将采用fast方式;否则使用complete方式。
2.MV数据刷新的时间:
on demand:在用户需要刷新的时候刷新,这里就要求用户自己动手去刷新数据了(也可以使用job定时刷新)
on commit:当主表中有数据提交的时候,立即刷新MV中的数据;
start ……:从指定的时间开始,每隔一段时间(由next指定)就刷新一次;
物化视图的刷新:
Oracle 的物化视图的快速刷新要求必须建立物化视图日志,通过物化视图日志可以实现增量刷新功能。
3.
批量刷新某个用户的全部的物化视图,使用游标,这样只能执行一个
begin
for rec in (select user||'.'||mview_name mview_name from user_mviews)
loop
DBMS_MVIEW.REFRESH(rec.mview_name,'C');
end loop;
end;
总结:oracle数据库物化视图定时刷新就两种方法,一种是创建的过程中指定start with参数,一种是procedure+jop,当然在程序里面也可以去控制自动刷新物化视图。

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

转载于:http://blog.itpub.net/29654823/viewspace-2136213/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值