暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase V3 的分区表上的索引状态是unavailable时添加分区失败

原创 张玉龙 2024-05-27
511

概念描述

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_tableindex_type 体现:
- 0:NOT_FOUND - 1:UNAVAILABLE -- 不可用状态 - 2:AVAILABLE -- 正常,可用状态 - 5:ERROR -- 索引创建出错时的状态,出错后索引会被删除 - 6:RESTORE_INDEX_ERROR - 7:UNUSABLE -- 无效状态
复制
  • drop partition ... update global indexes 操作期间会将索引设置为 UNAVAILABLE 状态,导致不支持添加分区。
  • 如果索引是常见的 UNUSABLE 无效状态,是不影响添加分区操作。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论