- 浏览: 1001786 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
ORA-01502 state unusable错误成因和解决方法(一) 接到开发人员和业务人员的通知,说一个登陆页面不能用了,报错:
2005-01-31 13:59:02,721 [com.aspire.common.dao.OamUserDAO]- -214:select错误
java.sql.SQLException: ORA-01502 state
这个错误是由于索引失效造成的,重建索引后,问题就解决了。
为了搞清楚索引为什么会失效,以及如何解决,我们做个测试:
首先我们创建一个普通的测试表(非分区表):
SQL> create table t(a number);
Table created.
SQL> select tablespace_name from user_segments where segment_name='T';
TABLESPACE_NAME
------------------------------
DATA_DYNAMIC
SQL>
然后,我们创建一个普通索引
SQL> create index idxt on t(a);
Index created.
SQL> insert into t values(10);
1 row created.
SQL> set linesize 200
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDXT';
INDEX_NAME INDEX_TYPE TABLESPACE_NAME TABLE_TYPE STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDXT NORMAL DATA_DYNAMIC TABLE VALID
SQL>
模拟索引是失效的情况:
SQL> alter table t move tablespace tools
2 /
Table altered.
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDXT';
INDEX_NAME INDEX_TYPE TABLESPACE_NAME TABLE_TYPE STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDXT NORMAL DATA_DYNAMIC TABLE UNUSABLE
SQL>
我们看到,当使用类似 alter table xxxxxx move tablespace xxxxxxx 命令后,索引就会失效。
当然,作为测试,也可以直接使用alter index idxt unusable;命令使索引失效,例如:
SQL> alter index idxt unusable;
Index altered.
SQL>
在这种情况下,我们向表中插入数据看看是什么情况:
SQL> insert into t values(11);
insert into t values(11)
*
ERROR at line 1:
ORA-01502: index 'MISC.IDXT' or partition of such index is in unusable state
SQL>
我们看到,这时就出现了常见的“ORA-01502: index 'XXXXXXXX' or partition of such index is in unusable state”错误。
检查一下索引状态,我们会注意到索引已经是“UNUSABLE”了。
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDXT';
INDEX_NAME INDEX_TYPE TABLESPACE_NAME TABLE_TYPE STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDXT NORMAL DATA_DYNAMIC TABLE UNUSABLE
SQL>
对于普通表中的不同索引(非唯一索引),我们有两种方法解决这个问题。
方法一:设置 skip_unusable_indexes=true;
SQL> alter session set skip_unusable_indexes=true;
Session altered.
SQL> insert into t values(11);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t;
A
----------
1
2
3
4
5
10
11
7 rows selected.
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDXT';
INDEX_NAME INDEX_TYPE TABLESPACE_NAME TABLE_TYPE STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDXT NORMAL DATA_DYNAMIC TABLE UNUSABLE
SQL>
现在我们看到,这个索引的状态虽然还是“UNUSABLE”但是,通过设置“alter session set skip_unusable_indexes=true;”,
我们已经可以访问这个表了,但是请注意,这种情况下,这个索引是不可用的,也就是说优化器在考虑是否要使用索引时是不考虑这个所以的。
方法2:通过常见所以彻底解决这个问题
首先,先设置 “skip_unusable_indexes=false”,也就是不跳过失效索引
SQL> alter session set skip_unusable_indexes=false;
Session altered.
SQL>
然后重建这个失效的索引
SQL> alter index idxt rebuild;
Index altered.
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDXT';
INDEX_NAME INDEX_TYPE TABLESPACE_NAME TABLE_TYPE STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDXT NORMAL DATA_DYNAMIC TABLE VALID
SQL>
我们看到重建索引后,索引的状态就正常了。
现在插入数据,看看是正常:
SQL> insert into t values(12);
1 row created.
SQL> commit;
Commit complete.
SQL>
看来,重建索引才是解决这类问题的彻底的方法。
发表评论
-
sys.dbms_transaction.local_transaction_id出现的问题
2012-07-20 11:54 3300何時會觸發DBMS_TRANSACTION.LOCAL_TRA ... -
ORACLE 11GR2 OEM配置出错解决
2012-07-14 19:21 5084错误描述如下: 2012-7-14 18:23:11 ... -
ORA11G ORA-00845 错误
2012-06-26 13:39 833Oracle 11g的Linux版本在修改了MEMORY_TA ... -
oracle.net.common.NetGetEnv.getDNSDomain
2012-06-07 01:48 1147今天安装LINUX AS 4和ORACLE 10.2,安装成功 ... -
emctl 提示 ora-28001 口令已经实效 解决办法
2011-10-24 00:41 1831What to do when Enterprise Mana ... -
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262)
2011-05-20 17:29 6958报错信息如下: 2011-03-09 11:06:10 Th ... -
Oracle HowTo:如何在Linux上扩展SGA超过1.7G
2011-03-24 01:28 920今天一台Linux服务器扩展了一下内存,达到4G,开发的人自己 ... -
error while loading shared libraries: libclntsh.so.10.1: cannot open shared 问题解决
2011-01-21 16:23 119971.运行csscan命令显示如下错误 [oracle@rac ... -
“Error in invoking target ‘client_sharedlib’ of makefile ‘/home/oracle/oracle/pr
2011-01-13 17:35 11894今天同事在安装oracle的时候总是报这个错误: &qu ... -
如何处理Oracle中的坏块[ZT]
2010-12-19 21:56 1222一. 什么是数据库的坏 ... -
bug 7716219 hash group by显示消耗大量的temp 表空间
2010-12-07 17:47 2144SQL> set autotrace traceonly ... -
ORA-08102: TRYING TO MANIPULATE A JOB IN DBA_JOBS [ID 1036858.6]
2010-12-03 23:52 1258***Checked for relevance on 17- ... -
ORA-14074: partition bound must collate higher than that of the last partition
2010-10-09 16:26 36481. 创建分区表 create table zhanglei ... -
ora-12560问题解决
2010-09-16 11:30 15881.监听服务没有起起来 ... -
ORA-20000故障排除手记
2010-09-02 01:43 23481、发现故障。 在Oracle10.2.0.1的aler ... -
ORA-17502 与 ORA-15173 错误解决
2010-05-21 17:27 3948用rman恢复spfile时,报错误如下: RM ... -
Dropping A Disk From ASM Diskgroup Does Not Remove It From v$ASM_DISK
2010-05-21 10:42 1488Applies to: Oracle Serv ... -
ORA-19599 When backing up an archivelog that is corrupt [ID 461239.1]
2010-05-13 13:56 2668Applies to: Oracle Server - E ... -
ASMCMD fails to start on module libnnz10.so, permission denied
2010-05-13 01:14 2531ASMCMD fails to start on modu ... -
Errors ORA-00600 [kclchkblk_4] and ORA-00600 [2662] After Recovery of Datab
2010-05-12 15:45 1729Applies to: Oracle Server - E ...
相关推荐
ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法ora-00604 错误 解决 方法
Oracle 11gr2连Oracle 19c 报ORA-28040 ORA-01017解决方法
使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查。使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查 使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查
创建物化视图ORA-12014错误解决方法 创建物化视图ORA-12014错误解决方法
Drop goldengate用户时,报ORA-00604 ORA-20782 ORA-06512错误
在oracle里面运行一下,解决Exception java.sql.SQLException ORA-00600 内部错误代码
oracle数据库ora-01152和ora-01110的解决办法
ORA-12560 TNS 协议适配器错误
ERwin连接oracle报ORA-01041内部错误,hostdef扩展名不存在解决办法,实验可解决问题。
ORA-06512 数字或值错误,字符缓冲区太小的解决方法。 有图有真相,希望对你有帮助。
用oracle数据库新建连接时遇到ora-12505,此问题解决后又出现ora-12519错误,郁闷的半天,经过一番折腾问题解决,下面小编把我的两种解决方案分享给大家,仅供参考。 解决方案一: 今天工作时在新建连接的时候遇到...
ORA-12541 TNSno listener 的解决方案 ORA-12541 TNSno listener 的解决方案
oracle网络配置(listener_ora-sqlnet_ora-tnsnames_ora).mht
错误描述:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 错误检查:有很多是oracle自身安装的问题,但是我这里服务器配置正常,监听正常,服务正常,远程可以ping通服务器。 这里主要是防火墙问题,解决办法: ...
oracle启动失败,ORA-00702报错,windows,linux系统下解决办法
在运行查询SELECT * FROM V$SESSION 会出现ORA-29275:部分多字节字符的错误,这是什么原因开始我不得其解,网上也没有介绍什么好办法。本文给出答案。
【DATAGUARD】物理dg配置客户端无缝切换 (八.4)--ora-16652 和 ora-16603错误【DATAGUARD】物理dg配置客户端无缝切换 (八.4)--ora-16652 和 ora-16603错误
离线误删空间文件导致的ORA-01033及ORA-01145问题的解决办法,在解决ORA-01033的过程中,又出现ORA-01145 * 第 1 行出现错误: ORA-01145: 除非启用了介质恢复, 否则不允许立即脱机 接着的解决步骤
关于WIN10系统使用oracle instant client 时候提示ORA-01019错误的解决方案,本方案是配置好环境变量后依然提示ORA-01019错误的解决方案,内附本人制作测试的全过程说明