物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图允许在本地维护远程数据的副本。物化视图是单向的,虽然可以更新物化视图的数据,但是一旦刷新后,更新的数据就没有了。高级复制是双向的。
1、创建物化视图
创建自动更新的物化视图
CREATE MATERIALIZED VIEW T_TEST_MV
REFRESH FAST ON DEMAND WITH ROWID
START WITH SYSDATE NEXT SYSDATE + 30/86400
AS
SELECT * FROM t_test;
这样,T_TEST_MV会有一个job自动更新,时间间隔为30秒。
On Demand的话,如果加了START WITH子句,在dba_jobs中有个刷新Job,具体Job ID可以查看dba_refresh、dba_refresh_children视图。如果不加START WITH则需要自己刷新Begin dbms_mview.refresh(list => 'T_TEST_MV', method => 'F');END; 。
第二个参数表示刷新的方式:F-Fast,C-Complete,?-Force
上面创建物化视图的模式为ON DEMAND,还有一种是ON COMMIT,ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工刷新,也可以通过JOB定时进行刷新。ON COMMIT指物化视图在对基表的DML操作提交的同时进行刷新。
刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认值是FORCE ON DEMAND。
2、物化视图日志
快速刷新需要先创建原表的物化视图日志,先创建一个表T_TEST,然后就可以创建它的物化视图日志。
create materialized view log on T_TEST with rowid;
这样就创建了一个物化视图日志了,通过下面的查询,可以看到日志是否已创建:
Select * From all_mview_logs Where Master = 'T_TEST';
通过下面的查询,可以看到日志的内容:
SELECT * FROM mlog$_T_TEST;
上面那个物化视图是通过with rowid指定为ROWID的,也可以指定PRIMARY KEY,则物化视图日志中会包含主键列。
一个表建立一个物化视图日志,如果原表的数据作了更新,但是对应的物化视图没有刷新,那么物化视图日志里面就会有表更新的相关记录,一旦刷新了,会清除记录。物化视图日志可以对应多个物化视图的刷新,那么只有所有物化视图都刷新了,日志才会清空。
下面作了个测试看在刷新过程中,物化视图日志是怎样起作用的,是怎样刷新多个视图的。
创建表:
create table t_test
(f1 number,
f2 number);
创建日志
create materialized view log on t_test with rowid;
创建2个物化视图
create materialized view t_test_mv refresh fast on demand with rowid as
select * from t_test;
create materialized view t_test_mv2 refresh fast on demand with rowid as select * from t_test;
(如果原表增加了新的字段,物化视图是不能刷新过来的。)
插入数据
insert into t_test values (1,1);
commit;
查看这两个视图的情况
SELECT mview_name,
last_refresh_date,
staleness
FROM all_mviews
WHERE mview_name IN ('T_TEST_MV', 'T_TEST_MV2');
MVIEW_NAME LAST_REFRESH_DATE
STALENESS
T_TEST_MV 2008-12-17 17:01:00 NEEDS_COMPILE
T_TEST_MV2 2008-12-17 17:01:02 NEEDS_COMPILE
从状态字段可以看出这两个物化视图都需要刷新。
查询物化视图日志
select * from mlog$_t_test
表中有一条记录,SNAPTIME$$的字段为4000-1-1,表示t_test_mv和t_test_mv2都没有刷新。DML类型为“insert”,是新值。
SNAPTIME$$ DMLTYPE$$ OLD_NEW$$ CHANGE_VECTOR$$
4000-1-1 I N FE
SNAPTIME$$:刷新时间。
DMLTYPE$$:DML操作类型,I表示INSERT,D表示DELETE,U表示UPDATE。
OLD_NEW$$:用于表示这个值是新值还是旧值。N(EW)表示新值,O(LD)表示旧值,U表示UPDATE操作。
CHANGE_VECTOR$$:被修改的是哪个或哪几个字段。
刷新t_test_mv,
sys.dbms_snapshot.refresh('t_test_mv');
查看这两个视图的情况
MVIEW_NAME LAST_REFRESH_DATE
STALENESS
T_TEST_MV 2008-12-17 17:02:36 FRESH
T_TEST_MV2 2008-12-17 17:01:02 NEEDS_COMPILE
T_TEST_MV状态为FRESH,表示已刷新过,而T_TEST_MV2状态为NEEDS_COMPILE,表示还需要刷新。
查询物化视图日志
SNAPTIME$$ DMLTYPE$$ OLD_NEW$$ CHANGE_VECTOR$$
2008-12-17 17:02:36 I N FE
表中记录仍然存在,只是SNAPTIME$$的字段变为刚刚刷新t_test_mv的时间,然后再刷新T_TEST_MV2,日志中的记录被清除。物化视图日志在刷新过程中就是这样记录了多个视图的刷新情况。
相关推荐
Oracle数据库中的物化视图(Materialized View,简称MV)是一种强大的优化工具,它通过预先计算并存储查询结果,提供了一种快速访问复杂查询数据的方式。这种技术在数据仓库环境中尤其有用,因为数据仓库通常涉及...
"利用ORACLE物化视图建立报表数据库.pdf" 本文主要介绍了利用ORACLE物化视图建立报表数据库的方法和原理。报表数据库是指独立于生产数据库的数据库,用于存储和管理报表数据。通过建立报表数据库,可以实现工作负荷...
Oracle物化视图是一种数据库对象,它存储了查询结果,以提供快速的数据访问,特别适合于需要频繁查询但计算过程复杂或涉及大量数据连接的场景。物化视图的使用可以显著提高查询性能,因为它避免了每次查询时的计算...
### ORACLE9I 物化视图 #### 执行概览 随着数据库技术的发展,无论是数据仓库、数据集市还是在线事务处理(OLTP)系统,都承载着大量的等待被发现和理解的信息。然而,在海量数据中及时准确地查找并呈现这些信息...
在Oracle数据库中,物化视图有两种刷新策略:ON DEMAND和ON COMMIT。ON DEMAND模式意味着物化视图只在需要时(如用户手动触发或定时任务)进行刷新,以保持与基表数据的一致性。而ON COMMIT模式则更积极,一旦基表中...
在Oracle数据库中,物化视图和查询重写功能是提高查询效率和简化数据仓库管理的重要工具。物化视图是一种预计算的数据集合,它可以存储查询的结果集,而查询重写则允许数据库自动地使用这些物化视图来替换复杂的查询...
Oracle物化视图是一种在数据库中预先计算并存储视图查询结果的数据对象,它与普通的视图不同,普通视图在查询时动态地基于基表数据生成结果,而物化视图则拥有自己的物理存储,提供了对数据的快速访问。在本篇循序渐...
物化视图是Oracle数据库中一种特殊的数据对象,它保存的是基于一个或多个表(称为基表)的查询结果集,并且这些结果集是物理上存在的。与普通的视图不同,普通视图只是一种虚拟表,在执行查询时才动态地计算结果,而...
Oracle 物化视图是数据库对象,存储远程表的数据副本,也可以称为快照。物化视图可以查询表、视图和其他物化视图。通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。 创建物化视图的目的: ...
查询重写是Oracle数据库的一个特性,它允许查询在执行时自动改写为使用物化视图,如果这样做能提高性能的话。然而,要确保物化视图能正确工作并支持这些特性,需要创建相应的辅助对象,如物化视图日志。 在Oracle ...
在Oracle数据库中,物化视图(Materialized View)是一种特殊的对象,它存储了预计算查询的结果,从而可以提高查询性能。物化视图通常用于汇总查询、复杂查询等场景下,它可以显著减少实时查询所需的时间。 物化视图...
Oracle的物化视图是一种数据库对象,它存储了查询结果,从而提供了一种高效的数据访问方式。物化视图的主要目标是提升查询性能,尤其是在处理复杂查询、连接操作或聚合计算时。它们在数据仓库环境中尤其有用,因为...
"Oracle 物化视图增量刷新的应用研究" Oracle 物化视图是 Oracle 公司提供的一种新技术,可以解决很多普通逻辑视图无法完成的功能。物化视图操作简单,支持增量刷新及全量刷新,可以支持复杂的表连接、聚合函数等...
Oracle中的物化视图是一种非常重要的数据库特性,它主要用于提高查询性能和数据一致性。物化视图是预先计算好的查询结果,存储为物理表的形式,这样在后续的查询中可以直接使用,而不需要每次都执行复杂的查询操作。...
物化视图是大型Oracle数据库中提高查询性能的关键技术之一。随着网络信息量的快速增长和电子商务的蓬勃发展,数据库系统的性能要求随之提升。在处理大量数据时,传统的查询方法可能无法及时响应用户的查询请求,尤其...
在这篇文章中,我们将深入探讨Oracle数据库中的物化视图及其在数据仓库环境中的应用,并提出一种有效的存储空间分配算法来优化物化视图和索引的选择。 #### 二、物化视图的概念与作用 ##### 2.1 定义 物化视图是...
Oracle数据库的物化视图日志(Materialized View Log)是解决这一问题的有效手段。物化视图本身是数据库中的一个对象,它存储了某个查询结果集,这个结果集通常是远程数据的本地副本,或者是对多个数据表进行聚合...
在Oracle数据库中,物化视图(Materialized View)是一种特殊的数据库对象,它存储的是一个查询的结果集,可以理解为一个预计算的快照。物化视图主要用于提高报表查询性能和实现数据复制等功能。 物化视图的特性...