Oracle 脚本:修复 status 为 unusable 的 index


有配置工具使用时, 经常会出现以下错误: ORA-01502: index 'xxx.xxxxx' or partition of such index is in unusable state,解决方法为——以 DBA 登录,并运行以下脚本即可

  1. -- 请以 DBA 权限登录,并执行   
  2. -- 将所有 UNUSABLE 状态的 index 修复, rebuild 一下即可   
  3. declare  
  4.   -- 指向所有 UNUSABLE 状态的 index 的游标   
  5.   cursor c is   
  6.     select index_name, owner   
  7.     from dba_indexes   
  8.     where status='UNUSABLE';  
  9.     
  10.   owner dba_indexes.owner%type;  
  11.   index_name dba_indexes.index_name%type;  
  12. begin  
  13.   open c;  
  14.   loop   
  15.        fetch c into index_name, owner;   
  16.        exit when c%notfound;  
  17.          
  18.        execute immediate 'alter index ' || owner || '.' || index_name || ' rebuild';  
  19.   end loop;  
  20.   close c;  
  21. end;  

思考1: 为什么正常的操作会导致某个 index 出现 unusable 的情况?

思考2:怎样在不登录 DBA 的情况下解决这个问题?(我试了一下从 user_indexes 表里可以拿到当前用户所有的 index, 但是无法编辑)

相关内容