概念描述
OceanBase V3.2.4 的分区表上的索引状态是unavailable时添加分区失败,报错:
ORA-00600: internal error code, arguments: -4007, alter partitions when index status is unavailable not supported
一次分区表的分区维护,这个分区表上存在全局索引,维护操作是先按照数据保留策略清理历史分区(drop partition … update global indexes),再执行添加分区操作(add partition),因为清理历史分区时还需要维护全局索引,导致分区清理时间过长,所以就同时进行清理分区和添加分区操作,最终出现如上报错。
测试验证
- 分区表的索引情况,有一个全局普通索引
[admin@obtest ~]$ eoba ind2 TBCS.ODB_TESTPAT
Display indexes where table or index name matches TBCS.ODB_TESTPAT ....+————-+——-+————-+——————————+——+————-+——+| tenant_name | owner | table_name | index_name | pos# | column_name | dsc |
+————-+——-+————-+——————————+——+————-+——+
| testf | TEST | ODB_TESTPAT | IDX_CS_ODB_TESTPAT_ENDDATE | 1 | ENDDATE | NULL |
| testf | TEST | ODB_TESTPAT | IDX_CS_ODB_TESTPAT_RECOID | 1 | RECOID | NULL |
| testf | TEST | ODB_TESTPAT | IDX_CS_ODB_TESTPAT_STARTDATE | 1 | STARTDATE | NULL |
| testf | TEST | ODB_TESTPAT | PK_CS_ODB_TESTPAT | 1 | RECOID | NULL |
| testf | TEST | ODB_TESTPAT | PK_CS_ODB_TESTPAT | 2 | OID | NULL |
| testf | TEST | ODB_TESTPAT | PK_CS_ODB_TESTPAT | 3 | IDU | NULL |
| testf | TEST | ODB_TESTPAT | PK_CS_ODB_TESTPAT | 4 | RECDATE | NULL |
| testf | TEST | ODB_TESTPAT | PK_CS_ODB_TESTPAT | 5 | REGION | NULL |
+————-+——-+————-+——————————+——+————-+——+
+————-+——-+————-+——————————+———+——+——–+——+——–+————+
| tenant_name | owner | table_name | index_name | idxtype | uniq | status | part | degree | visibility |
+————-+——-+————-+——————————+———+——+——–+——+——–+————+
| testf | TEST | ODB_TESTPAT | IDX_CS_ODB_TESTPAT_ENDDATE | NORMAL | NO | VALID | YES | 1 | VISIBLE |
| testf | TEST | ODB_TESTPAT | IDX_CS_ODB_TESTPAT_RECOID | NORMAL | NO | VALID | NO | 1 | VISIBLE |
| testf | TEST | ODB_TESTPAT | IDX_CS_ODB_TESTPAT_STARTDATE | NORMAL | NO | VALID | YES | 1 | VISIBLE |
| testf | TEST | ODB_TESTPAT | PK_CS_ODB_TESTPAT | NORMAL | YES | VALID | YES | 1 | VISIBLE |
+————-+——-+————-+——————————+———+——+——–+——+——–+————+
- 执行分区清理操作
alter table TEST.ODB_TESTPAT drop partition PART_991_202306 update global indexes;
- 同时执行分区添加操作,出现报错
alter table TEST.ODB_TESTPAT add partition PART_991_202401 values less than(991,TO_DATE(' 2024-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'));
ORA-00600: internal error code, arguments: -4007, alter partitions when index status is unavailable not supported
- 等待分区清理完成后就可以成功添加分区
知识扩展
- OceanBase V3.2.4 的索引状态有如下几种,通过视图
oceanbase.__all_virtual_table的index_type体现:
- 0:NOT_FOUND
- 1:UNAVAILABLE -- 不可用状态
- 2:AVAILABLE -- 正常,可用状态
- 5:ERROR -- 索引创建出错时的状态,出错后索引会被删除
- 6:RESTORE_INDEX_ERROR
- 7:UNUSABLE -- 无效状态
drop partition ... update global indexes操作期间会将索引设置为UNAVAILABLE状态,导致不支持添加分区。- 如果索引是常见的
UNUSABLE无效状态,是不影响添加分区操作。想了解更多干货,可通过下方扫码关注

可扫码添加上智启元官方客服微信👇

17认证网








