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的视图,指定了刷新方法和自动刷新的时间。
二、------------------------------------------------------------------------------------------
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和NEVE*。**ST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。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,来建立不同等级的聚集物化视图。
物化视图的基本操作和使用可以查看网址:http://blog.itpub.net/post/468/13318 相关的东东。我主要说明一下使用物化视图的基本东东。如如何建立在特定的表空间上,这些在其他的物化视图上面几乎都没有任何介绍的。主要以我做的一个例子来操作,
如果对物化视图的基本概念清楚了就比较明白在那里写特定的表空间存储了。
创建物化视图时应先创建存储的日志空间
CREATE MATERIALIZED VIEW LOG ON mv_lvy_levytaxbgtdiv
tablespace ZGMV_DATA --日志保存在特定的表空间
WITH ROWID ;
CREATE MATERIALIZED VIEW LOG ON tb_lvy_levydetaildata
tablespace ZGMV_DATA --日志保存在特定的表空间
WITH ROWID,sequence(LEVYDETAILDATAID);
CREATE MATERIALIZED VIEW LOG ON tb_lvy_levydata
tablespace ZGMV_DATA --日志保存在特定的表空间
WITH rowid,sequence(LEVYDATAID);
然后创建物化视图
--创建物化视图
create materialized view MV_LVY_LEVYDETAILDATA
TABLESPACE ZGMV_DATA --保存表空间
BUILD DEFERRED --延迟刷新不立即刷新
refresh force --如果可以快速刷新则进行快速刷新,否则完全刷新
on demand --按照指定方式刷新
start with to_date('24-11-2005 18:00:10', 'dd-mm-yyyy hh24:mi:ss') --第一次刷新时间
next TRUNC(SYSDATE+1)+18/24 --刷新时间间隔
as
SELECT levydetaildataid, detaildatano, taxtermbegin, taxtermend,
......
ROUND(taxdeduct * taxpercent1, 2) - ROUND(taxdeduct * taxpercent2, 2) -
ROUND(taxdeduct * taxpercent3, 2) - ROUND(taxdeduct * taxpercent4, 2) -
ROUND(taxdeduct * taxpercent5, 2) taxdeduct, ROUND(taxfinal * taxpercent1, 2) -
ROUND(taxfinal * taxpercent2, 2) - ROUND(taxfinal * taxpercent3, 2) -
ROUND(taxfinal * taxpercent4, 2) - ROUND(taxfinal * taxpercent5, 2) taxfinal,
a.levydataid, a.budgetitemcode, taxtypecode,
......
FROM tb_lvy_levydetaildata a, tb_lvy_levydata c, MV_LVY_LEVYTAXBGTDIV b
WHERE a.levydataid = c.levydataid
AND a.budgetdistrscalecode = b.budgetdistrscalecode
AND a.budgetitemcode = b.budgetitemcode
AND c.incomeresidecode = b.rcvfisccode
AND C.TAXSTATUSCODE='08'
AND C.NEGATIVEFLAG!='9'
删除物化视图日志
--删除物化视图:
--删除日志: DROP materialized view log on mv_lvy_levytaxbgtdiv;
DROP materialized view log on tb_lvy_levydetaildata;
DROP materialized view log on tb_lvy_levydata;
--删除物化视图 drop materialized view MV_LVY_LEVYDETAILDATA;
--基本和对表的操作一致 --物化视图由于是物理真实存在的,故可以创建索引。
创建方式和对普通表创建方式相同,就不在重复写了。
三、------------------------------------------------------------------------------------------
物化视图对于前台数据库使用者来说如同一个实际的表,具有和一般表相通的如select等操作,而其实际上是一个视图,一个由系统实现定期刷新其数据的视图(具体刷新时间在定义物化视图的时候已有定义),使用物化视图更可以实现视图的所有功能,而物化视图确不是在使用时才读取,大大提高了读取速度,特别适用抽取大数据量表某些信息以及数据链连接表使用.具体语法如下:
物化视图对于前台数据库使用者来说如同一个实际的表,具有和表相通的一般select操作,而其实际上是一个视图,一个定期刷新数据的视图(具体刷新时间在定义物化视图的时候已有定义),使用物化视图可以实现视图的所有功能,而物化视图确不是在使用时才读取,大大提高了读取速度,特别适用抽取大数据量表某些信息以及数据链连接表使用.具体语法如下:
CREATE MATERIALIZED VIEW an_user_base_file_no_charge
REFRESH COMPLETE START WITH SYSDATE
NEXT TRUNC(SYSDATE+29)+5.5/24
as
select distinct user_no
from cw_arrearage t
where (t.mon = dbms_tianjin.getLastMonth or
t.mon = add_months(dbms_tianjin.getLastMonth, -1))
drop materialized view an_user_base_file_no_charge;
--------------------------------------------------------------------------------------------
建立物化视图所需权限(一):http://blog.itpub.net/post/468/50672
建立物化视图所需权限(二):http://blog.itpub.net/post/468/50707
建立物化视图所需权限(三):http://blog.itpub.net/post/468/50838
建立物化视图所需权限(四):http://blog.itpub.net/post/468/51163
相关推荐
3. **创建物化视图**:在主站点(如TESTMAIN)上,创建物化视图所需的用户、权限和快照日志。复制管理员(repadmin)需要有必要的权限,例如创建快照日志、锁定表、选择表等。同时,配置物化视图的刷新策略,可以是...
4. 安全性:视图可以限制用户对基础表的访问权限,只允许他们查看和操作所需的数据。 5. 动态视图:动态视图(MATERIALIZED VIEW)会定期或按需刷新,提供即时的数据视图,适用于报表和分析场景。 二、Oracle索引 1...
同时,物化视图的运用能进一步优化数据复制的效率和资源利用,确保各站点仅处理自己所需的数据。 总之,Oracle 分布式系统数据复制技术是解决企业级数据共享和性能问题的关键工具,通过精心设计和实施,可以构建...
- Oracle的物化视图(Materialized View)提供了预计算和存储结果的功能,对于需要快速查询汇总数据的场景非常有用。 7. **索引视图**: - Oracle 10g引入了索引组织表(IOT)和索引-唯一-视图(IUV),这些特性...
【创建Turing模式】指的是在Oracle数据库环境中,为一个名为"Turing"的用户创建特定的数据库模式,这个模式包括了用户所需的各种表空间和权限设置。以下是对创建Turing模式的详细步骤的解释: 1. **以DBA身份登录**...
2. 权限最小化:只授予执行特定任务所需的最小权限,降低数据泄露风险。 六、索引覆盖 设计脚本时考虑索引覆盖,即查询所需的所有字段都在索引中,这样可以避免回表操作,提高查询速度。 七、物化视图 对于静态或...
Oracle DBA课程旨在深入理解和掌握Oracle数据库管理员的关键技能和知识,包括数据库的安装、网络配置、...这门课程全面覆盖了Oracle DBA所需的核心技能,通过理论与实践相结合,帮助学员成为专业的Oracle数据库管理员。
Oracle是世界上最广泛使用的数据库管理系统之一,尤其在企业...通过深入研究Oracle 11g的官方学习文档,无论是初学者还是经验丰富的DBA,都能找到所需的信息和指导。这些文档详尽且权威,是掌握Oracle技术的宝贵资源。
Oracle 11g是Oracle公司的一个重要数据库版本,提供了许多高级特性,如自动存储管理(ASM)、实时应用集群(RAC)、数据分区、物化视图、以及高级安全性能等。这些特性使得Oracle 11g成为处理大规模空间数据的理想...
SGA(System Global Area)包含了数据库运行所需的各种共享内存结构,而PGA(Program Global Area)则是每个服务器进程的私有内存区域。了解这些内存组件如何工作,能帮助优化数据库性能。 在Oracle数据库的管理中...
Oracle 8.1.7 客户端是一个早期版本的Oracle数据库访问软件,它提供了连接到Oracle服务器所需的各种组件和工具。在这个版本中,用户可以进行数据查询、管理数据库对象以及执行其他数据库相关的任务。Oracle客户端是...
6. **性能监控与优化**:讲解如何使用Oracle Enterprise Manager、SQL*Plus和AWR报告进行性能监控,以及如何通过索引、物化视图、分区、绑定变量等方式优化SQL性能。 7. **备份与恢复**:阐述RMAN(Recovery ...
12. **物化视图和快速刷新**:对于需要快速查询汇总数据的场景,物化视图可以显著提高查询速度,而快速刷新则确保物化视图与源数据保持同步。 13. **集成企业管理器(Enterprise Manager)**:Oracle 11g的EM提供了...
9. **高级特性**:Oracle还提供了如物化视图、物质化子查询、触发器、存储过程等高级特性,这些将在教程中有所涉及,帮助学习者进一步提升数据库设计和开发能力。 通过"Oracle数据库实用教程 唐远新 17825-00"这份...
总而言之,"oracle_train.zip"包含的文档提供了全面的Oracle数据库学习资源,从基础概念到高级技术,涵盖了数据库管理员和开发人员所需的关键技能。无论是初学者还是经验丰富的专业人士,都能从中获益,提升自己的...
6. **子查询**:在主查询中嵌套查询,以获取所需的结果。 7. **游标**:在处理大量数据时,游标提供了一种逐行处理数据的方式。 8. **索引**:创建索引以提高查询性能,有B树索引、位图索引等多种类型。 9. **视图**...
此外,SQL的查询功能,如SELECT语句,能帮助你从数据库中提取所需信息。 性能优化是Oracle 9I的一大亮点。通过使用索引、分区、物化视图和存储优化选项,可以显著提升数据库的读写速度。此外,数据库的性能监控和...
总的来说,《Oracle 数据库管理员指南》是一本全面覆盖Oracle DBA所需知识的手册,无论是初学者还是经验丰富的专业人士,都能从中受益匪浅。通过深入学习和实践,你可以不断提升自己的专业技能,成为一名出色的...
物化视图复制允许只复制所需数据子集,进一步减轻网络负担。 实现数据复制需要进行详细的设计与规划,包括确定数据库站点、复制数据对象、同步方式和冲突解决策略。实现过程通常包括创建复制站点、定义组对象和配置...