oracle 对物化视图的使用中遇到问题
1.建立一个简单的物化视图
create table student_info ( sno number(10) constraint pk_si_sno primary key, sname varchar2(10), sex varchar2(2), create_date date );
CREATE MATERIALIZED VIEW mv_student_info BUILD IMMEDIATE REFRESH FORCE ON DEMAND START WITH SYSDATE NEXT SYSDATE + 3/144 AS SELECT * from student_info
创建一个按照时间收集的物化视图
SQL> SELECT MVIEW_NAME, LAST_REFRESH_DATE "START_TIME", FULLREFRESHTIM, INCREFRESHTIM , REFRESH_METHOD, SUMMARY , INC_REFRESHABLE, INVALID , REWRITE_ENABLED FROM ALL_MVIEW_ANALYSIS WHERE OWNER='LBCDBA' ORDER BY LAST_REFRESH_DATE DESC; 2 3 4 5 6 7 8 9 10 11 12 MVIEW_NAME START_TIME ------------------------------------------------------------ ------------ FULLREFRESHTIM INCREFRESHTIM REFRESH_METHOD SU IN IN RE -------------- ------------- ---------------- -- -- -- -- MV_STUDENT_INFO 07-SEP-23 0 0 FORCE N Y N N
查看物化视图的状态,发现物化视图是可用的,
执行insert 数据
insert into lbcdba.student_info (sno, sname, sex, create_date) values (10, '王五', 'n', sysdate);
在查看物化视图的状态
SQL> SELECT MVIEW_NAME, LAST_REFRESH_DATE "START_TIME", FULLREFRESHTIM, INCREFRESHTIM , REFRESH_METHOD, SUMMARY , INC_REFRESHABLE, INVALID , REWRITE_ENABLED FROM ALL_MVIEW_ANALYSIS WHERE OWNER='LBCDBA' ORDER BY LAST_REFRESH_DATE DESC; 2 3 4 5 6 7 8 9 10 11 12 MVIEW_NAME START_TIME ------------------------------------------------------------ ------------ FULLREFRESHTIM INCREFRESHTIM REFRESH_METHOD SU IN IN RE -------------- ------------- ---------------- -- -- -- -- MV_STUDENT_INFO 07-SEP-23 0 0 FORCE N Y Y N
发现物化视图变为不可用了,
SQL> / OBJECT_NAME STATUS OBJECT_TYPE -------------------- -------------- -------------------------------------- MV_STUDENT_INFO VALID TABLE MV_STUDENT_INFO INVALID MATERIALIZED VIEW
并且查看dba_objects 也是不可用状态
ON DEMAND Clause
指定ON DEMAND表示数据库不会刷新物化视图,除非用户通过三个DBMS_MVIEW刷新过程之一手动启动刷新。
只能指定ON COMMIT、ON DEMAND和ON STATEMENT子句中的一个。如果省略这三个子句,则ON DEMAND是默认值。您可以通过在相同的CREATE MATERIALIZED VIEW语句或随后的ALTER MATERIALIZED VIEW语句中指定START WITH或NEXT子句来覆盖此默认设置。
START WITH和NEXT优先于ON DEMAND。因此,在大多数情况下,当指定了START WITH或NEXT时,指定ON DEMAND是没有意义的。
ORACLE 认为只有当物化视图正在运行时候才是可用的,如果设置了一天或者比较长时间的时间间隔运行物化视图会变成不可用,这是预期行为,那么如何判断物化视图是否可用呢?
可以通过ALL_MVIEWS中STALENESS列来辅助分析物化视图的可用性,这个视图可以看到视图和主表之间的关联关系
本文来自博客园,作者:蚌壳里夜有多长,转载请注明原文链接:https://www.cnblogs.com/dbahrz/p/17685008.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)