step3_drop_par
这个部分可以参考如下的脚本来完成,会删除掉其它的分区,只保留默认分区,当然如果分区规则有变化也需要适当的做一些变更。这个部分完全可以用shell写成批处理脚本。
set pages 0
set linesize 150
set feedback off
select ‘alter table ‘||table_name||‘ drop partition ‘||partition_name||‘ ;‘ from user_tab_partitions where table_name=‘XXXXXX‘ and partition_name not like ‘%MAXVALUE%‘
如果分区键值为1个,就可以用shell这么做。如果默认分区有一定的变化,可以作为输入参数灵活变更。 for i in {0..199} do echo ‘alter table ‘$1‘ split partition ‘$2‘ at(‘$i‘) into (partition P‘$i‘,partition ‘$2‘);‘ done
如果分区键值为2个,类似下面的方式。注意ENTITY_KEY是按照5n的方式来递增的。
for i in {0..199}
do
for ((j=5;j<=100;j=$j+5))
do
echo ‘alter table ‘$1‘ split partition ‘$2‘ at(‘$i‘,‘$j‘) into (partition P‘$i‘_C‘$j‘,partition ‘$2‘);‘
done
done
脚本运行后的效果如下,就完全可以脱离数据库环境来完成。
alter table XXXXX split partition PMAXVALUE at(37) into (partition P37,partition PMAXVALUE);
.....
alter table XXXXX split partition PMAXVALUE_CMAXVALUE at(198,90) into (partition P198_C90,partition PMAXVALUE_CMAXVALUE);
....
step7_post_par
关于分区的检查和验证,可以根据具体的业务逻辑来判断。比如我可以使用如下的方式来做一个简单验证。
这个脚本能够得到一个数据条数的列表,能够清晰的判断出来,不用全部分区的数据都查,可以根据自己的选择针对性来查就可以了。
set pages 0
set linesize 150
set feedback off
select ‘alter table ‘||table_name||‘ drop partition ‘||partition_name||‘ ;‘ from user_tab_partitions where table_name=‘XXXXX‘ and partition_name not like ‘%MAX%‘;