某日,突然出现/oracle应用目录空间满,通过”du -sh”命令依次查找空间异常目录,发现在/oracle/app/oracle/diag/rdbms/oracleinstance/oracleinstance目录下incident和trace占用了异常大空间。
如下记录了定位详细问题的方法。
1.确认Oracle告警
打开/oracle/app/oracle/diag/rdbms/oracleinstance/oracleinstance/trace/alert_minos.log文件,发现诸多“ORA-00600”相关的告警。
2.查找告警所在表或索引
进入oracle日志目录:/oracle/app/oracle/diag/rdbms/oracleinstance/oracleinstance/trace目录,执行命令:
grep seg\/obj\: *.trc>abc.txt
然后打开abc.txt文件,找到所有的trc里的object id,将object id由16进制转化为10进制,比如下面的:0x14df4,对应10进制为:85492。
oracleinstance_ora_10715.trc: seg/obj: 0x14df4 csc: 0x00.f622486 itc: 2 flg: E typ: 1 - DATA
登陆数据库
sqlplus sys/passwd@数据库id as sysdba
执行命令
select * from dba_objects where object_id=85492;
命令会显示id对应的表,或者索引表名称
如果是索引表,执行下面的命令可以查询到索引表对应的表
select owner,index_name, table_owner,table_name from dba_indexes where index_name like 'PK_INDEXNMAE';
如果是表,执行下面的命令可以查询到对应的索引表
select owner,index_name,table_owner,table_name from dba_indexes where table_name like 'TABLENAME';
3. 对问题表进行分析
analyze table USERNAME.TABLENAME validate structure cascade;
如果分析结果异常,则报错:ORA-XXXX: xxxxxxxxxx - see trace file
如果分析结果正常,则显示的消息:Table analyzed.
4.问题修复
根据报错的信息,进行相应修复,具体修复方法请按照表分析的的异常码进行查找方法。
如果修复方法是需要重建表对应索引,则执行如下操作:
企业版:
alter index USERNAME.PK_INDEXNMAE rebuild online;
标准版:
alter index USERNAME.PK_INDEXNMAE rebuild;