由索引引发的奇怪的无效条件问题

问题背景:昨天下班时,跟踪程序,突然发现一个奇怪的问题,相同的数据使用like能查到,而使用=就查询不到。比如

select * from emp where empno = 123;  查询不到数据,但是通过名字查询数据,该123数据的确存在。查询条件换成

select * from emp where empno like 123; 后,可以查询到数据,原以为是数据的问题,拷贝出来后,发现数据并没有问题,没有奇怪的字符存在。随后在这条记录上执行了多种操作,都比较奇怪,最后更新empno字段的时候,突然发现更新不上去,数据库报错,对象ID XXX 出错。这下终于找到了问题所在,赶紧查询user_object.object_id,发现这个对象是一个索引,这个索引正好包含empno字段。重建索引后,问题消失。

问题分析:因为中午突然停电,而数据库正在处理emp这个表,很可能突然断电对索引造成了影响。这个问题在需要维护索引的时候暴露出来了,而在正常查询利用到索引时,Oracle没有报错。

问题感谢:感谢俺老婆在这个问题解决过程中起到的关键作用 :)

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wonder4/article/details/767293
文章标签: 数据库 oracle user
个人分类: 原创
想对作者说点什么? 我来说一句

实用数据库的并发控制剖析

2009年09月13日 631KB 下载

没有更多推荐了,返回首页

不良信息举报

由索引引发的奇怪的无效条件问题

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭