ORACLE物化视图

简介: ORACLE物化视图

1,物化视图的类型:

ON DEMAND、ON COMMIT 二者的区别在于刷新方法的不同

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

ON COMMIT:一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。

2,ON DEMAND物化视图

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 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。

相关文章
|
8月前
|
SQL Oracle 关系型数据库
物化视图(Oracle与PostgreSQL对比)
物化视图(Oracle与PostgreSQL对比)
|
存储 SQL Oracle
10 PostgreSQL 表级复制-物化视图篇, 支持异地,异构如 Oracle 到 pg 的物化视图|学习笔记
快速学习10 PostgreSQL 表级复制-物化视图篇,支持异地,异构如 Oracle 到 pg 的物化视图
423 0
10 PostgreSQL 表级复制-物化视图篇, 支持异地,异构如 Oracle 到 pg 的物化视图|学习笔记
|
存储 Oracle 关系型数据库
Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步
Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步
|
存储 SQL 运维
Oracle运维笔记之创建物化视图报错ORA-08102
Oracle运维笔记之创建物化视图报错ORA-08102
|
SQL Oracle 关系型数据库
PostgreSQL 物化视图(Oracle同步到PG,PG同步到PG) - by pgsnapshot (plperlu trigger) (支持类似Oracle的mvlog fast complete force刷新)
标签 PostgreSQL , 物化视图 , 增量刷新 , mvlog , Oracle 同步到 PG , PG 同步到 PG 背景 PostgreSQL自身的物化视图没有MVLOG,也就是说,刷新的时候是VIEW定义产生的记录与MV已刷新的记录进行比对,进行增量更新的过程。
3091 0
|
SQL Oracle 关系型数据库
|
Oracle 关系型数据库 数据库
Oracle 物化视图和物化视图日志
物化视图是将查询预先定义在结构中,并手动或者定期刷新将结果存储在物化视图段中,也就是说跟普通视图不同,它是需要存储空间的,从而不需要重新或者反复的执行sql语句,支持增量刷新,快速获取结果,提高数据获取的效率。
3335 0

推荐镜像

更多