今天遇到一個Oracle增加分區的問題,以下是我處理的步驟:
ORA-14074: 分區界限必須調整為高於最后一個分區界限
1、錯誤展示
收到運維人員反饋,最新查詢收費信息變慢,初步判定,由於2020年新的分區沒有維護,導致數據查詢2020年的業務數據執行慢,
SQL>select table_name , partition_name,high_value from user_tab_partitions where table_name='JW_DF_FXMXB'
TABLE_NAME PARTITION_NAME HIGH_VALUE
-------------------- ------------------------------ --------------------------------------------------------------------------------
JW_DF_FXMXB P201912 TO_DATE(' 2011-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
JW_DF_FXMXB P201911 TO_DATE(' 2011-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
JW_DF_FXMXB P201910 TO_DATE(' 2011-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
JW_DF_FXMXB PMAX TO_DATE(' 2012-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
SQL> ALTER TABLE JW_DF_FXMXB ADD PARTITION P202001 VALUES LESS THAN ('202002');;
ALTER TABLE JW_DF_FXMXB ADD PARTITION P202001 VALUES LESS THAN ('202002');
*
ERROR at line 1:
ORA-14074: partition bound must collate higher than that of the last partition
2、解決:
因為表上已經有了pmax最大分區,這個時候oracle是不直接允許增加分區的. 而是通過拆分分區實現,只要只用下列語句增加分區就不會發生該錯誤.
————————————————
方式一:SPLIT
1)SPLIT PARTITION
ALTER TABLE JW_DF_FXMXB SPLIT PARTITION pmax AT (202001) INTO (PARTITION P60, PARTITION PMAX) UPDATE GLOBAL INDEXES ;
ALTER TABLE JW_DF_FXMXB SPLIT PARTITION pmax AT (202002) INTO (PARTITION P70, PARTITION PMAX) UPDATE GLOBAL INDEXES ;
ALTER TABLE JW_DF_FXMXB SPLIT PARTITION pmax AT (202003) INTO (PARTITION P80, PARTITION PMAX) UPDATE GLOBAL INDEXES ;
ALTER TABLE JW_DF_FXMXB SPLIT PARTITION pmax AT (202004) INTO (PARTITION P90, PARTITION PMAX) UPDATE GLOBAL INDEXES ;
ALTER TABLE JW_DF_FXMXB SPLIT PARTITION pmax AT (202005) INTO (PARTITION P100, PARTITION PMAX) UPDATE GLOBAL INDEXES ;
但是這種用的實在別扭。
方式二:DROP PARTITION
直接刪除PMAX PARTITION,再執行ADD PARTITION就行,簡單實用。
ALTER TABLE JW_DF_FXMXB DROP PARTITION "PMAX" UPDATE GLOBAL INDEXES
ALTER TABLE JW_DF_FXMXB ADD PARTITION "XX" VALUES LESS THAN (100) ;
ALTER TABLE JW_DF_FXMXB ADD PARTITION "PMAX" VALUES LESS THAN (MAXVALUE);
————————————————
3、英文引用
While adding a partition to a partitioned table, got below error.
SQL> alter table dbaclass_QTAB add partition dbaclass_q4 VALUES LESS THAN (TO_DATE(’01-APR-1998′,’DD-MON-YYYY’));
alter table dbaclass_QTAB add partition dbaclass_q4 VALUES LESS THAN (TO_DATE(’01-APR-1998′,’DD-MON-YYYY’))
SOLUTION:
This error occurs when we are trying to add a partition between two partitions where MAXVALUE is defined for that table.
ERROR at line 1:
ORA-14074: partition bound must collate higher than that of the last partition
So to avoid this error, the need to split the partition, instead of adding.
SQL> select partition_name,high_value from dba_tab_partitions where table_name='DBACLASS_QTAB';