oracle-MATERIALIZED VIEW-简例

物化视图作为数据同步的一种方式

--A 基表
ALTER TABLE t1 ADD CONSTRAINT PK_t PRIMARY KEY(id); 
CREATE MATERIALIZED VIEW LOG ON t1; 

--B 物化视图
select * from user_sys_privs where privilege like upper('%DATABASE LINK%');
grant create database link to tom;
GRANT CREATE MATERIALIZED VIEW TO tom;  

create database link dblk_2 connect to user01 identified by "user01" using 'huvisc';

select * from user_db_links;
select * from t1@dblk_2;

--fast 增量方式
--netx 同步频率
--以主键方式同步
CREATE MATERIALIZED VIEW mv_t1 
REFRESH fast START WITH SYSDATE 
NEXT SYSDATE + 1/1440 
WITH PRIMARY KEY 
AS SELECT id,name from t1@dblk_2; 

--A 基表
insert into t1 values(5,'fff');
commit;

--B 物化视图
select * from mv_t1;

REFRESH 子句可以包含如下部分:
           [refresh [fast|complete|force]
           [on demand | commit]
           [start with date] [next date]
           [with {primary key|rowid}]]


三种刷新方式:COMPLETE、FAST和 FORCE。
1)完全刷新(COMPLETE)
会删除表中所有的记录(如果是单表刷新,可能会采用TRUNCATE的方式),
然后根据物化视图中查询语句的定义重新生成物化视图。
2)快速刷新(FAST)
采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中去。
FAST必须创建基于主表的视图日志。
  对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。
3)采用FORCE方式,Oracle会自动判断是否满足快速刷新的条件,
如果满足则进行快速刷新,否则进行完全刷新。


指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:
ON DEMAND和ON COMMIT物化视图的区别在于其刷新方法的不同,

ON DEMAND指物化视图在用户需要的时候进行刷新,
可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新,
即更新物化视图,以保证和基表数据的一致性;

ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,
立刻更新物化视图,使得数据和基表一致。
对基表,平常的COMMIT在0.01秒内可以完成,
但在有了ON COMMIT视图后,居然要6秒。速度减低了很多倍。
ON COMMIT视图对基表的影响可见一斑。

START WITH子句通知数据库完成从主表到本地表第一次复制的时间,应该及时估计下一次运行的时间点, 
NEXT 子句说明了刷新的间隔时间.
startwith to_date('24-11-200518:00:10','dd-mm-yyyyhh24:mi:ss') --第一次刷新时间

WITH PRIMARY KEY选项生成主键物化视图,也就是说物化视图是基于主表的主键
PRIMARY KEY是默认选项,为了生成PRIMARY KEY子句,
应该在主表上定义主键,否则应该用基于ROWID的物化视图.
 
with ROWID物化视图只有一个单一的主表,不能包括下面任何一项:
(1)Distinct 或者聚合函数.
(2)Group by,子查询,连接和SET操作           

删除物化视图日
志物化视图日志经常会由于物化视图长时间没有刷新,或者基表的一次批量数据更改而变得很大,这会影响物化视图的刷新性能,因此对于这种情况需要对物化视图日志进行处理,降低物化视图日志表的高水位线。
物化视图日志会记录下基表所有的增、删、改操作,而物化视图执行完快速刷新操作后,会从物化视图日志中将本物化视图刷新过且其他物化视图所不需要刷新的记录删除掉。如果其中一个物化视图一直不刷新,那么物化视图日志就会变得越来越大。
还有一种情况,比如表中插入了大量的数据,或者删除了大量的数据,或者将表中的某一列统一更新为一个值,这种操作都会在物化视图日志中产生大量的记录。
而物化视图日志的增大必然影响物化视图的刷新速度。一方面,物化视图在刷新的时候要扫描物化视图日志,另一方面,物化视图在刷新介绍后,也要清除物化视图日志中的记录,仍然要扫描物化视图日志,因此物化视图日志的大小直接会影响物化视图快速刷新的速度。更重要的是,物化视图日志的高水位一旦增长到一个很高的位置,即使以后物化视图日志中记录很少,甚至没有记录存在,物化视图在刷新的时候仍然需要较长的时间。
SQL> DROP materialized view log on t1; 

删除物化视图
SQL> drop materialized view MV_t1; 
基本和对表的操作一致,物化视图由于是物理真实存在的,故可以创建索引,创建方式和对普通表创建方式相同。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22193071/viewspace-1255635/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22193071/viewspace-1255635/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值