ITPub博客

首页 > 数据库 > Oracle > oracle表分区增加分区

oracle表分区增加分区

Oracle 作者:cngi 时间:2013-01-12 15:39:35 0 删除 编辑

昨天发现车辆轨迹库的表分区用完了,连夜加了分区,我们存轨迹的这张表建分区的时候按日 期建只到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,结束

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21960063/viewspace-1116672/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-06-23