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

Oracle索引UNUSABLE导致表无法操作?一分钟带你排查与修复!

原创 伟鹏 2025-04-28
523

事件回顾

清晨,业务同事急匆匆反馈:某张核心表突然无法更新和删除数据。追溯原因,发现昨日刚刚为该表新建了一个索引。难道“元凶”就是它?让我们抽丝剥茧,揭开谜底。

img_v3_02lp_74d037c7ebb043cabbf59d85cd8d6c3g.jpg

问题现象

表数据无法删除或更新
新建的索引也无法直接删除

排查思路

1. 索引状态检查

首先,查询索引的当前状态

SELECT * FROM dba_INDEXES WHERE OWNER='API_ODS' AND INDEX_NAME='PK_ODS_T_BB_SWTJB_LCB';

结果赫然显示:UNUSABLE —— 索引已不可用!

2. 查看索引创建语句

进一步查看索引的创建语句:
img_v3_02lp_2675623c83e245c1840d089829cdeb4g.jpg

原来,索引在创建时就被设置成了 UNUSABLE,难怪表操作“卡壳”!

3. 尝试删除索引

尝试直接删除索引:

drop index API_ODS.PK_ODS_T_BB_SWTJB_LCB 错误报告 - ORA-02429: 无法删除用于强制唯一/主键的索引 02429. 00000 - "cannot drop index used for enforcement of unique/primary key" *Cause: user attempted to drop an index that is being used as the enforcement mechanism for unique or primary key. *Action: drop the constraint instead of the index.

发现该索引是主键索引
image.png

尝试删除的索引 API_ODS.PK_ODS_T_BB_SWTJB_LCB 是表上主键(PRIMARY KEY)或唯一约束(UNIQUE)的支撑索引。Oracle 不允许直接删除这种索引,因为它用于强制主键或唯一性约束

问题解决

重建该索引

ALTER INDEX API_ODS.PK_ODS_T_BB_SWTJB_LCB REBUILD;

查看索引状态

image.png

通知业务同事再次测试,确认表的更新和删除功能已全部恢复,问题圆满解决!

问题总结

主键或唯一约束的支撑索引不能直接删除,如需删除,必须先移除对应的约束。
索引为 UNUSABLE 时,优先考虑重建,操作高效且风险低。
删除主键/唯一约束及其索引的标准流程如下:

1. 先删除主键/唯一约束

你需要先删除主键或唯一约束,Oracle 会自动删除对应的索引。
查找主键约束名:

SELECT constraint_name FROM dba_constraints WHERE index_name = 'PK_ODS_T_BB_SWTJB_LCB' AND owner = 'API_ODS';

查到的约束名为 PK_ODS_T_BB_SWTJB_LCB,则删除约束:

2、删除约束

ALTER TABLE ODS_T_BB_SWTJB_LCB DROP CONSTRAINT PK_ODS_T_BB_SWTJB_LCB;

3. 然后再删除索引(如果还存在)

通常删除约束后,Oracle 会自动删除该索引。如果没有自动删除,可以再执行:

DROP INDEX API_ODS.PK_ODS_T_BB_SWTJB_LCB;

遇到 Oracle 索引 UNUSABLE 导致表操作异常,切勿慌张!按照上述步骤有条不紊地排查和修复,轻松让业务“满血复活”。

最后修改时间:2025-04-29 09:34:38
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论