公 告
登 陆
日志日历
日 志
评 论
链 接
统 计
 
http://blueicesoul.mypm.net
 
 
标题:   Oracle物化视图知识

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;

blueicesoul 发表于 2010/4/21 10:05:00 阅读全文 | 回复(0) | 引用通告 | 编辑 | 收藏该日志

发表评论:

    昵称:
    密码:
    主页:
    标题: