目录
1、移动table的表空间后,基于该table的索引会自动失效UNUSABLE;此时访问或操作该table时,会报ORA-01502异常;
2、对于普通索引,可以通过跳过索引或重建索引来解决ORA-01502异常的问题;
3、对于唯一索引,则只能通过重建索引来解决ORA-01502异常的问题。
4.2设置 skip_unusable_indexes=true;
一、索引失效
1.1 错误信息:
### The error occurred while setting parameters
### SQL: insert into USER_LBL_INF( LBL_ID,LBL_NM,USERID,CRT_TM) values( ?, ? , ? , ? )
### Cause: java.sql.SQLException: ORA-01502: 索引 'BASE_PD.PK_USER_LBL_INF' 或这类索引的分区处于不可用状态
; uncategorized SQLException; SQL state [72000]; error code [1502]; ORA-01502: 索引 'BASE_PD.PK_USER_LBL_INF' 或这类索引的分区处于不可用状态
; nested exception is java.sql.SQLException: ORA-01502: 索引 'BASE_PD.PK_USER_LBL_INF' 或这类索引的分区处于不可用状态
] with root cause
java.sql.SQLException: ORA-01502: 索引 'BASE_PD.PK_USER_LBL_INF' 或这类索引的分区处于不可用状态
二、处理策略
2.1 重建索引
alter index PK_USR_CST_REL_INF rebuild;
2.2 重建所有索引
select 'alter index '||index_name||' rebuild;',s.* from dba_indexes s where owner='数据库账号' and s.status!='VALID';
三、总结
1、移动table的表空间后,基于该table的索引会自动失效UNUSABLE;此时访问或操作该table时,会报ORA-01502异常;
2、对于普通索引,可以通过跳过索引或重建索引来解决ORA-01502异常的问题;
3、对于唯一索引,则只能通过重建索引来解决ORA-01502异常的问题。
四、参考
4.1 创建普通索引
SQL> alter index idxt unusable;
4.2设置 skip_unusable_indexes=true;
SQL> alter session set skip_unusable_indexes=true;
4.3重建索引
SQL> alter index idxt rebuild;
4.4创建唯一索引
SQL> create unique index idx_t on t(a);
4.5查询索引状态:
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDXT';