物化视图 不能定时刷新 |
您所在的位置:网站首页 › 物化视图更新时间 › 物化视图 不能定时刷新 |
今天项目里遇到需要定时刷新数据的问题,我在网上搜索了一下总结如下: 物化视图刷新的模式有两种: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 |