현상
Partition Table(파티션 테이블)의 중간값을 가지는 파티션을 Drop한 후 다시 동일한 값을 가진 파티션을 Add 할 때 TBR-7163: Specified partition values are incorrect. 라는 오류가 발생하였습니다.
원인
Tibero에서는 Partition Table에서 중간 구간의 파티션을 제거한 후, 해당 구간만 다시 추가하려고 할 경우 기존 파티션 간의 값 순서를 유지해야 하는 제약 때문에 오류가 발생합니다.
해결
1. 파티션 테이블 생성
drop table tibero.test;
create table tibero.test (logtime char(12))
partition by range (logtime)
(
partition p2017 values less than ('2017XXXXXXXX'),
partition p2018 values less than ('2018XXXXXXXX'),
partition p2019 values less than ('2019XXXXXXXX')
);
SQL
복사
2. 중간값을 가지는 파티션 Drop
alter table tibero.test drop partition p2018;
SQL
복사
3. Drop 한 중간값 파티션 다시 추가 시 TBR-7163 오류 발생
alter table tibero.test add partition p2018 values less than ('2018XXXXXXXX') ;
SQL
복사
⇒ TBR-7163: Specified partition values are incorrect. 오류 발생
3-1. 해결방안 1
중간값 파티션보다 큰 파티션 모두 삭제 후, Drop 한 중간값 파티션 다시 추가합니다.
alter table tibero.test drop partition p2019;
alter table tibero.test add partition p2018 values less than ('2018XXXXXXXX') ;
SQL
복사
테스트 결과
SQL> drop table tibero.test;
TBR-7071: Schema object 'TIBERO.TEST' was not found or is invalid.
SQL> create table tibero.test (logtime char(12))
partition by range (logtime)
(
partition p2017 values less than ('2017XXXXXXXX'),
partition p2018 values less than ('2018XXXXXXXX'),
partition p2019 values less than ('2019XXXXXXXX')
); 2 3 4 5 6 7
Table 'TIBERO.TEST' created.
SQL> alter table tibero.test drop partition p2018;
Table 'TIBERO.TEST' altered.
SQL> alter table tibero.test add partition p2018 values less than ('2018XXXXXXXX') ; TBR-7163: Specified partition values are incorrect.
SQL> alter table tibero.test drop partition p2019;
Table 'TIBERO.TEST' altered.
SQL> alter table tibero.test add partition p2018 values less than ('2018XXXXXXXX') ;
Table 'TIBERO.TEST' altered.
SQL
복사
3-2. 해결방안 2
중간값 파티션보다 큰 바로 위의 파티션 Split 하여 중간값 파티션을 대체합니다.
alter table tibero.test split partition p2019 at ('2018XXXXXXXX')
into (partition p2018, partition p2019);
SQL
복사
테스트 결과
SQL> drop table tibero.test;
TBR-7071: Schema object 'TIBERO.TEST' was not found or is invalid.
SQL> create table tibero.test (logtime char(12))
partition by range (logtime)
(
partition p2017 values less than ('2017XXXXXXXX'),
partition p2018 values less than ('2018XXXXXXXX'),
partition p2019 values less than ('2019XXXXXXXX')
); 2 3 4 5 6 7
Table 'TIBERO.TEST' created.
SQL> alter table tibero.test drop partition p2018;
Table 'TIBERO.TEST' altered.
SQL> alter table tibero.test add partition p2018 values less than ('2018XXXXXXXX') ;
TBR-7163: Specified partition values are incorrect.
SQL> alter table tibero.test split partition p2019 at ('2018XXXXXXXX')
into (partition p2018, partition p2019);
Table 'TIBERO.TEST' altered.
SQL
복사
4. 해결방안 적용 후, 최종 파티션 정보 조회
SELECT TABLE_NAME, PARTITION_NAME, BOUND, PARTITION_NO FROM DBA_TBL_PARTITIONS;
TABLE_NAME PARTITION_NO PARTITION_NAME BOUND
----------------------- ---------------- -------------------
TEST 1 P2017 '2017XXXXXXXX'
TEST 2 P2018 '2018XXXXXXXX'
TEST 3 P2019 '2019XXXXXXXX'
3 rows selected.
SQL
복사