目录
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';
当Oracle数据库中的表被移动到不同表空间后,其索引可能会变为不可用,导致ORA-01502异常。解决这个问题的方法包括重建索引。对于普通和唯一索引,可以使用`ALTER INDEX ... REBUILD`语句来恢复。此外,可以通过设置`skip_unusable_indexes=true`来跳过不可用索引。确保及时检查并修复索引状态,以保证数据库的正常运行。
5754

被折叠的 条评论
为什么被折叠?



