ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle11gr2物化视图日志新增COMMIT SCN语句

Oracle11gr2物化视图日志新增COMMIT SCN语句

原创 Linux操作系统 作者:yangtingkun 时间:2010-03-07 23:58:25 0 删除 编辑

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

 

 

看一个简单的例子:

SQL> SELECT * FROM V$VERSION;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.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的,而不能是二者混和的,否则会报错:

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的物化视图日志的快速刷新方式已经发生了改变。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-628847/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11077332