ORA-14074: Partition Bound Must Collate Higher Than That Of The Last Partition 处理


今天遇到一个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';

 
PARTITION_NAME HIGH_VALUE
-------------- --------------------------------------------------------------------------------
DBACLASS_QM    MAXVALUE
DBACLASS_Q3    TO_DATE(' 1998-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
DBACLASS_Q2    TO_DATE(' 1998-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
DBACLASS_Q1    TO_DATE(' 1998-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM