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错误成因和解决方法

第一部分: 接到开发人员和业务人员的通知,说一个登陆页面不能用了,报错: 2005-01-31 13:59:02,721 [com.aspire.common.dao.OamUserDAO]- -...

OGG-00665 (status = 1502-ORA-01502: index 'index' or partition of such index is in unusable state)

今天同事在新搭建的压力测试环境启动某个 OGG replicat 进程时报了如下错误: 2013-05-14 16:37:41  ERROR   OGG-00665  OCI Error e...

ora-00604错误解决方法

  • 2009-07-31 15:08
  • 14KB
  • 下载

无法向会话状态服务器发出会话状态请求 没有启动 ASP.NET State service错误的解决方法

最近由于需要,又把放下的dotnet重新拾了起来。结果刚引了一个网站就报错如下:无法向会话状态服务器发出会话状态请求。请确保已启动 ASP.NET State service,并且客户端和服务器端口是...

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

原文地址:http://eatpockyboy.blog.163.com/blog/static/116734640201231414154243/  最近做javascript算价格总和的时候遇到...

ORA-12560: TNS: 协议适配器错误的解决方法

原文地址 造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个: 1.监听服务没有起起来。windows平台个一如下操作:开始---程序---管理工具---服务,打开服...

触发器中ORA-04091 变异表错误原因和一般解决方法

在公司写了一个触发器,遇到了ORA-04091 错误,开始以为是触发器逻辑写错误了,后来反复修改和检查后感觉没有错误,可是还报这个错误. 后经过查资料知道原来在触发器中对触发器要更新的表是不能在本表上...

ORA-00020:maximum number of processes (150) exceeded 错误解决方法

用sqlplus有一段时间了,今天碰到了了ORA-00020:maximum number of processes (150) exceeded这个错误,导致不能连接Oracle(同时,PL/SQL...

ORA-28000: the account is locked错误解决方法

ORA-28000: the account is locked-的解决办法 2009-11-11 18:51 ORA-28000: the account is locked 第一步:使...

常见oracle错误代码ORA-xxxxx及其解决方法(持续更行中)

本文地址:ORA-00001: 违反唯一约束条件 主键重复。ORA-00900: 无效 SQL 语句 错误原因:错误换行,错误使用其他数据库或者windows命令 例: SQL> shutdown ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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