ORACLE中的物化视图

oracle|视图

ORACLE中的物化视图

 

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

       物化视图可以查询表,视图和其它的物化视图。

       通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。

       对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

       对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

本篇我们将会看到怎样创建物化视图并且讨论它的刷新选项。

       在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。

1.主键物化视图:

              下面的语法在远程数据库表emp上创建主键物化视图

        SQL> CREATE MATERIALIZED VIEW mv_emp_pk

             REFRESH FAST START WITH SYSDATE

            NEXT  SYSDATE + 1/48

            WITH PRIMARY KEY

            AS SELECT * FROM emp@remote_db;

            Materialized view created.

              注意:当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下:

            SQL> CREATE MATERIALIZED VIEW LOG ON emp;

            Materialized view log created.

2.Rowid物化视图

              下面的语法在远程数据库表emp上创建Rowid物化视图

      SQL> CREATE MATERIALIZED VIEW mv_emp_rowid

            REFRESH WITH ROWID

             AS SELECT * FROM emp@remote_db;

            Materialized view log created.

3.子查询物化视图

              下面的语法在远程数据库表emp上创建基于emp和dept表的子查询物化视图

            SQL> CREATE MATERIALIZED VIEW  mv_empdept

            AS SELECT * FROM emp@remote_db e

            WHERE EXISTS

             (SELECT * FROM dept@remote_db d

            WHERE e.dept_no = d.dept_no)

      Materialized view log created.

       REFRESH 子句

                    [refresh [fast|complete|force]

            [on demand | commit]

            [start with date] [next date]

            [with {primary key|rowid}]]

 

       Refresh选项说明:

a.      oracle用刷新方法在物化视图中刷新数据.

b.      是基于主键还是基于rowid的物化视图

c.       物化视图的刷新时间和间隔刷新时间

 

Refresh方法-FAST子句

       增量刷新用物化视图日志(参照上面所述)来发送主表已经修改的数据行到物化视图中.如果指定REFRESH FAST子句,那么应该对主表创建物化视图日志

                    SQL> CREATE MATERIALIZED VIEW LOG ON emp;

Materialized view log created.

       对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。

 

Refresh方法- COMPLETE子句

       完全刷新重新生成整个视图,如果请求完全刷新,oracle会完成       完全刷新即使增量刷新可用。

 

Refresh Method – FORCE 子句

       当指定FORCE子句,如果增量刷新可用Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新方法(FAST, COMPLETE, or FORCE),Force选项是默认选项

 

主键和ROWD子句

       WITH PRIMARY KEY选项生成主键物化视图,也就是说物化视图是基于主表的主键,而不是ROWID(对应于ROWID子句). PRIMARY KEY是默认选项,为了生成PRIMARY KEY子句,应该在主表上定义主键,否则应该用基于ROWID的物化视图.

       主键物化视图允许识别物化视图主表而不影响物化视图增量刷新的可用性。

       Rowid物化视图只有一个单一的主表,不能包括下面任何一项:

n         Distinct 或者聚合函数.

n         Group by,子查询,连接和SET操作

 

刷新时间      

       START WITH子句通知数据库完成从主表到本地表第一次复制的时间,应该及时估计下一次运行的时间点, NEXT 子句说明了刷新的间隔时间.

            SQL> CREATE MATERIALIZED VIEW mv_emp_pk

                     REFRESH FAST

                  START WITH SYSDATE

                  NEXT  SYSDATE + 2

                  WITH PRIMARY KEY

                  AS SELECT * FROM emp@remote_db;

                  Materialized view created.

在上面的例子中,物化视图数据的第一个副本在创建时生成,以后每两天刷新一次.

 

总结

物化视图提供了可伸缩的基于主键或ROWID的视图,指定了刷新方法和自动刷新的时间。

 

时间: 2025-01-19 17:10:23

ORACLE中的物化视图的相关文章

ORACLE中的物化视图(OCM复习总结)

1.  基本概念 视图是一个虚拟表,基于它创建时指定的查询语句返回结果集.每次访问它都会导致这个查询语句被执行一次.为了避免每次访问都执行这个查询,可以将这个查询的结果集存储到一个物化视图.也就是说,物化视图只是对已经存储于别处的数据的转换和复制.         执行创建物化视图的语句实际上会创建一个物化视图和一个容器表,容器表是一个普通的表,它与物化视图拥有同样的名称,并且这个表可以像任何其他表一样被查询.执行计划中的MAT_VIEW_ACCESS_FULL表明使用了物化视图,直接使用容器表

Oracle 11g r2物化视图日志新增的COMMIT SCN语句概述

在11.2中,物化视图日志也新增了一些功能,对于本地物化视图而言,现在可以利用COMMIT SCN来替代以前版本中的TIMESTAMP方式来进行刷新. 看一个简单的例子: SQL> SELECT * FROM V$VERSION; BANNER -------------------------------------------------------------------------------- Oracle Database11gEnterprise Edition Release11

详解oracle数据库的物化视图

物化视图存储基于远程表的数据,也可称为快照,是远程数据的本地副本,或者用来生成基于数据表求和的汇总表 通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中) 对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的 如果你想修改本地副本,必须用高级复制的功能.当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取 物化视图把他的物理结构存储在自己的段中,该段可以被索引和分区 查询不必完全匹配用来创建物化视图的 SQL 语句,优化程序可以动态重写一个与原定义相近的查询

oracle中如何使用视图,索引,存储过程。 就是说怎么去用或者用在什么地方,请指教

问题描述 oracle中如何使用视图,索引,存储过程. 就是说怎么去用或者用在什么地方,请指教 oracle中如何使用视图,索引,存储过程. 就是说怎么去用或者用在什么地方,请指教 解决方案 具体你去看书,这里只是简单说说:视图,相当于虚拟的表,你可以把不同的表连接起来得到一个视图,直接像表那样返回数据,而不用写复杂的查询了.索引,顾名思义,对表中的数据预处理,加快查询的速度.存储过程,一组预先写好的sql代码的集合,可以直接调用.存储过程因为是事先写好,并且编译的,所以更快,而且它像函数那样,

什么是Oracle物化视图

Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于 远程表的数据,也可以称为快照. 物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的 得到结果.物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能:物化视图对应用透明,增加和删除物化视图不会影响应用程序 中SQL语句的正确性和有效性:物化视图需要占用存储空间:当基表发生变化

plsql-求教:ORACLE物化视图无法删除

问题描述 求教:ORACLE物化视图无法删除 有一个物化视图,从3月份开始就不刷新了,想重新删除后再建,但是却怎么也删不掉 用DROP 语句一直在执行中,直接在PLSQL中删掉则PLSQL会奔溃... 以下是建视图语句: create materialized view P_EMP_INFO_VIEW refresh fast on demand with rowid start with sysdate next sysdate+1/288 as select USER_ID,USERNAME

oracle物化视图

转自: http://www.cnblogs.com/BradMiller/archive/2011/04/24/2026321.html oracle物化视图 一.oracle物化视图基本概念 物化视图首先需要创建物化视图日志, oracle依据用户创建的物化视图日志来创建物化视图日志表, 物化视图日志表的名称为mlog$_后面跟基表的名称, 如果表名的长度超过20位,则只取前20位,当截短后出现名称重复时,oracle会自动在物化视图日志名称后面加上数字作为序号. 创建物化视图日志在建立时有

mysql触发器实现oracle物化视图示例代码_Mysql

oracle数据库支持物化视图--不是基于基表的虚表,而是根据表实际存在的实表,即物化视图的数据存储在非易失的存储设备上. 下面实验创建ON COMMIT 的FAST刷新模式,在mysql中用触发器实现insert , update , delete 刷新操作 1.基础表创建,Orders 表为基表,Order_mv为物化视图表 复制代码 代码如下: mysql> create table Orders( -> order_id int not null auto_increment, -&g

物化视图刷新失败导致日志表异常增大

整理自:http://blog.itpub.net/231499/viewspace-63714/ 今天在检查时,发现某个物化视图日志占用的空间超过150M,再检查看,该物化视图日志表的记录数有150W,由于其对应的物化视图没有会刷新一次,结合业务量分析可知:物化视图日志不能正常清除. 下面的解决步骤 --在源库查询物化视图对应日志条目个数SQL> select count(1) from MLOG$_ITEM_TAG; COUNT(1)----------532515 --在物化视图端刷新物化