简单的oracle物化视图 0 X, l7 t. J3 U& e6 \, n
物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。 % ^: K* H1 ]4 u2 ` X7 h
9 p" T8 n" C( j- u6 s4 \2 n) e' Z5 c3 t( z
1、物化视图的类型:ON DEMAND、ON COMMIT
5 ?% M) t; v5 B/ ?+ A# P* V9 [, l' N二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。
, P/ c, h5 f# ^+ p! a 3 c5 w# o L {7 H
2、ON DEMAND物化视图 1 R L% H: s. Z
物化视图的创建本身是很复杂和需要优化参数设置的,特别是针对大型生产数据库系统而言。但Oracle允许以这种最简单的,类似于普通视图的方式来做,所以不可避免的会涉及到默认值问题。也就是说Oracle给物化视图的重要定义参数的默认值处理是我们需要特别注意的。
$ K+ I& h% C" S; y% M7 b
7 l( M$ \# n# x# r: g! F$ ?0 X 物化视图的特点:
; e: Z5 k8 H9 z3 B+ ~ (1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证;(2) 物化视图也是一种段(segment),所以其有自己的物理存储属性;(3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证; $ `! q9 L& C7 n4 b# J' C1 W+ y
) F7 A+ }* Y3 }# \$ T创建语句:create materialized view mv_name as select * from table_name # W, b$ h7 a p3 h" t
! V- f4 e* z% \6 s' P. o) ~ 默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。
, `1 g( S- t3 U& r# K5 w 物化视图的数据怎么随着基表而更新?
3 z& j ?9 b$ h8 e, ]& T2 |Oracle提供了两种方式,手工刷新和自动刷新,默认为手工刷新。也就是说,通过我们手工的执行某个Oracle提供的系统级存储过程或包,来保证物化视图与基表数据一致性。这是最基本的刷新办法了。自动刷新,其实也就是Oracle会建立一个job,通过这个job来调用相同的存储过程或包,加以实现。 ) I2 @, A/ ]7 T% Y$ r
$ q r8 a1 Y ^( f; LON DEMAND物化视图的特性及其和ON COMMIT物化视图的区别,即前者不刷新(手工或自动)就不更新物化视图,而后者不刷新也会更新物化视图,——只要基表发生了COMMIT。 / u+ r9 c' P V+ X
1 O) ^4 S- w5 W) u
3、ON COMMIT物化视图 : I" o: g* o0 c8 d3 k
ON COMMIT物化视图的创建,和上面创建ON DEMAND的物化视图区别不大。因为ON DEMAND是默认的,所以ON COMMIT物化视图,需要再增加个参数即可。
! k# Z9 a* I; m0 i0 M8 V 需要注意的是,无法在定义时仅指定ON COMMIT,还得附带个参数才行。 5 ` X. K3 T9 Q) N" r& V/ E
创建ON COMMIT物化视图:create materialized view mv_name refresh force on commit as select * from table_name
* y' L3 P+ y, s 7 \ }( {: N1 W/ p" D ^/ V* `
备注:实际创建过程中,基表需要有主键约束,否则会报错(ORA-12014) 0 r6 G; C0 F8 Z7 B" E0 w+ D
将MySQL数据迁移到Oracle 3 D% d; d7 c0 q" M5 }( B7 A
; D. t8 Y/ y0 N+ M9 d+ s. Q2 ^ 因为项目的原因,今晚将mysql数据库的内容尝试迁移到oracle,虽然结果失败,不过学到了不少,下次就不一定了,哈哈
( ?; x: Q' h6 R4 w/ g3 K" t1 `% q . F9 y8 A9 e- t, x5 p
因为之前项目是使用mysql数据库的,现在因为新公司要求使用oracle(公司大得很),不得不尝试将以前项目进行迁移。 6 l6 k) O1 r/ ~; ~/ u v" a
5 m' ]& f8 M4 U! a# c 经过查找相关文档,最终选定使用oracle sql developer。
/ ~- v4 r+ g; w; \0 T提示:将 Informix 和 DB2 数据库迁移到 Oracle。有关所有其他数据库迁移,请访问 Oracle SQL Developer 迁移。 |