trouble shooting:ORA-01502:失效索引导致数据库报错


在对表进行操作的时候发生由于索引失效导致查询失败的问题:

ORA-01502: index 'xxxxx' or partition of such index is in unusable state


这个问题在10g应该很少出现,原因是因为skip_unusable_indexes 参数会让你的操作绕开失效的索引:

你可以禁用掉这个参数,然后对表dml操作,就会报错:

alter session set skip_unusable_indexes = false;


select语句中如果指定了hint走这个失效索引,那么也回报上面的错误,解决方法是重建索引还是改sql语句去掉hint?

答案是都行,但是如果面对的是线上系统,前者虽然是最终要执行的操作,但是对于大表来说无法短时间解决问题,,后者需要修改程序,重新编译发布代码...这根本无法马上实施....。

当然我们也可以直接把索引干掉,但是记得先备份创建的脚本,要不可没有后悔药啊。

这里要告诉大家除了干掉索引之外另一种临时对策:把是失效的索引改名:alter index xxx rename to iiii,oracle就会忽视hint从现有的计划中找个最优的去执行,等到业务不忙的时候去开并行和online重建索引吧。

你可能感兴趣的:(ORACLE,运维)