博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORA-08102 index key的错误恢复
阅读量:6256 次
发布时间:2019-06-22

本文共 2143 字,大约阅读时间需要 7 分钟。

hot3.png

image.php?url=0LNeMa9oLr
 

一 总体描述

自己的实验虚拟数据库中的不停的报下面的错误.alert日志刷的闹心.

Sun Jun 10 23:44:42 2012

s in /u01/app//product/10.2.0/db_1/admin/testb/bdump/testb_j000_4944.trc:

ORA-00604: error occurred at recursive  level 1

ORA-08102:  not found, obj# 239, file 1, block 1674 (2)

ORA-12012: error on auto  of job 21

ORA-08102: index key not found, obj# 239, file 1, block 1674 (2)

 

二 操作环境

$cat //redhat-release

Red Hat Enterprise  Server release 5.6 (Tikanga)

$ -a

Linux stu00 2.6.18-238.el5 #1 SMP Tue Jan 4 15:24:05 EST 2011 i686 i686 i386 GNU/Linux

DB

SQL> set lines 150

COL PRODUCT FORMAT A55

COL VERSION FORMAT A15

COL STATUS FORMAT A15

SELECT * FROM PRODUCT_COMPONENT_VERSION;SQL> SQL> SQL> SQL>

PRODUCT VERSION STATUS

 

NLSRTL 10.2.0.4.0 Production

Oracle Database 10g Enterprise Edition 10.2.0.4.0 Prod

PL/SQL 10.2.0.4.0 Production

TNS for : 10.2.0.4.0 Production

SQL>

other

三 排错思路概况

1.报错信息ORA-12012:  on auto execute of job 21,ORA-08102: not found, obj# 239,  1, block 1674 (2) 是由于job 21执行的时候没有找到索引key.所以alert日志不停的刷.

2.查询job

3.查询索引

4.重建索引

四 详细步骤操作

1.查看 /u01/app//product/10.2.0/db_1/admin/testb/bdump/testb_j000_4944.trc文件内容(汗,看不懂,这里跳过)

2.根据排错思路查看job 21的情况:

SQL> r

1* select job,log_user,interval,what from dba_jobs where job=21

JOB LOG_USER INTERVAL WHAT

 

21  sysdate + 1 / (24 * 60) EMD_MAINTENANCE._EM_DBMS_JOB_PROCS;

SQL>

原来是EM的维护操作,1分钟执行一次.

3.查询obj# 239号是什么obj:

SQL> r

1* select owner,object_name,object_id,object_type,status from DBA_OBJECTS where OBJECT_ID=239

OWNER OBJECT_NAM OBJECT_ID OBJECT_TYPE STATUS

 

SYS I_JOB_NEXT 239 INDEX VALID

SQL>

obj# 239真是一个索引哈,看status是valid的,这里竟然不一致.不管为什么不一致了,先解决这个alert再说. (嘿嘿,实验机有快照,有兴趣再研究的请留言)

4.重建问题索引:(使用在线重建方式)

SQL> ALTER INDEX I_JOB_NEXT REBUILD ONLINE;

Index altered.

SQL>

5.观察alert日志是否还有错误产生.

6.日志已无报错.

五 个人总结

面对报错不要心急,静心的去分析每一个报错提示.官方支持文档中有说使用索引重建方式依然解决不了日志报错的.唯有重建索引一种方式.这里附上使用dbms_metadata.get_ddl查找索引ddl的方式.

SQL> select DBMS_METADATA.GET_DDL('INDEX','I_JOB_NEXT','SYS') from dual;

DBMS_METADATA.GET_DDL('INDEX','I_JOB_NEXT','SYS')

 

CREATE INDEX "SYS"."I_JOB_NEXT" ON ""."JOB$" ("NEXT_DATE")

PCTFREE 10 I

>

六 资料参考引用

ORA-08102: TRYING TO MANIPULATE A JOB IN DBA_JOBS [ID 1036858.6]

转载于:https://my.oschina.net/u/3635497/blog/3016794

你可能感兴趣的文章
Django 文件下载功能
查看>>
走红日本 阿里云如何能够赢得海外荣耀
查看>>
qt 学习之路2
查看>>
线上应用故障排查之二:高内存占用
查看>>
异常处理汇总 ~ 修正果带着你的Code飞奔吧!
查看>>
PCIE_DMA:xapp1052学习笔记
查看>>
python ----字符串基础练习题30道
查看>>
uva-10879-因数分解
查看>>
python 调用aiohttp
查看>>
linux下文件的一些文件颜色的含义
查看>>
跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
查看>>
学习鸟哥的Linux私房菜笔记(8)——文件查找与文件管理2
查看>>
升级fedora 18到fedora 19
查看>>
11月20日学习内容整理:jquery插件
查看>>
javascript基础篇:函数
查看>>
SVN与TortoiseSVN实战:补丁详解
查看>>
获取页面中所有dropdownlist类型控件
查看>>
读《淘宝数据魔方技术架构解析》有感
查看>>
[转载]如何破解Excel VBA密码
查看>>
【BZOJ】2563: 阿狸和桃子的游戏
查看>>