oracle物化视图及创建索引
oracle物化视图及创建索引
物化视图是⼀种特殊的物理表,“物化”(Materialized)视图是相对普通视图⽽⾔的。普通视图是虚拟表,应⽤的局限性⼤,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提⾼,并没有实质上的好处。
2021除夕祝福语
1、物化视图的类型:ON DEMAND、ON COMMIT
⼆者的区别在于刷新⽅法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进⾏刷新(REFRESH),即更新物化视图,以保证和基表数据的⼀致性;⽽ON COMMIT是说,⼀旦基表有了COMMIT,即事务提交,则⽴刻刷新,⽴刻更新物化视图,使得数据和基表⼀致。
2、ON DEMAND物化视图
物化视图的创建本⾝是很复杂和需要优化参数设置的,特别是针对⼤型⽣产数据库系统⽽⾔。但Oracle允许以这种最简单的,类似于普通视图的⽅式来做,所以不可避免的会涉及到默认值问题。也就是说Oracle给物化视图的重要定义参数的默认值处理是我们需要特别注意的。
物化视图的特点:
会计发展前景>西安民办高校
(1) 物化视图在某种意义上说就是⼀个物理表(⽽且不仅仅是⼀个物理表),这通过其可以被user_tables查询出来,⽽得到佐证;
(2) 物化视图也是⼀种段(segment),所以其有⾃⼰的物理存储属性;
电容测试方法
(3) 物化视图会占⽤数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证;
创建语句:create materialized view mv_name as select * from table_name    默认情况下,如果没指定刷新⽅法和刷新模式,则Oracle默认为FORCE和DEMAND。
物化视图的数据怎么随着基表⽽更新?    Oracle提供了两种⽅式,⼿⼯刷新和⾃动刷新,默认为⼿⼯刷新。也就是说,通过我们⼿⼯的执⾏某个Oracle提供的系统级存储过程或包,来保证物化视图与基表数据⼀致性。这是最基本的刷新办法了。⾃动刷新,其实也就是Oracle会建⽴⼀个job,通过这个job来调⽤相同的存储过程或包,加以实现。
ON DEMAND物化视图的特性及其和ON COMMIT物化视图的区别,即前者不刷新(⼿⼯或⾃动)就不更新物化视图,⽽后者不刷新也会更新物化视图,——只要基表发⽣了COMMIT。
创建定时刷新的物化视图:create materialized view mv_name refresh force on demand start with sysdate next sysdate+1 (指定物化视图每天刷新⼀次)
上述创建的物化视图每天刷新,但是没有指定刷新时间,如果要指定刷新时间(⽐如每天晚上10:00定时刷新⼀次):create materialized view mv_name refresh force on demand start with sysdate next to_date( concat( to_char( sysdate+1,'dd-mm-yyyy'),'
22:00:00'),'dd-mm-yyyy hh24:mi:ss')
3、ON COMMIT物化视图
ON COMMIT物化视图的创建,和上⾯创建ON DEMAND的物化视图区别不⼤。因为ON DEMAND是默认的,所以ON COMMIT物化视图,需要再增加个参数即可。需要注意的是,⽆法在定义时仅指定ON COMMIT,还得附带个参数才⾏。
创建ON COMMIT物化视图:create materialized view mv_name refresh force on commit as select * from table_name    备注:实际创建过程中,基表需要有主键约束,否则会报错(ORA-12014)
4、物化视图的刷新
刷新(Refresh):指当基表发⽣了DML操作后,物化视图何时采⽤哪种⽅式和基表进⾏同步。刷新的模式有两种:ON DEMAND和ON COMMIT。(如上所述)
刷新的⽅法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采⽤增量刷新,只刷新⾃上次刷新以后进⾏的修改。COMPLETE刷新对整个物化视图进⾏完全的刷新。如果选择FORCE⽅式,则Oracle在刷新时会去判断是否可以进⾏快速刷新,如果可以则采⽤FAST⽅式,否则采⽤COMPLETE的⽅式。NEVER指物化视图不进⾏任何刷新。
对于已经创建好的物化视图,可以修改其刷新⽅式,⽐如把物化视图mv_name的刷新⽅式修改为每天晚上10点刷新⼀次:alter materialized view mv_name refresh force on demand start with sysdate next to_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),'
22:00:00'),'dd-mm-yyyy hh24:mi:ss')
5、物化视图具有表⼀样的特征,所以可以像对表⼀样,我们可以为它创建索引,创建⽅法和对表⼀样。
6、物化视图的删除:
虽然物化视图是和表⼀起管理的,但是在经常使⽤的PLSQL⼯具中,并不能⽤删除表的⽅式来删除(在表上右键选择‘drop’并不能删除物化视图),可以使⽤语句来实现:drop materialized view mv_name
物化视图创建参数
(1)BUILD BUILD IMMEDIATE 是在创建物化视图的时候就⽣成数据 BUILD DEFERRED 则在创建时不⽣成数据,以后根据需要再⽣成数据。默认为BUILD IMMEDIATE。
(2)REFRESH FAST 增量刷新⽤物化视图⽇志,来发送主表已经修改的数据⾏到物化视图中。 COMPLETE 完全刷新重新⽣成整个视图,如果请求完全刷新,oracle会完成完全刷新即使增量刷新可⽤。 FORCE 如果增量刷新可⽤Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新⽅法(FAST, COMPLETE, or FORCE)。默认选项是Force。
(3)ON ON DEMAND 指物化视图在⽤户需要的时候进⾏刷新。 ON COMMIT 指出物化视图在对基表的DML操作提交的同时进⾏刷新。默认是ON DEMAND.劲松鬼楼
(4)START WITH 通知数据库完成从主表到本地表第⼀次复制的时间。
(5)NEXT 说明了刷新的时间间隔根据下⼀次刷新的时间=上⼀次执⾏完成的时间+时间间隔。为了保证在⽤户需要的时间点刷新,⼀般使⽤TRUNC()命令对时间取整到天数,然后加上时间。
使⽤⼼得:
使⽤TOAD创建物化视图索引时出现ORA-01450 :XXX超长
琢磨了⼀会发现是创建索引时只能加⼀个字段,同时加多个字段到这个索引时就报这个错
>职工死亡抚恤金

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。