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,结束