ORACLE物化视图依赖表结构变化影响测试

1.ORACLE物化视图

1.1 基本定义

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

1.2 特点

(1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),可以从user_tables查询;
(2) 物化视图也是一种段(segment),所以其有自己的物理存储属性;
(3) 物化视图会占用数据库磁盘空间,可以从user_segment查询;
创建语句:create materialized view mv_name as select * from table_name

1.3 视图类型

on command(默认模式)

仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;

on commit

提交触发,一旦基表有了commit,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。一般用这种方法在操作基表时速度会比较慢。

1.4 刷新方法

完全刷新(COMPLETE)

会删除表中所有的记录(如果是单表刷新,可能会采用TRUNCATE的方式),然后根据物化视图中查询语句的定义重新生成物化视图。

快速刷新(FAST)

采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中去。FAST必须创建基于主表的视图日志。对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。

物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。

FORCE(默认)

这是默认的数据刷新方式。Oracle会自动判断是否满足快速刷新的条件,如果满足则进行快速刷新,否则进行完全刷新。

参考链接:Oracle物化视图的一般使用

2.依赖表结构变化影响测试

测试环境:
操作系统:ORACLE LINUX 5.8
数据库版本:11.2.0.4.0 单实例

2.1 测试准备

--创建测试表
create table TAB_AS_MV as select owner,object_name,object_type from dba_objects where rownum<100;

--创建物化视图,依赖前面创建的表TAB_AS_MV 
create MATERIALIZED VIEW MV_TEST 
refresh force on demand
as select * from TAB_AS_MV;

--手动刷新物化视图
begin
  dbms_mview.refresh('MV_TEST');
end;

执行截图如下:
测试表及物化视图准备

2.2 修改结构

--改变测试表字段长度
alter table TAB_AS_MV modify (OBJECT_TYPE VARCHAR(25));

--往测试表插入数据
insert into TAB_AS_MV (OWNER,OBJECT_NAME,OBJECT_TYPE) values('TEST','TESTTEST','INDEXINDEXINDEXINDEXINDEX');
commit;
--查询数据确认已插入成功
col owner for a20
col object_name for a10
col object_type for a50
select * from TAB_AS_MV where object_type='INDEXINDEXINDEXINDEXINDEX';

修改测试表结构
插入对应长度数据
检查数据

2.3 刷新视图

begin
  dbms_mview.refresh('MV_TEST');
end;

出现ORA-12899: value too large for column"XXX".“MV_TEST”.“OBJECT_TYPE” (actual:25, maximum: 19)
错误信息

2.4 测试结论

ORACLE物化视图依赖表的表结构发生变化后,与物化视图同名的表的表结构不会发生变化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值