关于本地分区索引和索引组织表保证唯一性的限制
首先说明索引组织表和本地分区唯一索引有着共同的特点。
1、索引组织表(以下简称IOT)要求主键是必须的因为表的结构会按照主键索引进行构造,如果IOT分区那么,那么可以理解为一个类似的按照某个字段分区的
本地索引,因为索引和表是在一起的,表的分区必然就是索引的分。而这个分区字段必须要是主键的一部分。考虑一个主键(name,time),如果分区键
为TIME,如果范围是10-16 00:00:00到10-17 00:00:00 如果我们能够保证在这个范围内name time的唯一那么在整个主键内必然唯一。如果我们使用其他
字段比如一个额外的ID字段分区,那么要保证主键的name time的唯一性只能全部扫描整个分区,这样分区的剪裁的特性就消耗殆尽了。
2、一样的本地分区索引来保证唯一性也是这样的,他必须包含分区键,这样才能做到在分区内唯一则唯一。
那么我们大概用语言描述一下:
如果IOT表分区 -> 那么分区键必须是主键的一部分
如果本地分区索引唯一 -> 那么其索引字段必须包含分区键
考虑如下几个报错
ORA-14039: partitioning columns must form a subset of key columns of a UNIQUE index
ORA-14188: sub-partitioning columns must form a subset of key columns of a UNIQUE index
这两个报错则是由于本地唯一索引不包含分区键或者子分区键的报错。
如下:
SQL> create unique index t12_u on t12(name) local;
create unique index t12_u on t12(name) local
ORA-14039: partitioning columns must form a subset of key columns of a UNIQUE index
SQL> create unique index t12_u on t12(name,c_time) local;
create unique index t12_u on t12(name,c_time) local
ORA-14188: sub-partitioning columns must form a subset of key columns of a UNIQUE index
ORA-25199: partitioning key of a index-organized table must be a subset of the primary key
这个报错则是说明IOT的分区表,分区键必须是其组织主键的一部分。
如下:
CREATE TABLE t12(c_time date,id int,name varchar2(20),primary key(name))
ORGANIZATION INDEX
PARTITION BY RANGE(c_time)
(
PARTITION p1 VALUES LESS THAN (TO_DATE('01-06-2012','dd-MM-yyyy')),
PARTITION p2 VALUES LESS THAN (TO_DATE('01-07-2015','dd-MM-yyyy')),
PARTITION p3 VALUES LESS THAN (TO_DATE('01-08-2017','dd-MM-yyyy')),
PARTITION p4 VALUES LESS THAN (TO_DATE('01-09-2019','dd-MM-yyyy'))
)
ORA-25199: partitioning key of a index-organized table must be a subset of the primary key
最后索引组织表不能包含子分区
ORA-25198: only range, list, and hash partitioning are supported for index-organized table
如下:
CREATE TABLE t12(c_time date,id int,name varchar2(20),primary key(name))
ORGANIZATION INDEX
PARTITION BY RANGE(c_time)
SUBPARTITION BY hash(id)
SUBPARTITION TEMPLATE
( SUBPARTITION h_p1,
SUBPARTITION h_p2,
SUBPARTITION h_p3,
SUBPARTITION h_p4
)
(
PARTITION p1 VALUES LESS THAN (TO_DATE('01-06-2012','dd-MM-yyyy')),
PARTITION p2 VALUES LESS THAN (TO_DATE('01-07-2015','dd-MM-yyyy')),
PARTITION p3 VALUES LESS THAN (TO_DATE('01-08-2017','dd-MM-yyyy')),
PARTITION p4 VALUES LESS THAN (TO_DATE('01-09-2019','dd-MM-yyyy'))
)
ORA-25198: only range, list, and hash partitioning are supported for index-organized table

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
[20151008]索引组织表上创建BITMAP索引.txt
[20151008]索引组织表上创建BITMAP索引.txt --IOT 是一种特殊的索引结构,使用它能够解决特定场合的应用问题,但是在许多应用中很少使用,更多的是使用堆表。 --我偏向使用静态以及"只读"的小表。 --以前写过一个系列,一直没有很好理解在IOT表上建立位图索引,最近再研究看看; --我当时不理解为什么mapping table与iot表对应的块为什么不一致? 1.建立测试环境: SCOTT@test> @ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.3.0 Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production create table t_io...
- 下一篇
[20151112]ORA-01450?3215?.txt
[20151112]ORA-01450 maximum key length (3215) exceeded.txt --如果建立的索引键值长度达到一定程度,在做rebuild online时会出现ora-01450错误.今天被别人问一个问题,我重复了测试: --测试出它的边界,例子: 1.测试环境: SCOTT@test> @ &r/ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- ---------------------------------------------------------------- x86_64/Linux 2.4.xx 10.2.0.4.0 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi SCOTT@test> create table t1(a varchar2(3000),b varchar2(200)); Table created. SCOT...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS关闭SELinux安全模块