物化视图 不能定时刷新

您所在的位置:网站首页 物化视图更新时间 物化视图 不能定时刷新

物化视图 不能定时刷新

2023-07-31 13:17| 来源: 网络整理| 查看: 265

今天项目里遇到需要定时刷新数据的问题,我在网上搜索了一下总结如下:

物化视图刷新的模式有两种:On Demand和On Commit。

        On Demand指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。

        On Commit指物化视图在对基表的DML操作提交的同时进行刷新。

刷新的方法有四种:Fast 、Complete 、Force和Never。

        Fast 刷新采用增量刷新,只刷新自上次刷新以后进行的修改。

        Complete 刷新对整个物化视图进行完全的刷新。

        如果选择Force方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用Complete 的方式。

        Never指物化视图不进行任何刷新。

        默认值是Force On Demand。

我们项目无法进行Commit刷新,就做了一个定时任务如下:

--创建视图

CREATE OR REPLACE VIEW VIEW_EXPORT_DATA AS  

SELECT * FROM TABLE1 INNER JOIN       (table1       union       table2       )

--创建物化视图 CREATE MATERIALIZED VIEW MVIEW_EXPORT_DATA REFRESH FORCE ON DEMAND START WITH TO_DATE('11-04-2018 18:58:05', 'DD-MM-YYYY HH24:MI:SS') NEXT SYSDATE+(1/(24*60)) AS SELECT * FROM VIEW_EXPORT_DATA@ORCL; --创建存储过程(刷新物化视图) create or replace procedure refresh_mviews AS BEGIN    dbms_mview.refresh('MVIEW_EXPORT_DATA');   end refresh_mviews; --创建job定时任务调用刷新物化视图的存储过程 declare   job number; BEGIN   DBMS_JOB.SUBMIT(           JOB => job,  /*自动生成JOB_ID*/           WHAT => 'refresh_mviews;',  /*需要执行的存储过程名称或SQL语句*/           NEXT_DATE => sysdate,  /*初次执行时间*/           INTERVAL => 'sysdate+1/1440' /*每隔1分钟执行一次;*/       );     commit; end;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3