目录
一、物化视图
8i和8i之前,oracle提供了快照snapshot;
9i中改名为物化视图,也叫实体化视图 materialized view。
二、提高查询速度,数据库性能调整的重点:
1、调整sga和pga
2、调整sql语句,使用绑定变量
3、使用物化视图
4、系统结构上,使用读写分离(放到分开的数据库上,保持数据的更新,)
读写分类的方式:
(1)11g中提供的dataguard【DG】功能,可以实现此功能,读操作在备考,写操作在主库。
(2)读库、写库进行实时数据更新同步,在写库上使用logmnr实现日志挖掘,传输到读库上,重做日志。
(3)在读库、写库之间使用queue(队列),实现读写(王二暖,读写分离
三、物化视图1——问题的提出
在分布式的海量数据环境中,信息查询的速度问题显得尤为重要。传统的查询方式,即根据用户的要求,每次都重新的进入基表或视图查询,所需的时间太长。
例如移动通信行业,即使客户需要查询很少的信息,也可能会花费很多时间,可能在30分钟左右,如果数据库主机稍有繁忙,这个时间会更长,客户难以忍受。为了解决这种问题,ORACLE中设计了物化视图(又称为MV)。
四、物化视图2——简介-提高查询性能、数据复制(DG等)
物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和
的汇总表。
物化视图存储基于远程表的数据,也可以称为快照。
物化视图可以查询表,视图和其它的物化视图。
通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。
五、物化视图3——简介
1、对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的(物化视图就是远端数据库在本地的副本)。
2、如果你想修改本地副本,必须用高级复制的功能。
3、当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。
4、对于数据仓库,创建的物化视图通常情况下是聚合视图, 单一表聚合视图和连接视图。
5、物化视图有很多方面和索引很相似:
(1) 使用物化视图的目的是为了提高查询性能;
(2)物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;
(3) 物化视图需要占用存储空间;
(4)当基表发生变化时,物化视图也应当刷新。
六、物化视图4——作用
1、 物化视图和表一样可以直接进行查询。物化视图可以基于分区表,物化视图本身也可以分区。
2、数据仓库中的物化视图主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。
3、在数据仓库中,还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的物化视图进行查询,完全对应用透明。
4、 除了在数据仓库中使用,物化视图还用于复制、移动计算等方面。
六、物化视图5——创建时的权限
1、如果创建基于主键的物化视图,则必须具有:
访问主表、访问主表的日志、create MATERIALIZED VIEW这三个权限。
2、如果创建基于rowid的物化视图,则必须具有:
访问主表、create MATERIALIZED VIEW这两个权限。
七、物化视图6——创建时的选项
1、查询重写(Query Rewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。
(1)分别指出创建的物化视图是否支持查询重写。
(2)查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果。
(3)默认为DISABLE QUERY REWRITE。
2、物化视图日志:
(1)如果需要进行快速刷新,则需要建立物化视图日志。
(2)物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。
3、刷新(Refresh):
(1)指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。
(2)刷新的模式有两种:ON DEMAND和ON COMMIT。
ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。
ON COMMIT指出物化视图在对基表的DML操作提交的同时进行刷新。
(3)刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。
a、FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。
b、COMPLETE刷新对整个物化视图进行完全的刷新。
c、如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。
d、NEVER指物化视图不进行任何刷新。
默认值是FORCE ON DEMAND。
八、物化视图9---基于主键的物化视图
1、使用条件:远程表必须包含主键。
2、远端操作:创建主键表,并创建基于主表的视图日志。
(1)创建主键表:create table stu(id varchar2(10) primary key,name varchar2(10); (2)创建物化视图日志:create materialized view log on stu; (3)授权创建物化视图的用户权限: a、授予hr 查询 stu的权限【远端数据库下授予】: grant select on stu to hr; b、授予hr创建物化视图的权限【本地数据库下sys或system下授予】: grant create materialized view to hr; c、授予访问主表日志的权限给hr【远端数据库下授予】: grant select on MLOG$_STU to hr;
3、本地操作【过程、job】:
(1)创建一个过程,实现刷新本地物化视图的动作;
本地数据库【fast刷新,每分钟一次】: create materialized view stu_view refresh fast start with sysdate next sysdate+1/1440 with primary key as select * from scott.stu;
测试上述:
a、在远端insert 数据,在本地可以看到(一分钟后)
b、drop 掉远端的stu后,远端的物化视图日志也会被删除掉
c、drop materialized view stu_view; 删除本地物化视图
(2)创建一个JOB,进行调用过程的操作;运行这个JOB,则本地数据会与远程数据自动同步刷新一次。
一分钟后查看,即能查看到信息。
九、物化视图10——基于rowid的物化视图【和主键表差别不大,它是基于rowid】
1、使用条件:远程表可以没有主键。
2、远端操作:创建表。
3、本地操作:
(1)创建一个过程,实现刷新本地物化视图的动作;
本地数据库【fast刷新,每分钟一次】:
create materialized view stu_view refresh with rowid
as
select * from scott.stu;
(2)创建一个JOB,进行调用过程的操作;运行这个JOB,则本地数据会与远程数据自动同步刷新一次【这里和上面一致】
十八、普通视图和物化视图的区别:
1、视图:里面不存在真正的数据
2、物化视图:真正存在的数据。将远端的数据,实时的复制到本地,且只读
文章评论