首页 > 代码库 > PLSQL_Material View物化视图的基本概念和用法 (概念)(以物化视图的方式同步两个数据库间的表或实时备份重要表)

PLSQL_Material View物化视图的基本概念和用法 (概念)(以物化视图的方式同步两个数据库间的表或实时备份重要表)

2014-06-08 BaoXinjian

1. 用法


物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。

物化视图存储基于远程表的数据,也可以称为快照。对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。

如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。    

实现两个数据库之间的数据同步,可以存在时间差。

1. 刷新的方式

Fast

Complete

Fource

2. 刷新的方法

DBMS_REFRESH.Refresh

DBMS_MVIEW.Refresh

 

2. 具体应用


    (1).在源数据库建立mview log日志文件

        create materialized view log on w_1 ;

----注:(TEST为表名或者视图名,关于视图上建立物化视图,见基于视图的物化视图

----创建物化视图语句:

    (2).在统计数据建立materializad view  语法    

Create materialized view MV_TEST

----MVTEST为物化视图名

Build immediate

----创建时生成数据对应的是build deferred

Refresh fast

----增量刷新

On commit

----在基表有更新时提交,这里该句对视图无效

With rowid

----这里创建基于rowid的物化视图,对应的是 primary key

As

Select * from TEST;

----生成物化视图数据语句

    (3).调用时进行刷新

        dbms_refresh.refresh(‘W_1‘)

 

3. 语法


 1. 基本语法

    

4. 案例


案例: 创建三种刷新方式的物化视图, 并创建日志,通过dbms_job定时refresh mview group

Step1. 创建三个实体表

CREATE TABLE bxj_objects_t1(   owner,   object_name,   subobject_name,   object_id PRIMARY KEY,   data_object_id,   object_type,   created,   last_ddl_time,   timestamp,   status,   temporary,   generated,   secondary,   namespace,   edition_name)AS   SELECT   * FROM all_objects;      CREATE TABLE bxj_objects_t2(   owner,   object_name,   subobject_name,   object_id PRIMARY KEY,   data_object_id,   object_type,   created,   last_ddl_time,   timestamp,   status,   temporary,   generated,   secondary,   namespace,   edition_name)AS   SELECT   * FROM all_objects;      CREATE TABLE bxj_objects_t3(   owner,   object_name,   subobject_name,   object_id PRIMARY KEY,   data_object_id,   object_type,   created,   last_ddl_time,   timestamp,   status,   temporary,   generated,   secondary,   namespace,   edition_name)AS   SELECT   * FROM all_objects;

 

Step2. 创建物化视图日志

CREATE MATERIALIZED VIEW LOG ON bxj_objects_t1;CREATE MATERIALIZED VIEW LOG ON bxj_objects_t2;   CREATE MATERIALIZED VIEW LOG ON bxj_objects_t3;

 

select * from DBA_MVIEW_lOGS select * from MLOG$_BXJ_OBJECTS_T1select * from MLOG$_BXJ_OBJECTS_T2select * from MLOG$_BXJ_OBJECTS_T3

 

Step3. 创建物化视图

CREATE MATERIALIZED VIEW bxj_objects_mv_t1 REFRESH FAST AS SELECT * FROM apps.bxj_objects_t1;CREATE MATERIALIZED VIEW bxj_objects_mv_t2 REFRESH FORCE AS SELECT * FROM bxj_objects_t2;CREATE MATERIALIZED VIEW bxj_objects_mv_t3 REFRESH COMPLETE AS SELECT * FROM bxj_objects_t3;

 

Step4. 创建物化视图Refresh Group

EXEC DBMS_REFRESH.MAKE(‘REP_MVIEWGROUP‘, ‘BXJ_OBJECTS_MV_T1,BXJ_OBJECTS_MV_T2,BXJ_OBJECTS_MV_T3‘, SYSDATE, ‘SYSDATE + 1‘)

 

Step5. 刷新物化视图

EXEC DBMS_MVIEW.refresh(BXJ_OBJECTS_MV_T1‘,C);EXEC DBMS_REFRESH.refresh(REP_MVIEWGROUP‘);

 

 Step6. 加入dbms_jobs,定时刷新物化视图

DECLARE   jobno   NUMBER;                                             --通过查看该变量可以得到返回的作业编号BEGIN   DBMS_JOB.SUBMIT (      jobno,      DBMS_REFRESH.refresh(‘‘‘ || REP_MVIEWGROUP|| ‘‘‘);‘, --执行脚本程序      SYSDATE,                                                 --现在执行      SYSDATE+1   );END;

 

Thanks and Regards

PLSQL_Material View物化视图的基本概念和用法 (概念)(以物化视图的方式同步两个数据库间的表或实时备份重要表)