[20151010]物化视图的物理表建成索引组织表

[20151010]物化视图的物理表建成索引组织表.txt

--论坛有人问这个问题,自己测试看看是否可行?
http://www.itpub.net/thread-1939707-1-1.html

1.环境:
SCOTT@test01p> @ver1

PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.1.0.1.0     Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

create table t ( id number CONSTRAINTS pk_t primary key , name varchar2(20));
insert into t  select rownum,'test' from dual connect by level<=10;
commit ;

create materialized view log on t;
create table mv_t ( id number  , name varchar2(20) ,constraint mv_t_iot_pk PRIMARY KEY(id)) ORGANIZATION INDEX;
insert into mv_t select * from t;
commit ;

2.建立物化视图看看。

create materialized view mv_t on prebuilt table refresh fast start with sysdate next sysdate + 1/24/60 as select * from t;
--create materialized view mv_t on prebuilt table refresh fast on commit  as select * from t;

SCOTT@test01p> insert into t values (11,'a');
1 row created.

SCOTT@test01p> commit ;
Commit complete.

SCOTT@test01p> update t set name='aaaa' where id=1;
1 row updated.

SCOTT@test01p> commit ;
Commit complete.

SCOTT@test01p> delete from t where id=2;
1 row deleted.

SCOTT@test01p> commit ;
Commit complete.

3.等上1分钟:

SCOTT@test01p> select * from mv_t;
        ID NAME
---------- --------------------
         1 aaaa
         3 test
         4 test
         5 test
         6 test
         7 test
         8 test
         9 test
        10 test
        11 a
10 rows selected.

SCOTT@test01p> SELECT JOB, LOG_USER, LAST_DATE, NEXT_DATE, FAILURES FROM USER_JOBS;
       JOB LOG_USER             LAST_DATE           NEXT_DATE             FAILURES
---------- -------------------- ------------------- ------------------- ----------
        22 SCOTT                2015-10-10 22:27:14 2015-10-10 22:28:14          0

--数据已经同步,1点问题都没有。

--上面我采用先建表,然后on prebuilt table的方式来建立materialized view。
--补充采用直接建立的方式看看:

SCOTT@test> drop materialized view mv_t;
Materialized view dropped.

SCOTT@test> drop table mv_t purge ;
Table dropped.

SCOTT@test> create materialized view mv_t ( id  , name ) ORGANIZATION INDEX refresh fast on commit  as select * from t;
Materialized view created.

SCOTT@test> select dbms_metadata.get_ddl( 'TABLE', 'MV_T', user )  c100 from dual;
C100
----------------------------------------------------------------------------------------------------
  CREATE TABLE "SCOTT"."MV_T"
   (    "ID" NUMBER,
        "NAME" VARCHAR2(20),
         PRIMARY KEY ("ID") ENABLE
   ) ORGANIZATION INDEX NOCOMPRESS PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"
PCTTHRESHOLD 50;
--这样直接建立物化视图是索引组织表。主键也是ID。

SCOTT@test> select dbms_metadata.get_ddl( 'MATERIALIZED VIEW', 'MV_T', user )  c100 from dual;
ERROR:
ORA-31600: invalid input value MATERIALIZED VIEW for parameter OBJECT_TYPE in function GET_DDL
ORA-06512: at "SYS.DBMS_METADATA", line 5088
ORA-06512: at "SYS.DBMS_METADATA", line 7589
ORA-06512: at line 1
--google 发现不能这样执行MATERIALIZED VIEW之间空格换成下划线_。

SCOTT@test> select dbms_metadata.get_ddl( 'MATERIALIZED_VIEW', 'MV_T', user )  c100 from dual;
C100
----------------------------------------------------------------------------------------------------

  CREATE MATERIALIZED VIEW "SCOTT"."MV_T" ("ID", "NAME")
  ORGANIZATION INDEX NOCOMPRESS PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"
PCTTHRESHOLD 50
  BUILD IMMEDIATE
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"
  REFRESH FAST ON COMMIT
  WITH PRIMARY KEY USING DEFAULT LOCAL ROLLBACK SEGMENT
  USING ENFORCED CONSTRAINTS DISABLE QUERY REWRITE
  AS select * from t;

时间: 2024-08-02 05:28:34

[20151010]物化视图的物理表建成索引组织表的相关文章

oracle点知识8——索引组织表

关于索引的入门参照博客:http://blog.csdn.net/changyanmanman/article/details/7097318 索引组织表(index organized table, IOT)就是存储在一个索引结构中的表.存储在堆中的表是无组织的(也就是说,只要有可用的空间,数据可以放在任何地方),IOT中的数据则按主键存储和排序.对你的应用来说,IOT表和一个"常规"表并无二致. IOT有什么意义呢?使用堆组织表时,我们必须为表和表主键上的索引分别留出空间.而IOT

ORACLE索引组织表讨论

本文只代表作者观点,如有错误请指正 关于索引组织表本文主要讨论以下几个方面 1.什么是索引组织表 2.索引组织表的关键特性 3.如果建立一个合适的索引组织表 4.什么事逻辑ROWID以及物理猜(Physical Guesses) 5.从内部结构进行分析和证明这些观点 一般的情况下索引是和表分离的SEGMENT,索引的行记录的是索引键值和ROWID,而在索引组织表中就整个表就是一个索引,索引的页节点记录的并非 键值和ROWID而记录是整个数据行,这里和MYSQL INNODB的表非常相像,MYSQ

Oracle中如何管理索引组织表

索引组织表(IOT)有一种类B树的存储组织方法.普通的堆组织表是以一种无序的集合存储.而IOT中的数据是按主键有序的存储在B树索引结构中.与一般B树索引不同的的是,在IOT中每个叶结点即有每行的主键列值,又有那些非主键列值. 在IOT所对应的B树结构中,每个索引项包括<主键列值,非主键列值>而不是ROWID,对于普通堆组织表,oracle会有对应的索引与之对应,且分开存储.换句话说,IOT即是索引,又是实际的数据. 索引组织表(IOT)不仅可以存储数据,还可以存储为表建立的索引.索引组织表的数

oracle 索引组织表的深入详解_oracle

索引组织表(IOT)不仅可以存储数据,还可以存储为表建立的索引.索引组织表的数据是根据主键排序后的顺序进行排列的,这样就提高了访问的速度.但是这是由牺牲插入和更新性能为代价的(每次写入和更新后都要重新进行重新排序).索引组织表的创建格式如下: 复制代码 代码如下: create table indexTable(   ID   varchar2 (10),   NAME varchar2 (20),   constraint pk_id primary key (ID)   )   organi

[20151008]索引组织表上创建BITMAP索引.txt

[20151008]索引组织表上创建BITMAP索引.txt --IOT 是一种特殊的索引结构,使用它能够解决特定场合的应用问题,但是在许多应用中很少使用,更多的是使用堆表. --我偏向使用静态以及"只读"的小表. --以前写过一个系列,一直没有很好理解在IOT表上建立位图索引,最近再研究看看; --我当时不理解为什么mapping table与iot表对应的块为什么不一致? 1.建立测试环境: SCOTT@test> @ver1 PORT_STRING             

索引组织表(index organized table ,IOT)

索引组织表(index organized table ,IOT) 默认情况下所有的表都是堆组织表,对表中的记录不进行排序.堆组织表通过rowid 来访问(定位)表中的记录.IOT 使用b-tree index 的结构存储记录.逻辑上按照主键排序,和正常的主键索引不同的是,主键索引仅仅是存储定义列的值.IOT index 存储所有IOT表中所有的列,并按照主键排序.索引和表合二为一,存储在同一个数据库对象中.表中记录的访问也不是通过传统的rowid来现实,而是通过主键来访问. 创建IOT IOT

ORACLE的ORA-1693错误以及表和索引的表空间的移动

本公司开发的软件,有客户不能上传大的附件,页面不报任何错误.查看JBOSS日志,同样看不到任何错误,排除了软件本身故障. 在查看oracle数据库日志,发现当上传大的附件时出现错误信息 OEA_1693: MAX # EXTENTS 4096 reached in lobsegment nes.sys_LOB0000024832C00008$$ 解决过程 上网找了下资料 ORA-1693 max # extents (string) reached in lob segment string.s

关于索引组织表IOT

摘自oracle高效设计: create table t( a int, b int, c int, primary key (a,b))organization index; create index t_idx_c on t(c); set autotrace traceonly explain set autotrace traceonly explainselect a, b from t where c = 55; 执行计划-------------------------------

物化视图刷新失败导致日志表异常增大

整理自:http://blog.itpub.net/231499/viewspace-63714/ 今天在检查时,发现某个物化视图日志占用的空间超过150M,再检查看,该物化视图日志表的记录数有150W,由于其对应的物化视图没有会刷新一次,结合业务量分析可知:物化视图日志不能正常清除. 下面的解决步骤 --在源库查询物化视图对应日志条目个数SQL> select count(1) from MLOG$_ITEM_TAG; COUNT(1)----------532515 --在物化视图端刷新物化