Oracle物化视图失效的几种情况及测试(二)

2015-01-21 12:13:54 · 作者: · 浏览: 7
EW_NAME? ? ? ? ? ? ? STALENESS


------------------------------ -------------------


MV_TEST? ? ? ? ? ? ? ? NEEDS_COMPILE


显示状态需要编译


?


SQL> ALTER MATERIALIZED VIEW SCOTT.MV_TEST COMPILE;


进行相应的编译


?


SQL>? SELECT mview_name,staleness FROM DBA_MVIEWS WHERE MVIEW_NAME='MV_TEST';


MVIEW_NAME? ? ? ? ? ? ? STALENESS


------------------------------ -------------------


MV_TEST? ? ? ? ? ? ? ? ? ? ? ? ? STALE


编译完成后,状态变成STALE


2.5 修改源表的表结构测试


SQL>? ALTER TABLE SCOTT.EMP RENAME COLUMN COMM TO COMMS; //修改源表的结构


SQL> SELECT mview_name,staleness FROM DBA_MVIEWS WHERE MVIEW_NAME='MV_TEST';//查看物化视图的状态


?MVIEW_NAME? ? ? ? ? ? ? STALENESS


------------------------------ -------------------


MV_TEST? ? ? ? ? ? ? ? NEEDS_COMPILE


?


SQL>? ALTER MATERIALIZED VIEW SCOTT.MV_TEST COMPILE; //重新编译


?


SQL>? SELECT mview_name,staleness FROM DBA_MVIEWS WHERE MVIEW_NAME='MV_TEST'; //重新编译状态没变;


?


MVIEW_NAME? ? ? ? ? ? ? STALENESS


------------------------------ -------------------


MV_TEST? ? ? ? ? ? ? ? NEEDS_COMPILE


?


SQL> select OBJECT_NAME,STATUS,OBJECT_TYPE from dba_objects where OBJECT_NAME='MV_TEST' ;


?


OBJECT_NAME? ? ? ? STATUS? ? ? ? ? OBJECT_TYPE


-------------------- -------------------- --------------------


MV_TEST? ? ? ? ? VALID? ? ? ? ? TABLE


MV_TEST? ? ? ? ? INVALID? ? ? ? ? MATERIALIZED VIEW? ? ? ?


显示物化视图的状态INVALID
?


?


2.5 修改源表的结构跟物化视图一致


?


SQL>? ALTER TABLE SCOTT.EMP RENAME COLUMN COMMS TO COMM; //修改源表的结构


SQL> SELECT mview_name,staleness FROM DBA_MVIEWS WHERE MVIEW_NAME='MV_TEST'; //需要编译


?MVIEW_NAME? ? ? ? ? ? ? STALENESS


------------------------------ -------------------


MV_TEST? ? ? ? ? ? ? ? NEEDS_COMPILE


?


SQL>? ALTER MATERIALIZED VIEW SCOTT.MV_TEST COMPILE;? //进行重新编译


?


Materialized view altered.


? ?


SQL> SELECT mview_name,staleness FROM DBA_MVIEWS WHERE MVIEW_NAME='MV_TEST'; //状态变成STALE


MVIEW_NAME? ? ? ? ? ? ? STALENESS


------------------------------ -------------------


MV_TEST? ? ? ? ? ? ? ? STALE


?


SQL> select OBJECT_NAME,STATUS,OBJECT_TYPE from dba_objects where OBJECT_NAME='MV_TEST' ;? //状态变成VALID


?


OBJECT_NAME? ? ? ? STATUS? ? ? ? ? OBJECT_TYPE


-------------------- -------------------- --------------------


MV_TEST? ? ? ? ? VALID? ? ? ? ? TABLE


MV_TEST? ? ? ? ? VALID? ? ? ? ? MATERIALIZED VIEW?


总结:当物化视图的源表重新编译了,如果重建后的表结构没有发现变化,那么运行脚本ALTER MATERIALIZED VIEW MV_NAME COMPILE后物化视图的状态就会刷新成有效的;


但是如果表的结构发生了变化,那么需要重新修改物化视图的脚本,相应的物化视图才能有效,dba_objects显示出来的状态才是VALID的状态;