分区表--分区索引

分区索引在分区表上(普通表没有local索引)才有lacal索引和global索引类别, user_part_indexeslocality字段区分是local索引还是global索引,而user_indexes没有这样的字段,分区表上建立的索引带了global关键字但是没有分区信息也不是global索引。

 

分区索引在普通表上只能有global索引

 

local索引只能创建在分区表上,并且创建local索引的语法不能带分区信息,只带一个local就可以了,并且其分区形式与分区表的分区形式一致(比如分区表的分区表空间是12,而分区索引的分区表空间也是12

local索引是对单个分区的,每个分区索引只指向一个表分区。某个分区做truncate或者moveshrink等只影响这个分区的索引。

global索引可以建立在分区表上也可以建立在非分区表上,创建global索引时如果带分区信息,则一定要加global(在分区表和非分区表都如此),并且其分区形式与索引所在表的分区形式没有关联关系。(比如分区表的分区表空间是12,而分区索引的分区表空间是1234
global索引则一个分区索引能指向n个表分区,同时,一个表分区,也可能指向n个索引分区,对分区表中的某个分区做truncate或者moveshrink等,可能会影响到n个全局索引分区,正因为这点对于全局分区索引,即使只动,截断一个分区中的数据,都需要rebulid若干个分区甚至是整个索引。
alter\move\truncate table XX update global indexes,这样就会自动维护global索引了



普通索引

分区表和非分区表都可以建立普通索引,建立普通索引(不带分区信息)时带一个global关键字并不代表任何意义,虽然也不报错


分区表

可以创建普通索引,分区local索引,分区global索引


非分区表

可以创建普通索引,分区global索引

 

创建好分区表后,分区字段的属性不能修改的,否则会报错ORA-14060: 不能更改表分区列的数据类型或长度




Oracle 11g中推出的Interval特性,是针对Range类型分区的一种功能拓展,Interval支持的Range分区键类型只有numberdate、timestamp三种类型。其他类型字段做alter table tablename set INTERVAL()会报错ORA-14751: 间隔分区表的分区列的数据类型无效


原来分区名字为patddd_1\patddd_k 这样的,后来自动分区,则后面的分区名字它怎么处理
dba_tab_partitions.partition_name           ---后面的分区名字是自动的,以sys_开头
dba_tab_partitions.partition_position       ---后面的position是顺序的,如3、4、5...
但是不是说先出现的分区名字(sys_开头的)对应的position就大于后出现的分区名字对应的position
--开始插入29,分区是sys_p64,当时sys_p64的position是5,后来插入24后(24对应分区sys_p65),sys_p64的position变成了6 


CREATE TABLE tablename (hid number,hdate date)

PARTITION BY RANGE(hdate) INTERVAL (NUMTODSINTERVAL(1, 'DAY'))

( PARTITION p01 VALUES LESS THAN (to_date('2003-1-1','yyyy-mm-dd')));

DATE类型:建立的分区表说明2003-1-1之前的数据放入P01分区中,之后的数据每天一个分区

CREATE TABLE tablename (hid number,hdate date)

PARTITION BY RANGE(hid) INTERVAL (100)

( PARTITION p01 VALUES LESS THAN (100));

number类型:建立的分区表说明100之前的数据放入P01分区中,之后的数据每100放入一个新一个分区,比如102放入一个分区p02203放入一个分区p03
如果只有100以内的数据,还没有大于100的数据,直接插入1111则一样自动建立一个分区,USER_TAB_PARTITIONS.HIGHVALUE显示为1200,再插入103一样会自动建立一个分区,USER_TAB_PARTITIONS.HIGHVALUE显示为200


当如如果建表的时候没有指定interval
修改每100为单位分区则可以手工修改如下

alter table tablename set INTERVAL (100);

修改每天分区则可以手工修改如下

alter table tablename set INTERVAL (NUMTODSINTERVAL(1, 'DAY'));

修改为每周分区则如下

alter table tablename set INTERVAL(numtodsinterval(7,'day'));

修改为每月分区则如下

alter table tablename set INTERVAL(numtoyminterval(1,'MONTH'));
修改为每年分区则如下 
alter table tablename set INTERVAL(numtoyminterval(1,'YERA'));
numtodsinterval(<x>,<c>) ,x是一个数字,c是一个字符串,c只能是'DAY''HOUR''MINUTE''SECOND'

numtoyminterval(<x>,<c>) ,x是一个数字,c是一个字符串,c只能是'YEAR''MONTH'





创建分区表,按范围分区,4个分区信息对于2个表空间
CREATE TABLE range_example02 (

    hid number,

    hname varchar2(20)

)

PARTITION BY RANGE(hid)

( 

PARTITION p01 VALUES LESS THAN(100) TABLESPACE test_space01,

PARTITION p02 VALUES LESS THAN(200) TABLESPACE test_space02,

PARTITION p03 VALUES LESS THAN(300) TABLESPACE test_space01,

PARTITION p04 VALUES LESS THAN (MAXVALUE) TABLESPACE test_space02

);


对上表创建local分区索引(创建后发现索引按表的形式自动分为4个区,对应2个表空间,如果下面语句建立在非分区表上会报错ORA-14016: 必须对 LOCAL 分区索引的基本表进行分区)

create index index_02 on range_example02(hid) local;


对上表创建global分区索引创建后发现索引分为4个区,对应4个表空间

create index tt_01 on RANGE_EXAMPLE02(hid) global

       partition by range(hid)(

       partition i_p1 values less than (1000) tablespace test_space01,

       partition i_p2 values less than (2000) tablespace test_space02,

       partition i_p3 values less than (3000) tablespace test_space03,

       partition i_p4 values less than (maxvalue) tablespace test_space04);



如下两种语句会报错
第一种说明local索引会自动按表分区来创建分区索引,所以创建local索引时不能再带有分区信息
第二种说明global索引创建分区索引必须带有global关键字

create index tt_01 on RANGE_EXAMPLE02(hid) local

       partition by range(hid)(

       partition i_p1 values less than (1000) tablespace test_space01,

       partition i_p2 values less than (2000) tablespace test_space02,

       partition i_p3 values less than (3000) tablespace test_space03,

       partition i_p4 values less than (maxvalue) tablespace test_space04);

create index tt_01 on RANGE_EXAMPLE02(hid)

       partition by range(hid)(

       partition i_p1 values less than (1000) tablespace test_space01,

       partition i_p2 values less than (2000) tablespace test_space02,

       partition i_p3 values less than (3000) tablespace test_space03,

       partition i_p4 values less than (maxvalue) tablespace test_space04);

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

转载于:http://blog.itpub.net/30126024/viewspace-2120096/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值