ORA-01502错误成因和解决方法

Posted HuSam

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORA-01502错误成因和解决方法相关的知识,希望对你有一定的参考价值。

这个错误是由于索引失效造成的,重建索引后,问题就解决了。

我们看到,当使用类似 alter table xxxxxx move tablespace xxxxxxx 命令后,索引就会失效。

当然,作为测试,也可以直接使用alter index idxt unusable;命令使索引失效,例如:
SQL> alter index idxt unusable;

Index altered.

SQL>

在这种情况下,我们向表中插入数据看看是什么情况:
SQL> insert into t values(11);
insert into t values(11)
*
ERROR at line 1:
ORA-01502: index ‘MISC.IDXT‘ or partition of such index is in unusable state


SQL> 
我们看到,这时就出现了常见的“ORA-01502: index ‘XXXXXXXX‘ or partition of such index is in unusable state”错误。

检查一下索引状态,我们会注意到索引已经是“UNUSABLE”了。
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name=‘IDXT‘;

INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME                TABLE_TYPE  STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDXT                           NORMAL                      DATA_DYNAMIC                   TABLE       UNUSABLE

SQL>

首先,先设置 “skip_unusable_indexes=false”,也就是不跳过失效索引
SQL> alter session set skip_unusable_indexes=false;

Session altered.

SQL>

然后重建这个失效的索引
SQL> alter index idxt rebuild;

Index altered.

SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name=‘IDXT‘;

INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME                TABLE_TYPE  STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDXT                           NORMAL                      DATA_DYNAMIC                   TABLE       VALID

SQL> 
我们看到重建索引后,索引的状态就正常了。

现在插入数据,看看是正常:
SQL> insert into t values(12);

1 row created.

SQL> commit;

Commit complete.

SQL> 
看来,重建索引才是解决这类问题的彻底的方法。

以上是关于ORA-01502错误成因和解决方法的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 遇到的问题

空悬指针和野指针

跨域问题成因和解决方案

CSS - 高度坍塌和外边距溢出问题及解决方法

电脑问题

广播风暴的成因以及解决办法有哪些?