ORA-01502: 索引或这类索引的分区处于不可用状态 [已解决]

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41885819/article/details/102503570

同事迁移数据库后,在新的环境下,部分索引状态变为UNUSABLE,即不可使用的非正常状态。造成这个问题的原因可能是因为根据用户导出DMP文件时,表对象存在于不同的表空间中,我记得第一次在命令行导入该表时还出了一些问题的。出现这种问题,想要直接删除该索引还删不掉,弹出框显示:You cannot delete primary/unique key indexes。此时该表中存在大量的数据,无法删除,测试rebuild也失败了。

通过以下SQL可以查询哪些索引是无效的:

select index_name from  user_indexes where status <> 'VALID';

查询结果显示该索引确实处于不可用状态,没毛病。
接着,重新打开一个plsql窗口,并且以system用户登录,new一个sql window,把下面内容黏贴进去,执行一下就可以解决。

declare
  -- 指向所有 UNUSABLE 状态的 index 的游标
  cursor c is 
    select index_name, owner 
    from dba_indexes 
    where status='UNUSABLE';  
  owner dba_indexes.owner%type;
  index_name dba_indexes.index_name%type;
begin
  open c;
  loop 
       fetch c into index_name, owner; 
       exit when c%notfound;       
       execute immediate 'alter index ' || owner || '.' || index_name || ' rebuild';
  end loop;
  close c;
end;

记住一定要使用DBA权限的用户登录,再执行。

猜你喜欢

转载自blog.csdn.net/qq_41885819/article/details/102503570