------------------------------ -------------------
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的状态;