物化视图

18.1、物化视图作用

1) 物化视图起源于数据仓库,早期的考虑是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免在基表上进行这些耗时的操作,从而快速的得到结果。

2) 物化视图和表一样可以直接进行查询。物化视图还用于复制、移动计算等方面。

alter table t add primary key (empno);

create materialized view log on t;

CREATE MATERIALIZED VIEw mv1 refresh fast
as select * from t;

exec dbms_mview.refresh('mv1','F');

18.2 物化视图创建时的权限

如果创建基于主键的物化视图,则必须具有访问主表、访问主表的日志、create MATERIALIZED VIEW这三个权限。
如果创建基于rowid的物化视图,则必须具有访问主表、create MATERIALIZED VIEW这两个权限。

18.3 创建物化视图基本语法

create materialized view [view_name]
refresh [fast|complete|force]
[
on [commit|demand] |
start with (start_time) next (next_time)
]
as
{创建物化视图用的查询语句}

18.4 物化视图基本功能

1) 查询重写(Query Rewrite):查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果。建立物化视图时可以指定Enable Query Rewrite,默认为DISABLE。

2) 刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。ON DEMAND指物化视图按照用户需要进行刷新。刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认值是FORCE ON DEMAND。

3) 物化视图日志:提高刷新效率。

4) 基于主键和基于rowid的物化视图

18.5 基于主键的物化视图的两个范例

例1,在Linux本地完成表test和物化视图test_view1

1)SCOTT下建立基于主键的test表,然后建立test表的物化视图日志
scott:
SQL> create table test (id int primary key,name char(10));

SQL> create materialized view log on test;

2)SYS授权SCOOT用户建立物化视图权限
sys:
SQL> grant create materialized view to scott;

3)SCOTT建立基于commit的物化视图

SQL> create materialized view test_view1 refresh fast on commit as select * from test;

4) test表插入数据,检查test_view1刷新。

例2,在远程节点建立物化视图test_view2

1)本地(linux)和远程( win)建立link连接, database link是远程连接的基础,也是oracle 分布式数据库技术的组成部分。

win:

C:\Documents and Settings\timran>sqlplus sys/system@orcl as sysdba

sys:
SQL> create public database link my_link connect to scott identified by 123123 using 'dborcl';

//如果以前建立过,提示重名的话可以使用下面语句删掉 SQL> drop public database link my_link;

若想查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令:
  
SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';

OWNER OBJECT_NAME
---------------------------------- ---------------------------------------
PUBLIC MY_LINK.REGRESS.RDBMS.DEV.US.ORACLE.COM

2)在远程(win)上测试与本地(linux,启动监听)的访问连接是否成功。

win:scott:
SQL> select * from tab; //看win自己

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
测试 TABLE

SQL> select * from tab@my_link; //看linux(别人)

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BONUS TABLE
DEPT TABLE
EMP TABLE
MLOG$_TEST TABLE
RUPD$_TEST TABLE
SALGRADE TABLE
TEST TABLE
TEST_VIEW1 TABLE

3) 授权win端scott建立物化视图的权限
win:sys:
SQL>grant create materialized view to scott; (前面已经授予了,这步可免)

4)win端建立基于test主键的on demand(按一定时间间隔刷新)的物化视图test_view2
scott:
SQL>create materialized view test_view2 refresh
fast
start with sysdate
next sysdate+1/2880
with primary key
as select * from scott.test@my_link;

//1440分钟是24小时,1/1440是1分钟,1/2880就是30秒。

5) 测试win端物化视图test_view2刷新效果

SQL> select * from test_view2;

ID NAME
---------- ----------
1 a
2 b

linux: scott:

SQL>insert into test values(3,'c');
SQL>commit;

win: scott: ---30秒以内...

SQL> select * from test_view2;

ID NAME
---------- ----------
1 a
2 b
3 c

18.6 关于视图的几点说明:

1)基于主键的物化视图是首选,如果基表无主键,只能考虑基于rowid的物化视图, 基于rowid的快速刷新要在建立物化视图日志时做出说明。
如:SQL> create materialized view log on test with rowid;

2)一个基表只能有一个物化视图日志,其中可以分别应对多个物化视图的增量刷新。

3)物化视图的数据源可以是基表的结果集,select 语句还可以嵌套子查询。

4)物化视图会有segment,可以做index, partition, 一般用于只读,也可以在建立时说明for update,使物化视图支持DML操作(慎用)。
如:SQL> create materialized view test_view1 refresh fast for update as select * from test;

5)通过包可以对on demand方式进行手动刷新。
SQL> exec dbms_mview.refresh('scott.test_view1');

oracle之二物化视图的更多相关文章

  1. Oracle中建立物化视图报错

    Oracle中建立物化视图报错 今天在建立视图的时候,报了一个错:ORA-01723: zero-length columns are not allowed. 建视图的语句: create mate ...

  2. Oracle数据库入门——物化视图日志结构

    物化视图的快速刷新要求基本必须建立物化视图日志,这篇文章简单描述一下物化视图日志中各个字段的含义和用途. 物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当 ...

  3. Oracle数据库入门——物化视图语法

    一.Oracle物化视图语法 create materialized view [view_name]refresh [fast|complete|force][on [commit|demand] ...

  4. 转: Oracle中的物化视图

    物化视图创建语法:CREATE MATERIALIZED VIEW <schema.name>PCTFREE <integer>--存储参数PCTUSED <intege ...

  5. ORACLE 快速刷新物化视图的方法(11g)

    1.on demand:用户需要刷新的时候刷新,这里就要求用户自己动手去刷新数据了(也可以使用job定时刷新) refresh [fast|complete|force] 视图刷新的方式: compl ...

  6. oracle 11g 使用物化视图远程增量刷新数据

    ① 源数据库建立物化视图日志 drop MATERIALIZED VIEW LOG ON ORG_BASEINFO/ CREATE MATERIALIZED VIEW LOG ON ORG_BASEI ...

  7. Oracle 物化视图 说明

    一.    物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可 ...

  8. Oracle物化视图的创建及使用(一

    Oracle物化视图的创建及使用 http://blog.csdn.net/tegwy/article/details/8935058 先看简单创建语句: create   materialized  ...

  9. Oracle物化视图的一般使用

    普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,首先明白基本概念,普通视图是不存储任何数据的,他只有定义,在查询中是转换为对应的定义SQL去查询,而物化视图是将数据转换为一个表,实际存储 ...

随机推荐

  1. 思维导图概览SpringCloud

    @ 目录 1.什么是微服务 1.1.架构演进 1.2.微服务架构 1.3.微服务解决方案 2.SpringCloud概览 2.1.什么是SpringCloud 2.1.SpringCloud主要组件 ...

  2. windows下mongoDB的下载和安装

    1.进入mongoDB官网,官网地址:https://www.mongodb.com 2.  点击Try free按钮,进入下载页面 3.点击download进行下载:下载完成如下图: 4.点击下载的 ...

  3. DB2数据库错误代码大全

    SQLCode SQLState 状态说明 000 00000 SQL语句成功完成 01xxx XXX SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 ...

  4. 性能测试必备知识(10)- Linux 是怎么管理内存的?

    做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 内存映射 日常生活常说的内存是什么 比方说, ...

  5. 金题大战Vol.0 A、凉宫春日的叹息

    金题大战Vol.0 A.凉宫春日的叹息 题目描述 给定一个数组,将其所有子区间的和从小到大排序,求第 \(k\) 小的是多少. 输入格式 第一行两个数\(n\),$ k\(,表示数组的长度和\)k$: ...

  6. Java并发编程(07):Fork/Join框架机制详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Fork/Join框架 Java提供Fork/Join框架用于并行执行任务,核心的思想就是将一个大任务切分成多个小任务,然后汇总每个小任务 ...

  7. Flutter FlatButton 按钮基本各种用法

    Flutter中给我们预先定义好了一些按钮控件给我们用,常用的按钮如下 RaisedButton :凸起的按钮,其实就是Android中的Material Design风格的Button ,继承自Ma ...

  8. WARNING: The host 'db01' could not be looked up with /data/mysql/bin/resolveip. This probably means that your libc libraries are not 100 % compatible with this binary MySQL version......

    Linux系统安装MySQL,环境参数: 硬件配置:CPU: Xeon(R) CPU E5-2650 v4 @ 2.20GHz 8核内存:16G硬盘:系统盘200GB 数据盘1TB 操作系统CentO ...

  9. SuperSlide轮播切换

    <!-- 点击切换引入 --> <script type="text/javascript" src="js/jquery.js">&l ...

  10. 第七天Scrum冲刺博客

    1.会议照片 2.项目进展 团队成员 昨日计划任务 今日计划任务 梁天龙  学习课程页面  建议页面 黄岳康  定义个人课程  登陆页面 吴哲翰  完成页面的与后端的沟通交流  继续保持确认功能齐全 ...