`

Oracle MATERIALIZED VIEW -- 创建物化视图

 
阅读更多

一、ORACLE:materialized view和普通VIEW有什么区别

materialized view(MV)是自动刷新或者手动刷新的,View不用刷新 MV也可以直接update,但是不影响base table,对View的update反映到base table上 MV主要用于远程数据访问,mv中的数据需要占用磁盘空间,view中不保存数据

 

、物化视图概述物化视图概述

  Oracle的物化视图提供了强大的功能,可以用在不同的环境中。在不同的环境中,物化视图的作用也不相同。数据仓库中的物化视图主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。在数据仓库中,还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的物化视图进行查询,完全对应用透明。物化视图和表一样可以直接进行查询。物化视图可以基于分区表,物化视图本身也可以分区。除了在数据仓库中使用,物化视图还用于复制、移动计算等方面。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

 

三、创建物化试图主要选项说明

名称

ON PREBUILD TABLE

描述

将已经存在的表注册为物化视图。同时还必须提供描述创建该表的查询的 SELECT 子句。可能无法始终保证查询的精度与表的精度匹配。为了克服此问题,应该在规范中包含 WITH REDUCED PRECISION 子句。

 

名称

Build Clause

创建方式

描述

包括BUILD IMMEDIATEBUILD DEFERRED两种

取值

BUILD IMMEDIATE

在创建物化视图的时候就生成数据

BUILD DEFERRED

在创建时不生成数据,以后根据需要在生成数据

默认

BUILD IMMEDIATE

 

名称

Refresh

刷新子句

描述

当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步

语法

[refresh [fast | complete | force]

         [on demand | commit]

         [start with date]

         [next date]

         [with {primary key | rowid}]

]

取值

FAST

采用增量刷新,只刷新自上次刷新以后进行的修改

COMPLETE

对整个物化视图进行完全的刷新

FORCE(默认)

Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用Fast方式,否则采用Complete的方式,Force选项是默认选项

 

ON DEMAND(默认)

物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新

ON COMMIT

物化视图在对基表的DML操作提交的同时进行刷新

 

START WITH

第一次刷新时间

 

NEXT

刷新时间间隔

 

WITH PRIMARY KEY(默认)

生成主键物化视图,也就是说物化视图是基于表的主键,而不是ROWID(对应于ROWID子句)。 为了生成PRIMARY KEY子句,应该在表上定义主键,否则应该用基于ROWID的物化视图。主键物化视图允许识别物化视图表而不影响物化视图增量刷新的可用性

WITH ROWID

只有一个单一的主表,不能包括下面任何一项:
●Distinct
聚合函数
●Group by
子查询
连接
●SET
操作

   

 

名称

Query Rewrite

查询重写

描述

包括ENABLE QUERY REWRITEDISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据

取值

ENABLE QUERY REWRITE

支持查询重写

DISABLE QUERY REWRITE

不支持查询重写

默认

DISABLE QUERY REWRITE

 

四、创建实体化试图日志主要选项说明

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

 

名称

WITH Clause

描述

 

取值

OBJECT ID

如果是对象物化视图(object materialized view),则只能采用该方式

PRIMARY KEY

 

ROWID

 

SEQUENCE

 

默认

 

 

 

四、例子

创建物化视图时应先创建存储的日志空间

 

create materialized view log on table1    
   
tablespace ts_data --日志保存在特定的表空间     

with rowid;   

 

CREATE MATERIALIZED VIEW LOG ON table 
WITH ROWID, SEQUENCE(id, name,STATUS)
INCLUDING NEW VALUES;

 

 

然后创建物化视图

 

create materialized view mv_table1         

on prebuild table --将物化视图建立在一个已经存在的表上         

tablespace ts_data --保存表空间         

build deferred --延迟刷新不立即刷新         

refresh force --如果可以快速刷新则进行快速刷新,否则完全刷新         

on demand --按照指定方式刷新         

as select * from table1;  

 

CREATE MATERIALIZED VIEW mv_table 
BUILD IMMEDIATE 
REFRESH FAST 
ON COMMIT 
AS SELECT pre_id,SUM(AMOUNT) as A_AMOUNT 
FROM table WHERE STATUS =1 GROUP BY pre_id;

 

 

删除物化视图日志

drop materialized view log on table1;   

 删除物化视图

drop materialized view mv_table1;

 

 ------------------------------------------------------------------------------------------------------------------------------------

说明2

http://blog.sina.com.cn/s/blog_5b2470430100ek3o.html
物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。 对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。物化视图可以查询表,视图和其它的物化视图。

一、            关于物化视图日志:

查询物化视图日志文件格式:desc mlog$_lzwmvtest;

创建物化视图时默认指定物化视图中存在主键,如果不指定,那么创建的物化视图日志文件的基表必须存在主键,否则会报错

Demo:对一个表test

创建日志:create materialized view log on test;

那么会报:'LZWMVTEST'不包含主键约束条件

这种情况下,就必须指定日志文件结构

比如:create materialized view log on test with rowid(具体的针对日志内容方面的在另外一个专题里说明,这里就简述到此)

二、            关于生成数据和刷新:

1>生成数据

两大选项:build immediate   build deferred

Build immediate:在创建物化视图的同时根据主表生成数据

Bulid deferred:在创建物化视图的同时,在物化视图内不生成数据,如果此时没有生成数据,以后可以采取:EXEC DBMS_MVIEW.Refresh(‘MV_name’,’C’),注意必须使用全量刷新,默认是增量刷新,所以这里参数必须是C,因为之前都没有生成数据,所以必须全量。

2>关于刷新

²        刷新方式:complete fast force

Complete :完全刷新整个物化视图,相当于重新生成物化视图,此时即时增量刷新可用也全量刷新

Ø         Fast:当有数据更新时依照相应的规则对物化视图进行更新(此时必须创建物化视图日志(物化视图日志记录了数据更新的日志),关于日志的说明,参照“物化视图日志文件介绍”)

Ø         Force:当增量刷新可用则增量刷新,当增量刷新不可用,则全量刷新(此项为默认选项)

不过从实际情况出发,应该尽量不使用默认选项,可以考虑使用增量刷新,对大表特别有效,大表全量更新速度是非常慢的,特别是在存在索引的情况下(在创建物化视图语句中,可能某些限制查询的条件,导致了增量刷新无法使用,这个是需要注意的,具体是哪类语句导致fast刷新不可用,有待总结…..

²        刷新时间:on demand on commit start with/ next

On demand:在需要刷新时进行刷新(人工判断)

On commit:在基表上有提交操作时,进行更新

Start with:指定首次刷新的时间(一般指定的是当前时间,不过也可以在创建物化视图时不生成数据,则可以考虑在指定的时间刷新,从而生成数据)

Next:刷新的周期时间

三、            基于主键的物化视图和ROWID的物化视图的说明

创建物化视图日志时,指定了记录更新的原则即with 后面的primary 或者rowid 或者object id等等,后面,默认是以primary key为记录更新,在物化视图内也是以此为更新的原则。

例如:1、如果日志内使用的是primary key 则在创建物化视图时指定rowid来更新,则会报ORA-12032:不能使用 "TEST" 上实体化视图日志中的 rowid 

2、如过日志内使用的是rowid 则在创建物化视图时指定primary或者默认指定,则会报ORA-23415: "GIS"."LZWMV" 的实体化视图日志不记录主键

四、            关于物化视图存放的的表空间

直接在创建物化视图时指定日志存放的表空间和物化视图的表空间。

例子:create materialized view MV_TEST tablespace test ----表空间名称

五、            关于查询重写和更新

在创建查询重写时,基表中必须有主键约束,视图里是无法创建主键的,不过其继承了基表的主键约束。(关于视图的创建的一些技巧有待总结……)下面给个例子

Create materialized view MV_TEST

Refresh fast ----前提是必须创建基表日志,可以忽略该项

Enable query rewrite ----前提是基表上必须存在主键约束

As

Select * from TEST; ----物化视图数据生成

六、            关于创建物化视图的例子:

1、 使用增量刷新的物化视图的写法

创建物化视图日志,必须创建日志

Create materialized view log on TEST ----TEST为表名

----注:(TEST为表名或者视图名,关于视图上建立物化视图,见基于视图的物化视图

----创建物化视图语句:

Create materialized view MV_TEST

----MVTEST为物化视图名

Build immediate

----创建时生成数据对应的是build deferred

Refresh fast

----增量刷新

On commit

----在基表有更新时提交,这里该句对视图无效

With rowid

----这里创建基于rowid的物化视图,对应的是 primary key

As

Select * from TEST;

----生成物化视图数据语句

七、            小的知识点

创建主键约束语句:alter table table_name add(constraint constraint_name primary key(columes));

建议使用job来定期刷新物化视图 

 

 

 

 

 

 

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Oracle物化视图创建和使用

    创建物化视图可以使用 CREATE MATERIALIZED VIEW 语句,例如: ```sql CREATE MATERIALIZED VIEW MV_VIEW AS SELECT * FROM ... ``` 删除物化视图可以使用 DROP MATERIALIZED VIEW 语句,例如: ```sql DROP ...

    创建物化视图ORA-12014错误解决方法

    在Oracle数据库中,物化视图(Materialized View)是一种用于优化查询性能的重要工具。它预先计算并存储了复杂的查询结果,从而在实际查询时能够快速地返回数据,大大提升了查询效率。然而,在创建物化视图的过程中...

    Oracle物化视图应用详解

    此外,还可以通过`CREATE MATERIALIZED VIEW LOG`创建物化视图日志,并使用`DROP MATERIALIZED VIEW LOG`删除日志。`DROP MATERIALIZED VIEW`命令用于删除物化视图,而`DBMS_MVIEW.REFRESH`过程则用于手动刷新物化...

    ORACLE9I物化视图

    - **创建物化视图**:使用 `CREATE MATERIALIZED VIEW` 命令来创建物化视图。 - **自定义预构建的物化视图**:用户可以根据自己的需求预先构建物化视图,并对其进行优化。 - **物化视图的索引选择**:选择适当的索引...

    Oracle数据库中物化视图的原理剖析

    Oracle数据库中的物化视图(Materialized View,简称MV)是一种强大的优化工具,它通过预先计算并存储查询结果,提供了一种快速访问复杂查询数据的方式。这种技术在数据仓库环境中尤其有用,因为数据仓库通常涉及...

    oracle 物化视图详解(内含例子)

    ### Oracle 物化视图详解 #### 一、物化视图的概念与作用 物化视图是Oracle数据库中一种特殊的数据对象,它保存的是基于一个或多个表(称为基表)的查询结果集,并且这些结果集是物理上存在的。与普通的视图不同,...

    物化视图,数据仓库,Oracle

    - **创建物化视图**:使用CREATE MATERIALIZED VIEW语句创建物化视图。 - **刷新物化视图**:定期或按需刷新物化视图以保持数据的最新状态。 - **查询物化视图**:通过简单的SELECT语句直接查询物化视图。 - **维护...

    oracle materialized view

    Oracle物化视图是一种在数据库中预先计算并存储查询结果的数据库对象,它提供了一种高效的数据汇总和数据复制机制。物化视图是远程数据的本地副本,用于提高查询性能,尤其是在数据仓库环境中,通过预计算汇总数据,...

    Oracle物化视图使用[文].pdf

    创建一个ON DEMAND物化视图非常类似于创建普通视图,只需在CREATE语句中添加`MATERIALIZED`关键字。例如: ```sql CREATE MATERIALIZED VIEW mv_testcf AS SELECT * FROM xiaotg.testcf; ``` 这个例子中,物化视图...

    ORACLE 物化视图 详解

    在Oracle数据库中,物化视图(Materialized View)是一种特殊的数据库对象,它存储的是一个查询的结果集,可以理解为一个预计算的快照。物化视图主要用于提高报表查询性能和实现数据复制等功能。 物化视图的特性...

    Oracle怎么根据物化视图日志快速刷新物化视图

    在Oracle数据库中,物化视图(Materialized View)是一种特殊的对象,它存储了预计算查询的结果,从而可以提高查询性能。物化视图通常用于汇总查询、复杂查询等场景下,它可以显著减少实时查询所需的时间。 物化视图...

    ORACLE中的物化视图

    ### ORACLE中的物化视图详解 物化视图,作为ORACLE数据库中的一种特殊对象,其实质上是预先计算并存储的查询结果集。它不仅能够提高查询效率,还能在分布式环境中提供本地数据副本,简化远程数据访问,以及在数据...

    Oracle中管理物化视图变得更加容易

    在Oracle数据库中,物化视图(Materialized View, MV)是一种重要的性能优化工具,尤其在数据仓库和决策支持系统中。物化视图预先计算并存储了一个查询的结果,允许快速访问而不是每次需要时重新执行复杂的查询。在...

    基于Oracle物化视图日志的数据同步技术研究.pdf

    Oracle数据库的物化视图日志(Materialized View Log)是解决这一问题的有效手段。物化视图本身是数据库中的一个对象,它存储了某个查询结果集,这个结果集通常是远程数据的本地副本,或者是对多个数据表进行聚合...

    oracle物化视图资料

    ### Oracle物化视图详解 #### 一、物化视图概述 Oracle物化视图是一种特殊类型的数据库对象,其核心功能在于预先计算并存储基于一个或多个表的查询结果,以此来加速后续的查询操作。与普通视图不同,普通视图在...

    一个物化视图的简单例子

    4. **创建物化视图**:接下来,使用`CREATE MATERIALIZED VIEW`语句来创建物化视图。在本例中,创建了一个名为`stu_view`的物化视图,其数据源为`stu`表,并设置了自动刷新策略,即每天刷新一次。 5. **插入数据**...

    物化视图普通视图区别,很不错的资料

    对于已经存在的物化视图,可以使用ALTER语句来修改其刷新方式,例如`ALTER MATERIALIZED VIEW mv_name REFRESH [FORCE|FAST|COMPLETE|NEVER] [ON DEMAND|ON COMMIT]`。 物化视图对于大数据分析、报表生成和OLAP...

Global site tag (gtag.js) - Google Analytics