修改子分区模板

502 篇文章 4 订阅

要重新定义大量分区表。

首先看 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 
)
update indexes;

还有个问题,国控数据仓库大部分表是 Range-List 复合分区,外层 Range 分区依据月份,从 200401 - 201012,7×12 在加前后两个区间共 86 个分区,也就是每个表上述语句都要执行 86 次,好大工作量啊。看来必须做存储过程了。

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)
);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值