oracle表分区增加分区

昨天发现车辆轨迹库的表分区用完了,连夜加了分区,我们存轨迹的这张表建分区的时候按日期建只到2012-10-15,分区名从TAB_GPSBUSHIS_P1....TAB_GPSBUSHIS_P999,从2012-10-15开始的数据就默认都存在了TAB_GPSBUSHIS_P1000,所以现在的任务就是从2012-10-16开始继续建分区。

为了分区的序号连续性,我先将maxvalue对应的分区改了个名

alter table tab_gpsbushis rename partition tab_gpsbushis_p1000 to tab_gpsbushis_pmax

 

增加分区的命令

alter table tab_gpsbushis add  partition TAB_GPSBUSHIS_P1000 values less than (TO_DATE(' 2012-10-16 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'));

Woops,报错了  ORA-14074: partition bound must collate higher than that of the last partition

报这个因为你建了maxvalue的分区,就会报错(我后来把这个分区的数据转移掉了,还是不行,所以我想是不是只要建了maxvalue的分区就不能继续增加分区了)

于是就google,终于找到热心网友的解决之道,先split,把这里的数据转移掉,我这里的情况是2012-10-15发现分区不够了,所以maxvalue对应的分区只存了2012-10-15的轨迹数据(还有一些不合法的日期的数据),我是这样split的:

alter table TAB_GPSBUSHIS
split partition TAB_GPSBUSHIS_PMAX at (TO_DATE(' 2012-10-16 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
into (partition TAB_GPSBUSHIS_P1000, partition TAB_GPSBUSHIS_PMAX)

如果你2012-10-20发现的,你应该就这样写了

alter table TAB_GPSBUSHIS
split partition TAB_GPSBUSHIS_PMAX at (TO_DATE(' 2012-10-21 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
into (partition TAB_GPSBUSHIS_P1000, partition TAB_GPSBUSHIS_PMAX)

再查看表属性中的分区就会发现多了TAB_GPSBUSHIS_P1000这个分区,

查TAB_GPSBUSHIS_PMAX分区下的数据确实就只剩下些非法数据了,就可以全delete掉了

这时候再执行那个add partition操作还是报同样的错,所以我就干脆把maxvalue对应的分区给drop掉了

ALTER TABLE tab_gpsbushis DROP PARTITION tab_gpsbushis_pmax ;

然后再执行add partition操作,ok成功了

然后就拼命加啊,加啊,加到了2012-12-31,就先加到这吧

 

最后又把maxvalue对应的分区加上了,

alter table tab_gpsbushis add partition tab_gpsbushis_pmax values less than (maxvalue).

 

ok,结束

posted on 2012-10-16 09:47  好记性不如烂博客  阅读(13183)  评论(0编辑  收藏  举报