ORA-01502 state unusable错误成因和解决方法(二)

原创 2005年03月01日 16:11:00

SQL> create table t(a number);

Table created.

现在,我们建立一个唯一索引来看看:
SQL> create unique index idx_t on t(a);

Index created.

SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='T';         

no rows selected

SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';

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

SQL> insert into t values(1);

1 row created.

SQL> commit;

Commit complete.

将索引手工修改为unusable状态(模拟发生索引失效的情况):
SQL> alter index idx_t unusable;

Index altered.

SQL>  select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';

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

我们看到这是,已经不能正常往表中插入数据:
SQL> insert into t values(2);
insert into t values(2)
*
ERROR at line 1:
ORA-01502: index 'MISC.IDX_T' or partition of such index is in unusable state

首先,我们通过重建索引(rebuild index)的方法来解决问题:
SQL> alter index idx_t rebuild;

Index altered.

SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';

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

SQL> insert into t values(2);

1 row created.

SQL> commit;

Commit complete.

SQL>

现在我们再次模拟索引失效(unusable状态):
SQL> alter index idx_t unusable;

Index altered.

SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';

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

SQL> insert into t values(3);
insert into t values(3)
*
ERROR at line 1:
ORA-01502: index 'MISC.IDX_T' or partition of such index is in unusable state

然后,看看是否可以通过设置参数skip_unusable_indexes=true来解决问题:
SQL> alter session set skip_unusable_indexes=true;

Session altered.

SQL> insert into t values(3);
insert into t values(3)
*
ERROR at line 1:
ORA-01502: index 'MISC.IDX_T' or partition of such index is in unusable state

SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';

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

SQL> alter index idx_t rebuild;

Index altered.

SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';

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

SQL> insert into t values(3);

1 row created.

SQL> commit;

Commit complete.

SQL>
很显然,对于unique index,通过简单的设置参数是不能解决问题的,要解决unique index 失效的问题,只能通过重建索引来实现。

 

ORA-01502 state unusable錯誤成因和解決方法(一)

接到開發人員和業務人員的通知,說一個登陸頁面不能用了,報錯: 2005-01-31 13:59:02,721 [com.aspire.common.dao.OamUserDAO]- -214:s...
  • s464036801
  • s464036801
  • 2013年04月27日 10:33
  • 466

(转)ORA-01502 state unusable錯誤成因和解決方法

接到開發人員和業務人員的通知,說一個登陸頁面不能用了,報錯: 2005-01-31 13:59:02,721 [com.aspire.common.dao.OamUserDAO]- -214:sel...
  • jackyrongvip
  • jackyrongvip
  • 2013年07月01日 16:21
  • 375

云数据库memcached之热点key问题解决方案

转载地址: https://yq.aliyun.com/articles/8547 背景 在分布式K-V存储系统中,对某个key进行读写时,会根据该key的hash计算出一...
  • qian_348840260
  • qian_348840260
  • 2016年04月19日 11:39
  • 300

小白装Ubuntu之问题记录与解决(win7下安装Ubuntu13.04)

  小白装Ubuntu之问题记录(win7下安装Ubuntu) 一直想摆脱windows,进入Linux的世界。但真要我卸了windows,直接装Ubuntu,还有些害怕。所以,先过渡下...
  • sum_rain
  • sum_rain
  • 2014年08月16日 21:56
  • 3890

React 组件生命周期(注意state不能在cwu方法中修改)

React
  • jw_45840
  • jw_45840
  • 2016年08月17日 10:12
  • 1951

javascript浮点运算偏差的成因及解决方法

原文地址:http://eatpockyboy.blog.163.com/blog/static/116734640201231414154243/ 最近做javascript算价格总和的时候遇到乘法...
  • mochong
  • mochong
  • 2017年03月28日 14:14
  • 65

Java应用中文乱码成因分析及解决方法

Java应用中文乱码成因分析及解决方法 概述:本文深入分析了Java程序设计中【Java编译器javac对java源文件】和【Java虚拟机JVM对class类文件】的编码/解码过程,通过此过程...
  • kevinlifeng
  • kevinlifeng
  • 2013年03月13日 09:45
  • 513

javascript浮点运算偏差的成因及解决方法

原文地址:http://eatpockyboy.blog.163.com/blog/static/116734640201231414154243/  最近做javascript算价格总和的时候遇到...
  • yishuaijun
  • yishuaijun
  • 2014年03月16日 22:31
  • 404

购物车ListView中CheckBox的逻辑处理

最近在做一个项目,在做购物车的时候研究适配器内的CheckBox点击后Activity的数据更新,经过网上查找资料后问题解决,当然,也得感谢一下群里的大神提供了思路。 列表中的CheckBox选中状...
  • zhaowei_zhang
  • zhaowei_zhang
  • 2015年12月18日 16:26
  • 1089

iptables中state模块的连接状态(下)

在前面的文中讲过了iptables防火墙连接状态中的ESTABLISHED状态(http://waringid.blog.51cto.com/65148/512140)。除了这个状态之外,iptabl...
  • xiayufighting
  • xiayufighting
  • 2016年07月31日 21:06
  • 1116
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORA-01502 state unusable错误成因和解决方法(二)
举报原因:
原因补充:

(最多只允许输入30个字)