Oracle物化视图失效分析

来源:互联网 发布:燕达医院招聘网络咨询 编辑:程序博客网 时间:2024/05/01 10:39

之前在一个项目中,解决大数据量查询的效率问题的时候,应用到了物化视图。


物化视图在数据查询上,无法实现实时查询,机制问题,但是,确实解决了数据查询效率过慢的问题,同时也减轻了查询导致的数据库服务器的处理压力。(事实上是把压力转移到了服务器不处理请求的时间段,比如晚上、凌晨)


最近在项目维护过程中,发现物化视图总是失效。一般通过PLSQL进去查看的时候,部分物化视图上面都会有一个红色的叉叉,则表示该物化视图失效了。

或者通过SQL查询分析:
SELECT T.status,T.OBJECT_NAME,T.OBJECT_TYPE,T.* FROM  USER_OBJECTS T WHERE T.status<>'VALID';
物化视图失效的判断依据是:
STATUS为"INVALID"

解决办法是对物化视图重新编译:删除-->重新创建。红叉叉消失。

在解决问题过程中,我自己验证了这个问题出现的情况:
主要是在生成物化视图后,后期维护过程中,对数据库表机构进行了调整、修改,所以导致了物化视图的失效。

理论上,只有对物化视图的基表进行过调整(增加、修改、删除字段属性)才会对对应的物化视图产生影响,并使其失效。但是我在进行创建表、删除表(不是对应物化视图基表)、执行alert操作,这些都会导致物化视图失效。深层原因没有进一步分析。(希望有高手指点)。

需要注意的问题:
1、在存在物化视图的企业应用中,每一次调整数据库都需要做一次物化视图核实,确认是否对产生物化视图的基表进行了调整,如果有调整,都应该需要重新编译对应的物化视图。
2、最笨的一个处理办法,每次对数据库进行升级操作,都对物化视图进行一次重新编译。

2012-2-8更新:
找到对Oracle对对象的重新编译方式。
Oracle对象类型:
FUNCTION
INDEX
LOB
MATERIALIZED VIEW
PROCEDURE
SEQUENCE
TABLE
TRIGGER
VIEW

语法:ALTER 对象类型 对象名称 COMPILE;
一般通过如下SQL:
SELECT 'ALTER '||T.OBJECT_TYPE||' '||T.OBJECT_NAME||' COMPILE ;'  FROM  USER_OBJECTS T WHERE T.status<>'VALID';
可以查询处理需要重新编译的对象。

以此记录,供大家参考,学习。
原创粉丝点击