Oracle⼦分区(subpartition)操作
要重新定义⼤量分区表。
⾸先看 SQL Reference ⼤致了解了 Oracle 的分区修改操作。Alter table 语句的alter_table_partitioning ⼦句可以分为以下⼏类:
全局:modify_table_default_attrs
分区:Modify, Move, Add, Coalesce, Drop, Rename, Truncate, Split, Merge, Exchange
⼦分区:Set Template, Modify, Move, Drop, Rename, Truncate, Split, Merge, Exchange
Move: 将分区、⼦分区移动到新的表空间。
Coalesce: 只适⽤于 hash 分区的表。作⽤是减少⼀个 hash 分区;⽅法是将最后⼀个分区的数据分布到前⾯的分区中,再删除此分区。    Merge: 将两个分区、⼦分区合并为⼀个新分区,并删除两个旧分区。Merge 可以合并 List 和相邻的 Range 分区,只能合并属于同⼀分区的 List ⼦分区。
Exchange: 交换表分区。
我要做的是添加 List 分区、List ⼦分区、修改⼦分区模板。
1. 添加 List 分区:
如果表使⽤ List 分区,且创建了 Default 分区,则此表上⽆法执⾏ Add 分区操作,必须 Split 此表的 Default 分区。Alter table 语句提供了split_table_partition ⼦句。此⼦句的功能是创建两个新分区(新建 Segment,可以指定新的物理属性),移动 partition 指定的分区的数据,满⾜ values 条件的放⼊ into 的第⼀个分区,其余的放⼊第⼆个分区,之后原分区。Oracle 将⾃动 Split Local Index,因此需要重建索引。
下⾯的语句为表 A_CHECKBILL_MONTH 添加了⼀个分区 P_6230000,将原有 P_OTHERS 分区中 COMPANY_ID = 6230000 的数据存储到新分区 P_6230000 ,剩余数据存储到 P_OTHERS。
alter table A_CHECKBILL_MONTH
split partition P_OTHERS values (6230000) into (
partition P_6230000,
partition P_OTHERS
)
update indexes;
2. 添加 List ⼦分区:
Oracle 没有提供⼦分区 Add 操作,因此添加⼦分区必须使⽤ Split 操作。Alter table 语句提供了 split_table_subpartition ⼦句,此⼦句的功能是将⼀个 List ⼦分区 Split 为两个。原理跟 List 分区类似。
下⾯的语句为表 A_BATCH_TURNDAYS 添加了⼀个⼦分区 P_6230000,将原有 P_OTHERS 分区中 COMPANY_ID = 6230000 的数据存储到新分区 P_6230000 ,剩余数据存储到 P_OTHERS。
alter table A_BATCH_TURNDAYS
split subpartition P_200401_SP_OTHERS values (6230000) into (
subpartition P_200401_SP_6230000,
subpartition P_200401_SP_OTHERS
tabletable
)
update indexes;
3. 修改⼦分区模板:
Alter table 语句的 set_subpartition_template ⼦句,作⽤是重新定义(或新建、清除)复合分区表的 list 或 hash ⼦分区模板。执⾏
set_subpartition_template 操作后,表中已创建的⼦分区不受影响,本地、全局索引也不受影响。在此之后的分区操作(例如 add、merge 操作)将使⽤新的模板。
以下语句更新表 A_CHECKBILL_DAY 的⼦分区模板
alter table A_CHECKBILL_DAY
set subpartition template (
subpartition SP_2000000 values (2000000),
subpartition SP_6280000 values (6280000),
subpartition SP_6010000 values (6010000),
subpartition SP_6020500 values (6020500),
subpartition SP_6050000 values (6050000),
subpartition SP_6070000 values (6070000),
subpartition SP_6080400 values (6080400),
subpartition SP_6090000 values (6090000), subpartition SP_6110000 values (6110000), subpartition SP_6170000 values (6170000), subpartition SP_6200000 values (6200000), subpartition SP_6300000 values (6300000), subpartition SP_6250000 values (6250000), subpartition SP_6130000 values (6130000), subpartition SP_6140000 values (6140000), subpartition SP_6160000 values (6160000), subpartition SP_6180000 values (6180000), subpartition SP_6230000 values (6230000), subpartition SP_OTHERS values (default) );

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。