物化视图是包括一个查询结果的数据库对像,它是远程数据的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。

下面通过一个简单的例子来演示物化视图的复制功能

1.创建测试用户testUser1和testUser2,由于物化视图的创建设计的权限比较多,这里就方便就直接用dba

SQL> create user testUser1 identified by jacshan;

用户已创建

SQL> grant connect,resource to testUser1;

授权成功。

SQL> create user testUser2 identified by jacshan;

用户已创建

SQL> grant dba to testUser2;

授权成功。

2.在testUser1下创建一张表

SQL> conn testUser1/jacshan

已连接。

SQL> create table test(

  2  id number primary key,

  3  content varchar2(10)

  4  );

表已创建。

3.创建物化视图日志

SQL> create materialized view log on test;

实体化视图日志已创建。

SQL> conn testUser1/jacshan

已连接。

4.创建testUser2到testUser1的dblink

SQL> create database link conn_testUser1 connect to testUser1 identified by jacshan

  2      using '(DESCRIPTION =

  3        (ADDRESS_LIST =

  4         (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))

  5        )

  6        (CONNECT_DATA =

  7          (SERVICE_NAME = hs)

  8        )

  9       )'

 10  ;

数据库链接已创建。

5.在testUser2下创建物化视图

SQL> create materialized view mv_test refresh fast as select * from test@conn_testUser1;

实体化视图已创建。

6.向testUser1的test表中插入数据

SQL> insert into test@conn_testUser1 values(1,'content1');

已创建 1 行。

进行刷新

SQL> exec dbms_mview.refresh('mv_test');

PL/SQL 过程已成功完成。

SQL> commit;

提交完成。

TestUser1的数据已经刷过来了

SQL> select * from mv_test;

        ID CONTENT

---------- ----------

         1 content1

SQL> insert into test@conn_testUser1 values(2,'content2');

已创建 1 行。

SQL> commit;

提交完成。

未刷新前

SQL> select * from mv_test;

        ID CONTENT

---------- ----------

         1 content1

SQL> exec dbms_mview.refresh('mv_test');

PL/SQL 过程已成功完成。

刷新后

SQL> select * from mv_test;

        ID CONTENT

---------- ----------

         1 content1

         2 content2

总结:创建Oracle物化视图的步骤很简单,首先要在远程创建物化视图日志,然后在本地创建dblink,然后就可以在本地创建物化视图了。在创建物化视图的时候有很多策略,刷新模式可以是快速刷新和完全刷新。快速刷新根据日志的改变增量的刷新数据。物化视图的限制很多,这里就不多说了。