物化视图知识入门
Oracle的物化视图提供了强大的功能,可以用在不同的环境中。在不同的环境中,物化视图的作用也不相同.
数据仓库中的物化视图主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。在数据仓库中,还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的物化视图进行查询,完全对应用透明。
物化视图和表一样可以直接进行查询。物化视图可以基于分区表,物化视图本身也可以分区。
除了在数据仓库中使用,物化视图还用于复制、移动计算等方面。
物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。
物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。
创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明:
> 创建方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE。
> 查询重写(Query Rewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE。
> 刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。 ON COMMIT指出物化视图在对基表的DML操作提交的同时进行刷新。刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认值是FORCE ON DEMAND。
在建立物化视图的时候可以指定ORDER BY语句,使生成的数据按照一定的顺序进行保存。不过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效。
物化视图日志:如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。
可以指明ON PREBUILD TABLE语句将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数QUERY_REWRITE_INTEGERITY必须设置为trusted或者stale_tolerated。
物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。
对于聚集物化视图,可以在GROUP BY列表中使用CUBE或ROLLUP,来建立不同等级的聚集物化视图。
简单试验
--1.在master site上创建表和mview log
SQL> create table stu (id varchar2(10) primary key ,name varchar2(20));
Table created.
SQL> create materialized view log on stu;
Materialized view log created.
--2.在mv site上创建mview
SQL> create materialized view stu_mv refresh fast start with sysdate next sysdate+1/1440 with primary key as select * from stu@to_vm9;
Materialized view created.
SQL> select job,log_user,last_date,last_sec,next_date,next_sec,interval,what from user_jobs;
JOB LOG_USER LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC INTERVAL WHAT
--- --------- ----------- --------- ----------- ---------- -------------- -------------------------------------------
21 SEAGULL 2008-2-18 1 14:41:43 2008-2-18 1 14:42:43 sysdate+1/1440 dbms_refresh.refresh('"SEAGULL"."STU_MV"');
SQL>
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
STU_MV TABLE
--3.在master site上对master table做更新
SQL> INSERT INTO STU(ID,NAME) VALUES('56','555555555555');
1 row created.
SQL> commit;
--4.等1分钟后在mv site上检查
SQL> select * from stu_mv;
ID NAME
---------- --------------------
56 555555555555
利用prebuilt mv实现跨平台,跨版本数据迁移
该方法的实现原理是对于要迁移的表对象,需要有一个主键,用于mv的刷新,对于符合该要求的表,在源表上创建mv日志,再在目标数据库上创建结构一样的表,然后在目标表上采用prebuilt方式创建mv,第一次采用完全刷新,之后采用增量刷新,等真正要切换的时候,只需要刷新完增量的日志,删除mv,保留目标表即可。
基本思路的例子:
--1.在源库上创建表和mview log
SQL> create table big_t1 as select * from dba_objects;
Table created.
SQL> select count(1) from big_t1;
COUNT(1)
----------
6170
SQL> create materialized view log on big_t1;
Materialized view log created.
--2.在目标数据库上创建与该表一样的表,并在该表上创建prebuilt mv
SQL> create table big_t1 as select * from big_t1@to_vm9 where 1=2;
Table created.
SQL> select count(1) from big_t1;
COUNT(1)
----------
0
SQL> create materialized view big_t1 on prebuilt table refresh fast as select * from big_t1@to_vm9;
Materialized view created.
--3.做完全刷新和增量刷新
SQL> exec dbms_mview.refresh('BIG_T1','Complete');
PL/SQL procedure successfully completed.
SQL> select count(1) from big_t1;
COUNT(1)
----------
6170
SQL>
--/*此时模拟在做完全刷新过程中,源库的表又发生了变化
SQL> insert into big_t1(object_id,owner) values(99991,'test');
1 row created.
SQL> commit;
Commit complete. */
--再做增量刷新
SQL> select count(1) from big_t1;
COUNT(1)
----------
6170
SQL> exec dbms_mview.refresh('BIG_T1');
PL/SQL procedure successfully completed.
SQL> select count(1) from big_t1;
COUNT(1)
----------
6171
--4.停机切换,做最后一次刷新,然后删除源库的mview log和目标库的mview
SQL> exec dbms_mview.refresh('BIG_T1');
PL/SQL procedure successfully completed.
SQL> drop materialized view big_t1;
Materialized view dropped.
SQL> select count(1) from big_t1;
COUNT(1)
----------
6171
这里删除的mview(big_t1)是prebuilt mv,所以删除该mview,并不删除相应的表。
如果删除了mvnew(stu_mv),由于是普通mv,则删除了该mview,就没有对应的表了。
SQL> drop materialized view stu_mv;
Materialized view dropped.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BIG_T1 TABLE
SQL>
分享到:
相关推荐
【课程列表】 index 共14页.ppt ...第10章 物化视图 共38页.ppt 第11章 留下元数据线索 共32页.ppt 第12章 数据仓库实施注意事项 共18页.ppt xpp_C 使用SQL Developer 共30页.ppt xpp_D 使用SQL Plus 共34页.ppt
Oracle数据库系统是世界...而Oracle提供的不同类型的视图,如关系视图、内嵌视图、对象视图和物化视图,为不同的应用场景提供了丰富的选择。在实践中,根据实际情况灵活运用这些视图,将极大地提升你的数据库管理能力。
7. **优化动态视图**:分析视图查询性能问题,提供索引策略、物化视图和查询重构等优化技巧。 8. **异常处理与错误调试**:介绍处理视图操作过程中可能出现的错误,以及如何进行有效的调试。 9. **实战案例**:...
3. 明白物化视图、传递闭包、推理闭包 4. 熟悉任何一种图数据库 5. 明白图的局部索引和关系的全局索引的理论和实践性能差异 五、掌握自然语言处理和信息检索技术 1. 熟悉词法分析的基本工具,如分词、词性标注 2. ...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据着重要的地位。...在实际操作中,不断探索Oracle的高级特性,如分区、物化视图、数据库链接等,将使你更加精通Oracle数据库的使用。
1. **基础知识入门**: - 列式存储:ClickHouse采用列式存储方式,适合数据分析查询。 - 高吞吐写入:ClickHouse支持高速数据写入,适用于大规模数据的实时处理。 - 数据分区与线程级并行:通过数据分区和多线程...
1. 物化视图应用:通过创建Kafka表引擎监听数据,建立目标表和物化视图,实时摄取和更新数据,例如用于实时数据摄取和实时报表。 2. 实时更新场景:例如,当用户阅读消息后向后台反馈已读状态,ClickHouse可以实时...
最后,教程还将涉及Oracle的高级特性,如分区、物化视图、数据库链接、 flashback技术等,这些都是在大型企业环境中常见的需求和解决方案。 总结来说,《Oracle经典教程从入门到精通》不仅提供了全面的理论知识,...
此外,Oracle的高级特性如物化视图、分区表、闪回技术等,能进一步提高数据处理效率和恢复能力。物化视图可以提前计算复杂查询结果,提高查询速度;分区技术则将大表分成小块,便于管理和查询;闪回技术允许你在时间...
【课程列表】 index 共14页.ppt ...第10章 物化视图 共38页.ppt 第11章 留下元数据线索 共32页.ppt 第12章 数据仓库实施注意事项 共18页.ppt xpp_C 使用SQL Developer 共30页.ppt xpp_D 使用SQL Plus 共34页.ppt
随着对Oracle数据库的深入,可以进一步学习分区、物化视图、游标、异常处理、数据库链接、性能监控与调优等高级主题。 总结,Oracle数据库的学习是一个循序渐进的过程,从掌握基本的SQL语法和数据库概念,到熟悉...
通过"Oracle从入门到精通(第3版)"的学习,读者可以了解和掌握这些关键概念,进一步探索Oracle的高级特性,如分区、物化视图、数据库链接、性能优化等,从而成为一名熟练的Oracle数据库管理员或开发者。光盘中的...
3. **高级应用**:在这一部分,你将深入学习Oracle的高级特性,如分区、物化视图、材料化查询表、数据库链接、数据库复制、数据库备份与恢复策略以及性能优化。这些知识对于解决实际问题和提升数据库效率至关重要。 ...
性能调优是Oracle学习的重要部分,包括SQL优化、索引策略、表分区、物化视图以及数据库参数调整等。 最后,Oracle还提供了丰富的开发工具和接口,如PL/SQL编程、Oracle SQL Developer、Data Guard、RAC(Real ...
10. **高级特性**:可能涉及分区、物化视图、 materialized view logs、数据库链接、触发器、游标等Oracle特有的高级功能。 每本独立的教程都专注于一个主题,使得学习者能够集中精力理解和掌握每个概念,避免信息...
【课程列表】 index 共14页.ppt ...第10章 物化视图 共38页.ppt 第11章 留下元数据线索 共32页.ppt 第12章 数据仓库实施注意事项 共18页.ppt xpp_C 使用SQL Developer 共30页.ppt xpp_D 使用SQL Plus 共34页.ppt
Oracle 11g还包含一些高级特性,如物化视图、分区表、 materialized view logs、 flashback技术等,这些可以帮助处理大规模数据和复杂查询,提高数据仓库的效率。 通过本培训,学员将对Oracle 11g有全面的认识,...
通过这33节全面的课程,学员将不仅能够理解Oracle数据库的基础知识,还能掌握更高级的特性,如触发器、分区、物化视图等,从而具备在实际项目中应用Oracle数据库的能力。无论是为了职业发展,还是个人兴趣,这个课件...
包括实时应用集群(RAC)、分布式数据库、物化视图、分区技术、数据仓库和OLAP等,这些都是Oracle数据库在企业级应用中的核心优势。 通过这份“Oracle数据库入门(PPT)”,读者将对Oracle有一个全面而基础的认识,为...