ORA-01502 state unusable错误成因和解决方法[转]

接到开发人员和业务人员的通知,说一个登陆页面不能用了,报错:

2005-01-31 13:59:02,721 [com.aspire.common.dao.OamUserDAO]- -214:select错误
java.sql.SQLException: ORA-01502 state

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

为了搞清楚索引为什么会失效,以及如何解决,我们做个测试:

首先我们创建一个普通的测试表(非分区表):
SQL> create table t(a number);

Table created.

SQL> select tablespace_name from user_segments where segment_name='T';

TABLESPACE_NAME
------------------------------
DATA_DYNAMIC

SQL>

然后,我们创建一个普通索引

SQL> create index idxt on t(a);

Index created.

SQL> insert into t values(10);

1 row created.

SQL> set linesize 200
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> alter table  t move tablespace tools
  2  /

Table 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       UNUSABLE

SQL>
我们看到,当使用类似 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=true;
SQL> alter session set skip_unusable_indexes=true;

Session altered.

SQL> insert into t values(11);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t;

         A
----------
         1
         2
         3
         4
         5
        10
        11

7 rows selected.

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>
现在我们看到,这个索引的状态虽然还是“UNUSABLE”但是,通过设置“alter session set skip_unusable_indexes=true;”,
我们已经可以访问这个表了,但是请注意,这种情况下,这个索引是不可用的,也就是说优化器在考虑是否要使用索引时是不考虑这个所以的。

方法2:通过常见所以彻底解决这个问题
首先,先设置 “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>
看来,重建索引才是解决这类问题的彻底的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掷骰子游戏和条件语句

1.java掷骰子游戏 public class iftest {public static void main(String[] args) {System.out.println("#####掷骰子游戏#####");System.out.println("#################");//投掷三个色子看看今天手气怎么样?int i (int)(6*Math.random()1);…

如何来看书学习

我们做网络的,就是运用各种技术满足实际的通信需求,对应的专业书籍很多,每年都有新书出来,基本上RFC出来之后1年,厂家就会在软件上加载这些功能,再过2年,原文档就很全面了,之后2年&a…

加标签的continue用法

1.加标签的continue,类似于C语言的goto语句 转载于:https://www.cnblogs.com/ma1998/p/11444868.html

游标、过程、函数、包

一)游标: 1)每次声明、打开、推进、关闭游标declarecursor c is select .........;--声明beginopen c;--打开loopexit when..........;fetch c into .........;--推进...........end loop;close c;--关闭end; 2&#…

“退学吧,开始行动”——埃里森在耶鲁的演讲(历史上最牛的演讲)

这篇演讲被网民称为“历史上最牛的演讲”,这是一次可以列入搞笑堂的演讲,但同时也是可以让我们好好反思的演讲。耶鲁的毕业生们,我很抱歉——如果你们不喜欢这样的开场。我想请你们为我做一件事。请你——好好看一看周围,看一看站…

前端 / JavaScript 导出PDF的实践

1.库:jspdf ,自己定义一个高宽,如A4的210mm297mm 2.让设计给背景图(包括:页眉页脚),水印图(背景透明,高宽和你的PDF单页一致)以及很多,能设计给的…

结构体变量、结构指针变量、结构数组作为函数的参数

结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析 struct stud {long int num;float score; }; /*结构体变量作为函数的参数,修改之后的成员值不能返回到主调函数*/void funvr(struct stud t) {t.num2000101;t.score71.0; }/*结构体数组作为函数的参数…

(求助)請問DE2-70版子 音樂合成器

您好 我是剛學習VERILOG的新手 我剛碰到一個專案 是DE2-70版子裡的 DE2_70_Music_Synthesizer 我有抓到音樂裡的音階 比如Do Re Mi Fa Sol La Ti Do等8個基本音 但有的音快有的音慢 我只能用數字來衡量他的數字或是做筆記來計入 是可以的 而且一定可以抓到 但有個問題 在程式…

英国Carmarthen Learning Centre校长Mr Stuart来华访问,与荣新IT培训中心达成教学合作关系...

英国Carmarthen Learning Centre校长Mr Stuart来华访问,与荣新IT培训中心达成教学合作关系 2008年9月4日,英国Carmarthen Learning Centre校长Mr Stuart来华访问。Carmarthen Learning Centre所处于英国伦敦,是一家英国著名的培训学校&#x…

win10 桌面快捷键技术

win 10 的 快捷键技术,使用还是挺流畅舒适的: Windows10技术新增键盘快捷键汇总: 1、贴靠窗口:Win 左/右> Win 上/下>窗口可以变为1/4大小放置在屏幕4个角落 2、切换窗口:Alt Tab(不是新的,但任务切…

Service Broker实现发布-订阅(Publish-Subscribe)框架

Service Broker实现发布-订阅(Publish-Subscribe)框架Service Broker 实现一套完整的发布-订阅方案,其中author 发送Service Broker Message(又称article)到发布者(Publisher)。发布者负责分发消…

设计数据服务:为报表服务提供服务接口

功能: 为报表服务提供服务接口 1.技术组件 binlog canal kafka es 2. 服务器部署规划 3.整体架构 4.参考资料:https://www.jianshu.com/p/3ebab93ff075https://www.jianshu.com/p/e841e69a5e76https://www.jianshu.com/p/5acb30ec8347https://www.jianshu.com/p/2c17c75486f3 转…

(转载)简洁、明晰!数据库设计三大范式应用实例剖析

(转载http://bbs.database.ccidnet.com/read.php?tid325895) 简洁、明晰!数据库设计三大范式应用实例剖析 引言OL~eR{q ;iC,$vZ 0} 数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时&#xf…

CanvasRenderingContext2D.drawImage()无效,not working

我的技术框架:react,如若不采用堵塞方式,即,const myimg await loadImage(icon28) ctx.drawImage(myimg,0,0, 100, 100) 而用.then(),如下,loadImage(icon28).then((image) > { ctx.drawImage(image,0,…

选择软路由的七大理由

linux稳定、快速、安全可靠、性能卓越! 但在这之前,很多的电脑里装的都是Windows系统,linux系统只用在高端领域。现在网上流行的路由软件大多是基于linux系统开发,具有以下几点优越性:第一、便宜现在市面上&#xff0c…

kafka start bat

start D:\Homes\kafka_2.12-2.3.0\bin\windows\kafka-server-start.bat D:\Homes\kafka_2.12-2.3.0\config\server.properties 转载于:https://www.cnblogs.com/zeenzhou/p/11455846.html

你所应该知道的云计算

感觉像是云计算的一个推崇者,为云计算在做广告,Robyn Peterson的文章What you need to know about cloud computing。 云计算可以保证我们不再受硬件的困扰,真的是这样吗? 在为一个小型商业或者大型企业构建IT结构的时候&#xff…

递归算法

一、递归的核心思想就是自己调用自己,一般来说能够用递归解决的问题应满足3个条件: 1.需要解决的问题可以转化为一个或多个子问题来求解,而这些子问题的求解方法与原问题完全相同,只是在数量和规模上不同。 2.递归调用的次数必须是…

malloc coredump(宕)的问题

最近公司一个产品在AIX5.3上,运行若干天后,经常coredump,反复加日志后,逐渐定位到是调用strdup函数后,没有释放空间所导致。 在AIX5.3进行了测试,发现连续malloc后的现象如下:1&#xff…

MySQL5.5升级至5.7

一、下载免安装MySQL5.7包 下载页面 下载链接 二、替换mysql的安装目录 解压mysql5.7 tar -zxf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz -C /usr/mysql5.7 如果之前的mysql目录是链接的方式创建的话,那么只需要取消链接,从新做一下链接就可以了 如…