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

Oracle 同时被 2 个专栏收录
26 篇文章 0 订阅
6 篇文章 0 订阅

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,当然在程序里面也可以去控制自动刷新物化视图。

  • 0
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 护眼 设计师:闪电赇 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值