Oracle 11g r2物化视图日志新增的COMMIT SCN语句概述

在11.2中,物化视图日志也新增了一些功能,对于本地物化视图而言,现在可以利用COMMIT SCN来替代以前版本中的TIMESTAMP方式来进行刷新。

看一个简单的例子:

SQL> SELECT * FROM V$VERSION;

BANNER

--------------------------------------------------------------------------------

Oracle Database11gEnterprise Edition Release11.2.0.1.0 - 64bit Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

SQL> CREATE TABLE T

2  (ID NUMBER PRIMARY KEY,

3  NAME VARCHAR2(30),

4  AGE NUMBER);

表已创建。

SQL> CREATE MATERIALIZED VIEW LOG ON T WITH COMMIT SCN;

实体化视图日志已创建。

SQL> INSERT INTO T

2  VALUES (1, 'TEST', 18);

已创建1行。

SQL> SELECT * FROM MLOG$_T;

  ID D O CHANGE_VECTOR$$                     XID$$

---------- - - ------------------------------ ----------

1 I N FE                             2.8148E+15

和普通的TIMESTAMP的物化视图不同,物化视图日志中不再记录TIMESTAMP列,而是记录了修改的XID信息,通过XID和SCN来判断一个物化视图是否需要刷新对应的记录。

通过这种方式,可以提高物化视图刷新的性能。

不过由于SCN只能用在本地使用,因此这种物化视图日志只支持本地的物化视图,而远端物化视图则不支持。

SQL> CREATE DATABASE LINK TEST112@TEST112 USING '172.25.198.230/TEST112';

数据库链接已创建。

SQL> SELECT GLOBAL_NAME FROM GLOBAL_NAME@TEST112@TEST112;

GLOBAL_NAME

-----------------------------------------------------------------

TEST112

SQL> CREATE MATERIALIZED VIEW MV_T1

2  REFRESH FAST

3  AS SELECT * FROM T@TEST112@TEST112;

CREATE MATERIALIZED VIEW MV_T1

*

第1行出现错误:

ORA-32415:具有基于提交SCN的实体化视图日志的从表不支持可快速刷新的远程实体化视图

SQL> CREATE MATERIALIZED VIEW MV_T

2  REFRESH FAST

3  AS SELECT * FROM T;

实体化视图已创建。

由于当前只有一个11.2版本的数据库,为了演示远端访问,创建了一个指向当前数据库的数据库链,可以看到建立本地的物化视图没有问题,但是远端物化视图不能基于SCN的物化视图日志。

除了可以创建基于主键或ROWID的单表物化视图外,本地基于连接、聚集或UNION ALL的物化视图都可以利用COMMIT SCN的物化视图日志。

但是,如果表中包含了LOB列,则建立COMMIT SCN的物化视图日志报错:

SQL> CREATE TABLE T_LOB

2  (ID NUMBER PRIMARY KEY,

3  CONTENT CLOB);

表已创建。

SQL> CREATE MATERIALIZED VIEW LOG ON T_LOB WITH COMMIT SCN;

CREATE MATERIALIZED VIEW LOG ON T_LOB WITH COMMIT SCN

*

第1行出现错误:

ORA-32421:具有LOB列的表不支持基于提交SCN的实体化视图日志

另外,如果物化视图依赖多个物化视图日志,那么这些物化视图必须都是基于TIMESTAMP或者都是基于COMMIT SCN的,而不能是二者混和的,否则会报错:

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

SQL> CREATE TABLE T1

2  (ID NUMBER PRIMARY KEY,

3  NAME VARCHAR2(30));

表已创建。

SQL> CREATE TABLE T2

2  (ID NUMBER PRIMARY KEY,

3  FID NUMBER,

4  ADDRESS VARCHAR2(30));

表已创建。

SQL> CREATE MATERIALIZED VIEW LOG ON T1 WITH ROWID (ID);

实体化视图日志已创建。

SQL> CREATE MATERIALIZED VIEW LOG ON T2 WITH ROWID, COMMIT SCN (ID, FID);

实体化视图日志已创建。

SQL> CREATE MATERIALIZED VIEW MV_T12

2  REFRESH FAST

3  AS SELECT T1.ROWID ROWID1, T2.ROWID ROWID2, T1.ID ID1, T2.ID ID2

4  FROM T1, T2

5  WHERE T1.ID = T2.FID;

FROM T1, T2

*

第4行出现错误:

ORA-32414:实体化视图日志互不兼容,无法进行快速刷新

这是由于包含COMMIT SCN的物化视图日志的快速刷新方式已经发生了改变。

作者:51cto博客 Oracle小混子

时间: 2024-09-19 08:55:09

Oracle 11g r2物化视图日志新增的COMMIT SCN语句概述的相关文章

oracle基于COMMIT SCN的物化视图日志快速刷新的方法

11.2中物化视图日志可以指定COMMIT SCN,这时物化视图刷新就不需要时间戳了,这篇简单描述Oracle是如何实现通过COMMIT SCN来进行刷新的. 建立一个测试环境: SQL> SELECT * FROM V$VERSION; BANNER -------------------------------------------------------------------------------- Oracle Database11gEnterprise Edition Relea

Oracle 物化视图和物化视图日志

一.相关概念 物化视图是将查询预先定义在结构中,并手动或者定期刷新将结果存储在物化视图段中,也就是说跟普通视图不同,它是需要存储空间的,从而不需要重新或者反复的执行sql语句,支持增量刷新,快速获取结果,提高数据获取的效率. 物化视图类型根据刷新模式,可分为on demand.on commit .on demand 是需要刷新时才进行刷新,可以通过job或者手动进行刷新:on commit 是DML型的刷新,一旦事务commit立即刷新. 物化视图的刷新方式有四种:fast.complete.

Oracle 11g R2 RAC高可用连接特性 – SCAN详解2

SCAN概念 先介绍一下什么叫SCAN,SCAN(Single Client Access Name)是Oracle从11g R2开始推出的,客户端可以通过SCAN特性负载均衡地连接到RAC数据库.SCAN提供一个域名来访问RAC,域名可以解析1个到3个(注意,最多3个)SCAN IP,我们可以通过DNS或者GNS来解析实现.其中DNS大家都很熟悉,这里不多说.GNS(Grid Naming Service)则是Oracle 11g R2的新功能,可以通过DHCP服务为节点和SCAN分配VIP和

Oracle 11g R2 RAC高可用连接特性 – SCAN详解1

昨天帮朋友解决11g RAC SCAN问题,当时为这朋友简单解答了一些SCAN特性相关的问题,但我知道这仅仅是一小部分. Oracle从11g开始推出SCAN特性可不是我解答那样简单的,SCAN特性在Oracle RAC高可用连接里占据着非常重要的地位,也是以后的重点推进方向. 昨天处理完问题比较晚自己又比较累,所以没有整理出SCAN特性相关资料,今天就抽出点时间把SCAN高可用连接特性介绍出去. 说在前头:文章中核心内容来自官方,当然我也参考了部分前辈们整理的资料,再加以自己的理解和测试整理出

【物化视图】几种物化视图日志分析

物化视图日志在建立时有多种选项:ROWID.PRIMARY KEY和OBJECT ID三种类型,同时还可以指定SEQUENCE或明确指定列名. 上面这些情况产生的物化视图日志的结构都不相同. 所有物化视图都会包括的列: SNAPTIME$$:用于表示刷新时间. DMLTYPE$$:用于表示DML操作类型,I表示INSERT,D表示DELETE,U表示UPDATE. OLD_NEW$$:用于表示这个值是新值还是旧值.N(EW)表示新值,O(LD)表示旧值,U表示UPDATE操作. CHANGE_V

【物化视图】根据物化视图日志快速刷新物化视图的过程

先来再次分析一下物化视图日志的结构. yang@rac1>create table t (id number ,name varchar2(30),val number); Table created. yang@rac1>create materialized view log on t with rowid,sequence (id,name) including  new values; Materialized view log created. yang@rac1>desc m

ORACLE中的物化视图

oracle|视图 ORACLE中的物化视图         物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照.        物化视图可以查询表,视图和其它的物化视图.        通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中).        对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的.如果你想修改本地副本,必须用高级复制的功能.当你想从一个表或视

Oracle Linux 6.3下安装Oracle 11g R2(11.2.0.3)

    本文主要描述了在Oracle Linux 6.3下安装Oracle 11gR2(11.2.0.3).从Oracle 11g开始,Oracle官方网站不再提供其Patch的下载链接,需要使用Meatlink账户才可以进行下载.童鞋们不要着急,没有Metalink账户的也可以自己百度一下,网上有很多下载链接,迅雷就可以搞定了.Oracle 11.2.0.3整合为7个zip压缩包,如果仅仅是安装Oracle Database,下载1至2.zip包即可.下面是其安装步骤.   一.准备安装环境1

ORACLE中的物化视图(OCM复习总结)

1.  基本概念 视图是一个虚拟表,基于它创建时指定的查询语句返回结果集.每次访问它都会导致这个查询语句被执行一次.为了避免每次访问都执行这个查询,可以将这个查询的结果集存储到一个物化视图.也就是说,物化视图只是对已经存储于别处的数据的转换和复制.         执行创建物化视图的语句实际上会创建一个物化视图和一个容器表,容器表是一个普通的表,它与物化视图拥有同样的名称,并且这个表可以像任何其他表一样被查询.执行计划中的MAT_VIEW_ACCESS_FULL表明使用了物化视图,直接使用容器表