Oracle 12c New Feature: Partition增强(二) online在线维护

2017-01-04 10:32:01来源:作者:ANBOB人点击

随着数据的逐渐的增长, 在目前这个数据”爆炸式”增长的趋势下, 也许最初设计的非分区表需要转换为分区, 以前如果不停业务的话可以使用在线重定义, 但是在12c 中alter table增加了online clause, 在上篇记录了维护多分区的增强, 这篇继续记录12c在分区维护上的增强, 有没有遇到过需求把现有的非分区表转换为分区表, 同时需要考虑表上现有的索引, 又不停业务? 在12c 中成为现实.

— demo —

# 创建非分区表同时创建三个索引(位图/分区列在前/不含分区列)

create table anbob_t2 as select * from dba_Objects where object_id is not null;create index idx_oid on anbob_t2 ( object_id );create index idx_ctime_oname on anbob_t2 ( created, object_name );create bitmap index idx_b_otype on anbob_t2 (object_type);SQL> @ind anbob_t2Display indexes where table or index name matches %anbob_t2%...TABLE_OWNER TABLE_NAME INDEX_NAME POS# COLUMN_NAME DSC------------- ------------ ------------------- ---- ------------------------------ ----ANBOB ANBOB_T2 IDX_B_OTYPE 1 OBJECT_TYPE IDX_CTIME_ONAME 1 CREATED 2 OBJECT_NAME IDX_OID 1 OBJECT_IDINDEX_OWNER TABLE_NAME INDEX_NAME IDXTYPE UNIQ STATUS PART TEMP H LFBLKS ------------- ------------ ------------------- ---------- ---- -------- ---- ---- -- ---------- ANBOB ANBOB_T2 IDX_B_OTYPE BITMAP NO VALID NO N 2 4 ANBOB_T2 IDX_CTIME_ONAME NORMAL NO VALID NO N 3 576 ANBOB_T2 IDX_OID NORMAL NO VALID NO N 2 171

# 转换当前表为分区以created字段, interval分区表

SQL> alter table anbob_t2 modify 2 partition by range (object_id) interval (10000) 3 ( 4 partition p1 values less than (20000) 5 ) online 6 update indexes 7 ( idx_oid local, 8 idx_ctime_oname global partition by range (created) 9 ( 10 partition ix2_p1 values less than (date '2014-08-01'), 11 partition ix2_p2 values less than (maxvalue) 12 ) 13 );Table created.SQL> @tabpart anbob_t2TABLE_OWNE TABLE_NAME POS COM PARTITION_NAME NUM_ROWS SUBPARTITION_COUNT HIGH_VALUE_RAW ---------- ------------ ---------- --- -------------------- ---------- ------------------ ------------------ANBOB ANBOB_T2 1 NO P1 0 20000 ANBOB 2 NO SYS_P1498 0 30000 ANBOB 3 NO SYS_P1499 0 40000 ANBOB 4 NO SYS_P1500 0 50000 ANBOB 5 NO SYS_P1501 0 60000 ANBOB 6 NO SYS_P1502 0 70000 ANBOB 7 NO SYS_P1503 0 80000 7 rows selected.SQL> @ind anbob_t2Display indexes where table or index name matches %anbob_t2%...TABLE_OWNER TABLE_NAME INDEX_NAME POS# COLUMN_NAME DSC------------- ------------- -------------------- ---- ------------------------------ ----ANBOB ANBOB_T2 IDX_B_OTYPE 1 OBJECT_TYPE IDX_CTIME_ONAME 1 CREATED 2 OBJECT_NAME IDX_OID 1 OBJECT_IDINDEX_OWNER TABLE_NAME INDEX_NAME IDXTYPE UNIQ STATUS PART TEMP H LFBLKS ------------- ------------- -------------------- ---------- ---- -------- ---- ---- -- ---------- ANBOB ANBOB_T2 IDX_B_OTYPE BITMAP NO N/A YES N 2 8 ANBOB_T2 IDX_CTIME_ONAME NORMAL NO N/A YES N 3 619 ANBOB_T2 IDX_OID NORMAL NO N/A YES N 2 174

Note:

一条命令把原分区表转换成了分区表,同时列上的索引还保护有效, 上面使用了ONLINE关键字, 当然除了这里在线非分区转换分区外, 分区表也可以online MOVE, 这个特性就不再演示了.

上面的命令中还使用了update indexes 选项, 可以使用local, global选项指定现有的索引创建成对应的local还是global分区; 如果只带了update index ,没有指写local 或global选项就像上面的位图索引, ORACLE有自己的索引转换规则:

原Nonprefixed索引保留着原来的特性,如非分区,全局分区索引都不改变; 原Prefixed索引转换为LOCAL索引; 位图索引转换为local索引,无论是否是prefixed索引.

有一些限制以下的表不支持:

不能指定该选项对于IOT table;domain index存在的表;不能转换非分区表为11g引入的reference-partitioned的分区表;

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台