昨天發現車輛軌跡庫的表分區用完了,連夜加了分區,我們存軌跡的這張表建分區的時候按日期建只到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,結束