物化视图是包括一个查询结果的数据库对像,它是远程数据的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。
下面通过一个简单的例子来演示物化视图的复制功能
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,然后就可以在本地创建物化视图了。在创建物化视图的时候有很多策略,刷新模式可以是快速刷新和完全刷新。快速刷新根据日志的改变增量的刷新数据。物化视图的限制很多,这里就不多说了。