设为首页 收藏本站
查看: 1426|回复: 1

[经验分享] ORACLE物化视图测试

[复制链接]

尚未签到

发表于 2013-11-27 08:39:13 | 显示全部楼层 |阅读模式
ORACLE物化视图测试

物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。物化视图有ON DEMAND和ON COMMIT物化视图ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。ORACLE默认创建的物化视图是ON DEMAND 模式。

E:\>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on 星期二 11月 26 10:16:39 2013

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> conn scott/cat
已连接。

SQL> create materialized view mv_test as select * from dept1;    --创建ON DEMAND 物化视图

实体化视图已创建。

SQL> select mv.REFRESH_MODE from user_mviews mv where mv.MVIEW_NAME = 'MV_TEST';

REFRES
------
DEMAND

SQL> analyze table mv_test compute statistics;     --分析物化视图

表已分析。

SQL> analyze table dept1 compute statistics;       --分析表

表已分析。

SQL> select t.TABLE_NAME,t.NUM_ROWS from user_tables t where t.TABLE_NAME in ('MV_TEST','DEPT1');   --查看当前基表和物化视图的行数  

TABLE_NAME                       NUM_ROWS
------------------------------ ----------
DEPT1                                   6
MV_TEST                                 6

物化视图最重要的功能和特性之一,就是其数据会随着基表(或称主表,master表,本例中为TESTCF)的变化而变,基表数据增了,物化视图数据会变多;基表数据删了,物化视图数据也会变少。
但怎么更新?或者说物化视图的数据怎么随着基表而更新?Oracle提供了两种方式,手工刷新和自动刷新。默认是手工刷新,自动刷新可以通过JOB等方法实现

SQL> create view v_test as select * from dept1;   --创建一个普通视图

视图已创建。

SQL> select * from v_test;   

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        50 wang           gongzuo
        60 zhuzhzu        zhuzhuz

已选择6行。

SQL> insert into dept1(deptno,dname,loc) values (70,'test','test');   --插入一条测试数据

已创建 1 行。

SQL> select * from v_test;          --普通视图数据已变化

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        50 wang           gongzuo
        60 zhuzhzu        zhuzhuz
        70 test           test

已选择7行。

SQL> select * from mv_test;      --可以看见物化视图数据并没有变化

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        50 wang           gongzuo
        60 zhuzhzu        zhuzhuz

已选择6行。

创建ON COMMIT物化视图

SQL> insert into mv_test(deptno,dname,loc) values (70,'test','test');   --物化视图不能像普通视图表那样插入数据
insert into mv_test(deptno,dname,loc) values (70,'test','test')
            *
第 1 行出现错误:
ORA-01732: 此视图的数据操纵操作非法


SQL> create materialized view mv_test1 refresh force on commit as select * from dept1;
create materialized view mv_test1 refresh force on commit as select * from dept1
                                                                           *
第 1 行出现错误:
ORA-12054: 无法为实体化视图设置 ON COMMIT 刷新属性         --此错误是由于没有创建物化视图日志


SQL> create materialized view log on dept1 ;
create materialized view log on dept1
*
第 1 行出现错误:
ORA-12014: 表 'DEPT1' 不包含主键约束条件

SQL> alter table dept1 add constraints pk_deptno primary key (deptno);

SQL> create materialized view log on dept1 ;

实体化视图日志已创建。

SQL> create materialized view mv_test1 refresh force on commit as select * from
dept1;


实体化视图已创建。


SQL> select mv.REFRESH_MODE from user_mviews mv where mv.MVIEW_NAME = 'MV_TEST1'  --查看刷新模式
;

REFRES
------
COMMIT

测试ON COMMIT物化视图的更新特性


SQL> set timing on;

SQL> insert into dept1(deptno,dname,loc) values (80,'test','test');

已创建 1 行。


已用时间:  00: 00: 00.04
SQL> commit;

提交完成。


已用时间:  00: 00: 00.09
SQL> select * from mv_test1;               --可以看到数据已经更新过来了,但是对COMMIT速度会有一些影响,越大的表影响越大。


    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        50 wang           gongzuo
        60 zhuzhzu        zhuzhuz
        70 test           test
        80 test           test


已选择8行。


已用时间:  00: 00: 00.00

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-10701-1-1.html 上篇帖子: Oracle OCP 11G 052 V8.02与V9.02版本对比 下篇帖子: ORACLE用户管理与权限设置

尚未签到

发表于 2013-12-30 15:58:45 | 显示全部楼层
岁月如何变迁,我还是执着于旧时光。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表