错误信息
【汉】ORA-01502:索引“XXX.XXX”或此类索引的分区处于不可用状态
【英】ORA-01502:index 'string.string' or partition of such index is in unusable state
环境信息
操作系统 | 数据库版本 | 备注 |
CentOS 7 | Oracle 11G |
错误
在执行数据操作(插入数据)时报错。
原因
Oracle在执行DML语句时,检测到该表中的唯一索引已经被设置为不可用(UNUSABLE)状态,此时再插入数据时就会报错。
接下来说的是我个人的看法,理解有问题的话,还望看到这篇文章的您们多多包涵。先说下这个索引不可用,何谓不可用?简单说起来就是不能被使用,但索引的定义还在(索引还存在)。
再来说说唯一索引和普通索引的区别,唯一索引简单理解就是比普通索引多了一个唯一值校验。
如果我们将普通索引设置为不可用,对我们的数据插入、修改和删除不会有任何影响,但是唯一索引呢?想想看,将唯一索引设置成不可用,那么在做这种数据操作(插入、修改和删除)时还要不要校验数据唯一性呢?
这个问题Oracle交给我们使用的人决定,它在检测到这类问题时就直接抛出ORA-01502。
解决方法
从官网的文章来看,解决起来无非就两种。要么删除该索引,要么重建该索引(或分区)。
删除唯一索引
删除索引
drop index TEST_ID_INDEX;
重建索引
重建索引,顾名思义就是重新创建咯,这里没什么可说的。
重建唯一索引
alter index TEST_ID_INDEX rebuild online;
标签:index,01502,XXX,唯一,索引,ORA
From: https://blog.51cto.com/bxbdba/7253204