1:权限:GRANT CREATE MATERIALIZED VIEW,还必须直接赋予GRANT QUERY REWRITE.
2:分类 聚集的物化视图;只包含连接的物化视图;嵌套物化视图
3:创建方式 创建方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE
4:查询重写 查询重写(Query Rewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE。
5:刷新 1:刷新方式:ON DEMAND 和 ON Commit ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷 新,也可以通过JOB定时进行刷新。ON COMMIT指出物化视图在对基表的DML操作提交的同时进行刷新 2:刷新方法: 刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用 COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认值是FORCE ON DEMAND。
6:物化视图日志 物化视图日志:如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。
7:快速刷新: CREATE TABLE B (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30)); CREATE TABLE C (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30)); CREATE TABLE A (ID NUMBER, BID NUMBER, CID NUMBER, NUM NUMBER);
INSERT INTO B SELECT ROWNUM, 'B'||ROWNUM FROM USER_TABLES WHERE ROWNUM <= 6; INSERT INTO C SELECT ROWNUM, 'C'||ROWNUM FROM USER_TABLES WHERE ROWNUM <= 4; INSERT INTO A SELECT ROWNUM, TRUNC((ROWNUM - 1)/2) + 1, TRUNC((ROWNUM - 1)/3) + 1, ROWNUM FROM USER_TABLES WHERE ROWNUM <= 12;
CREATE MATERIALIZED VIEW LOG ON A WITH ROWID; CREATE MATERIALIZED VIEW LOG ON B WITH ROWID; CREATE MATERIALIZED VIEW LOG ON C WITH ROWID;
CREATE MATERIALIZED VIEW MV_ABC REFRESH FAST ON COMMIT ENABLE QUERY REWRITE AS SELECT C.ID CID, C.NAME CNAME, B.ID BID, B.NAME BNAME, A.NUM, A.ROWID AROWID, B.ROWID BROWID, C.ROWID CROWID FROM A, B, C WHERE A.BID = B.ID AND A.CID = C.ID;
--嵌套物化视图 CREATE MATERIALIZED VIEW LOG ON MV_ABC WITH ROWID (BNAME, CNAME, NUM) INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW MV_MV_ABC REFRESH FAST ON COMMIT ENABLE QUERY REWRITE AS SELECT CNAME, BNAME, COUNT(*) COUNT, SUM(NUM) SUM_NUM FROM MV_ABC GROUP BY CNAME, BNAME;
8:定位错误: 使用EXPLAIN_MVIEW 过程首先要建立MV_CAPABILITIES_TABLE表,建表的脚步是$ORACLE_HOME/rdbms/admin /utlxmv.sql。(EXPLAIN_MVIEW过程是两个过程的重载,一个输出到MV_CAPABILITIES_TABLE表,另一个以PL /SQL的VARRAY格式输出,为了简单起见,我们建立MV_CAPABILITIES_TABLE表)。
SQL> @?rdbmsadminutlxmv.sql
SQL> BEGIN 2 DBMS_MVIEW.EXPLAIN_MVIEW('SELECT CNAME, BNAME, COUNT(*) COUNT, SUM(NUM) SUM_NUM FROM MV_ABC 3 GROUP BY CNAME, BNAME', 'MV_MV_ABC'); 4 END; 5 /
该过程可以输入已经存在的物化视图名称(或USER_NAME.MV_NAME),也可输入建立物化视图的查询语句。另外一个参数STATEMENT_ID输入一个语句ID,为了标识出表中对应的记录。
所有类型的快速刷新的物化视图: 1.物化视图不能包含对不重复表达式的引用,如SYSDATE和ROWNUM; 2.物化视图不能包含对LONG和LONG RAW数据类型的引用。
只包含连接的物化视图: 1.必须满足所有快速刷新物化视图都满足的条件; 2.不能包括GROUP BY语句或聚集操作; 3.如果在WHERE语句中包含外连接,那么唯一约束必须存在于连接中内表的连接列上; 4.如果不包含外连接,那么WHERE语句没有限制,如果包含外连接,那么WHERE语句中只能使用AND连接,并且只能使用“=”操作。 5.FROM语句列表中所有表的ROWID必须出现在SELECT语句的列表中。 6.FROM语句列表中的所有表必须建立基于ROWID类型的物化视图日志。
create table dim_a (id number primary key, name varchar2(30)); create table dim_b (id number primary key, name varchar2(30)); create table fact (id number, aid number, bid number, num number);
alter table fact add constraint fk_fact_aid foreign key (aid) references dim_a(id); alter table fact add constraint fk_fact_bid foreign key (bid) references dim_b(id);
insert into dim_a select rownum, 'a'||rownum from user_objects; insert into dim_b select rownum, 'b'||rownum from user_objects; insert into fact select rownum, mod(rownum, 6) + 1, mod(rownum, 5 ) + 1, rownum *2 from user_objects;
|