物化视图
来源:互联网 发布:金十数据看白银 编辑:程序博客网 时间:2024/06/06 07:41
Oracle物化视图创建全过程
物化视图(Materialized View)在9i以前的版本叫做快照(SNAPSHOT),从9i开始改名叫做物化视图。它是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,从而快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL 语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。
其中物化视图有三种:聚集物化视图、包含连接物化视图、嵌套物化视图。但三种物化视图的快速刷新的限制条件有很大区别,而其他方面则区别不大。
我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库用户下没有任何对象,只是有查询所有表的权限,因此无法做数据反向。
于是决定使用物化视图,把对方数据库中的数据拿过来,虽然数据量比较大,但是每月只拿一次,而且如果设置成增量更新,也不会太慢。现在记录下物化视图的创建过程(以一张表为例)。
一、准备条件以及备注
假设双方数据库都是ORACLE10g,需要同步过来的表名叫:GG_ZLX_ZHU,对方数据库用户名:username,密码:password,SID:CPEES。
二、开始干活
1、首先要创建DB_LINK
- CREATE DATABASE LINK to_cpees
- CONNECT TO "username" identified by "password"
- using "CPEES"
其中CPEES为新建的到对方数据库的TNS。执行,现在我们就已经创建了到对方数据库的DB_LINK TO_CPEES。
2、创建Oracle物化视图快速刷新日志
因为上面说过,以后视图的刷新将采用增量刷新的方式,因此,为配合增量刷新,ORACLE要求要在住表上建立物化视图日志。
- CREATE MATERIALIZED VIEW LOG ON GG_ZLX_ZHU
- WITH PRIMARY KEY
- INCLUDING NEW VALUES;
(上面的SQL要在远程数据库上执行,不能在本地执行)
3、创建Oracle物化视图
Oracle物化视图,从名字上面来开,它应该是属于视图,但是确实物化。其物化是针对普通视图并没有真正的物理存储而言,其实可以简单的把物化视图看做一个物理表(不再做具体解释)。
- CREATE MATERIALIZED VIEW GG_ZLX_ZHU --创建物化视图
- BUILD IMMEDIATE --在视图编写好后创建
- REFRESH FAST WITH PRIMARY KEY --根据主表主键增量刷新(FAST,增量)
- ON DEMAND -- 在用户需要时,由用户刷新
- ENABLE QUERY REWRITE --可读写
- AS
- SELECT * FROM GG_ZLX_ZHU@TO_CPEES; --查询语句
4、视图刷新
根据业务需要,每月不定时刷新,所以不能是JOB,而且数量多,所以也不能一个一个刷新。根据以上条件,选择使用ORACLE自带工具DBMS_MVIEW工具包中REFRESH方法对物化视图进行刷新。该方法有两个参数,第一个参数是需要刷新的物化视图名称,第二个参数是刷新方式。我们可以写存储过来,对每个物化视图调用一次REFRESH方法,也可以使用“,”把物化视图连接以来,一次刷新。如下:
- CREATE OR REPLACE PROCDURE P_MVIEW_REFRESH AS
- BEGIN
- DBMS_MVIEW.REFRESH('GG_ZLX_ZHU','f');
- END P_MVIEW_REFRESH;
或者使用
- CREATE OR REPLACE PROCDURE P_MVIEW_REFRESH AS
- BEGIN
- DBMS_MVIEW.REFRESH('GG_ZLX_ZHU,GG_ZLX_FU','ff');
- END P_MVIEW_REFRESH;
注意:
1、如果需要同时刷新多个物化视图,必须用逗号把各个物化视图名称连接起来,并对
每个视图都要指明刷新方式(f、增量刷新,c、完全刷新,?、强制刷新)。
2、当日志和物化视图创建好后,删除日志,则需要重新创建物化视图,否则无法增量
刷新。
3、因为上面写的物化视图时根据主键进行更新,因此,主表必须有主键。
4、以上文章中红色是为可替换的,大家可以根据自己项目需求来修改。
希望上面的内容对大家能有帮助。
忘了写删除方法了,日志和物化视图要分开删除
- DROP MATERIALIZED VIEW LOG ON GG_ZLX_ZHU@TOCPEES;
- DROP MATERIALIZED VIEW GG_ZLX_ZHU;
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 物化视图
- 简述SQL Server Replication的常见错误及其处理
- 前端面试题
- JVM JRE JDK
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
- webstrom破解教程
- 物化视图
- 基于SOA 的软件过程管理在中小企业中的应用
- 使用java代码在jsp中显示实体数据
- 在PHP 7中不要做的10事情
- html之文档的头部和元数据定义(下,未写完)
- css hack
- hdu1846 Brave Game--巴什博奕
- 安卓屏幕适配以及在PS中进行测量
- 多因子模型水平测试题试答(业绩归因部分)