Oracle的物化视图01

0、物化视图简介

物化视图的特点:

(1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证;

(2) 物化视图也是一种段(segment),所以其有自己的物理存储属性;

(3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证;

****化视图由于是物理真实存在的,故可以创建索引,创建方式和对普通表创建方式相同

****物化视图把他的物理结构存储在自己的段中,该段可以被索引和分区

物化视图可以查询表,视图和其它的物化视图

如果你想修改本地副本,必须用高级复制的功能

物化视图的作用:

物化视图允许你在本地维护远程数据的副本,这些副本是只读的

物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;

物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL 语句的正确性和有效性

当基表发生变化时,物化视图也应当刷新。

1、创建物化视图

         create materialized view [view_name]

         refresh [fast|complete|force]

         [ on [commit|demand] | start with (start_time) next (next_time) ]

         as {创建物化视图用的查询语句} 

  例子:

        create materialized view V_AI_DEDUCTION_FEE_material
        tablespace users 指定物化视图存放的  表空间
        build immediate 指定何时生成数据 IMMEDIATE 创建后立刻生成数据
                 DEFERRED  需要时生成数据
        refresh fast 指定视图同步方式,也可以通过JOB方式进行定时刷新,可以到表USER_JOBS中查看JOB的信息
                    on demand  
                    ON COMMIT 基表DML提交的同时进行刷新
        start with trunc(SYSDATE)+ 1  NEXT trunc(SYSDATE)+1  开始刷新时间,刷新间隔
               
        with rowid 只能有一个单一主表,不能包括distinct,聚合函数,关联
             primary key  基于表的主键
        disable qry rewrite 是否支持查询重写(对基表查询时,判断能否通过物化视图查询)
        as
        查询语句

2、修改物化视图语句

        ALTER MATERIALIZED VIEW V_AI_DEDUCTION_FEE_material
        REFRESH FORCE
        ON DEMAND
        START WITH SYSDATE


3、 刷新物化视图

      refresh [fast|complete|force]

      FAST-F 增量刷新方式,仅刷新上次刷新后刷新的数据
      COMPLETE-C 全量刷新方式
      FORCE-? 判断是否增量,否则全量
      NEVER  不进行刷新

3.0 创建时指定视图数据

Build immediate一共有三个选项

(1) Build immediate:建立物化视图,并马上填充视图数据。

(2) Build deferred:只建立物化视图,在第一次刷新之间不填充数据。

(3) No prebuilt table,使用事先已存在的,已含有视图定义中有现有数据的表,而不是建立一个新结构来保存数据。如果是refresh fast on commit或refresh complete on commit创建的,则在基础表提交的时候都会得到刷新。启用或禁用物化视图,需要有query rewrite或global query rewrite权限。
 

3.1 on[commit|demand]—区别在于刷新方法的不同

      on demand:在用户需要刷新的时候刷新,这里就需要用户自己动手去刷新数据了(也可以使用job定时刷新) 
      on commit:当主表中有数据提交的时候,立即刷新MV中的数据; 

      DBMS_MVIEW用于管理物化视图;
      DBMS_REFRESH用于管理物化视图的刷新;
      DBMS_OLAP用于确定物化视图是否能提高查询的性能。 

dbms_mview.refresh(‘EMP_BY_DISTRICT’); ——刷新指定的物化视图SQL>execute dbms_mview.refresh_defresh_dependent(‘EMPLOYEE’); ——刷新利用了该表的所有物化视图SQL>execute dbms_mview.refresh_all_mviews; ——刷新该模式中,自上次刷新以来,未得到刷新的所有物化视图。

3.2 手动刷新物化视图

dbms_mview.refresh(

                                 TAB=>'V_AI_DEDUCTION_FEE_material',                                      

                                 METHOD=>'COMPLETE',                                        

                                  PARALLELISM=>8

                                  );   --PARALLELISM并行控制参数 

3.3 修改物化视图 刷新方式

alter materialized view V_AI_DEDUCTION_FEE_material

refresh force on demand

start with sysdate next to_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),' 22:00:00'),'dd-mm-yyyy hh24:mi:ss');


4、删除物化视图

drop materialized view V_AI_DEDUCTION_FEE_material;

 

5、使用物化视图前的几个配置步骤

(1) 确定那些语句要创建物化视图。

(2) 决定是否要保持视图与基础表数据同步。

     如果不同步,可选择如下三种刷新方式:

     COMPLETE:刷新启动时,先truncate物化视图,再从基础表重新插入填充数据。

     FAST:只刷新基础表上次刷新后改变的数据。使用视图的日志数据或ROWID完成。

     FORCE:默认的方式。先使用FAST,不行就使用COMPLETE方式。

(3) 设置init.ora的参数:

JOB_QUEUE_PROCESSES,必须设置大于 1

QUERY_REWRITE_ENABLED,设置为TRUE时,允许动态重写查询。

QUERY_REWRITE_INTEGRITY,确定访问物化视图时数据一致性要遵守的程度。

OPTIMIZER_MODE,必须设置成CBO的某种方式。

使用一个物化视图,用户只需在基础表上拥有权限即可。

 

 

 

 

 

 

 

 

 

展开阅读全文

没有更多推荐了,返回首页