ORA-08102异常重现及恢复
现象:
SQL> alter table t add primary key(id);
alter table t add primary key(id)
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-08102: index key not found, obj# 52, file 1, block 72661 (2)
重现异常:
SQL> SELECT OWNER#,NAME,CON# FROM CON$ WHERE NAME='_NEXT_CONSTRAINT';
OWNER# NAME CON#
---------- ------------------------------ ----------
0 _NEXT_CONSTRAINT 11222
SQL> set lines 200
SELECT OWNER#,NAME,CON#,
dbms_rowid.ROWID_RELATIVE_FNO(rowid) fno,
dbms_rowid.ROWID_BLOCK_NUMBER(rowid) bno,
dbms_rowid.ROWID_ROW_NUMBER(rowid) rno FROM CON$ WHERE NAME='_NEXT_CONSTRAINT';
OWNER# NAME CON# FNO BNO RNO
---------- ------------------------------ ---------- ---------- ---------- ----------
0 _NEXT_CONSTRAINT 11222 1 289 12
[oracle@cqfrog bbed]$ bbed parfile=par.txt
BBED> set file 1 block 289
FILE# 1
BLOCK# 289
- BBED> p *kdbr[12]
rowdata[0]
----------
ub1 rowdata[0] @1207 0x2c
- BBED> x /rccnn
rowdata[0] @1207
----------
flag@1207: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@1208: 0x02
cols@1209: 4
col 0[1] @1210: .
col 1[16] @1212: _NEXT_CONSTRAINT
col 2[4] @1229: 11222
col 3[1] @1234: 0
BBED> dump /v offset 1229 count 16
File: /u01/app/oracle/oradata/orcl/system01.dbf (1)
Block: 289 Offsets: 1229 to 1244 Dba:0x00400121
-------------------------------------------------------
04c3020d 1701802c 00040180 105f4e45 l .......,....._NE
<16 bytes per line>
SQL> select dump(11222, 16) from dual;
DUMP(11222,16)
----------------------
Typ=2 Len=4: c3,2,d,17
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
BBED> dump /v offset +4
File: /u01/app/oracle/oradata/orcl/system01.dbf (1)
Block: 289 Offsets: 1233 to 1248 Dba:0x00400121
-------------------------------------------------------
1701802c 00040180 105f4e45 58545f43 l ...,....._NEXT_C
<16 bytes per line>
BBED> modify /x 1901802c
File: /u01/app/oracle/oradata/orcl/system01.dbf (1)
Block: 289 Offsets: 1233 to 1248 Dba:0x00400121
------------------------------------------------------------------------
1901802c 00040180 105f4e45 58545f43
<32 bytes per line>
BBED> sum apply
Check value for File 1, Block 289:
current = 0x7fca, required = 0x7fca
BBED> dump /v offset 1233
File: /u01/app/oracle/oradata/orcl/system01.dbf (1)
Block: 289 Offsets: 1233 to 1248 Dba:0x00400121
-------------------------------------------------------
1901802c 00040180 105f4e45 58545f43 l ...,....._NEXT_C
<16 bytes per line>
SQL> startup
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 549455904 bytes
Database Buffers 276824064 bytes
Redo Buffers 6606848 bytes
Database mounted.
Database opened.
SQL> select /*+ FULL(t1) */ name,con# from con$ t1 where name='_NEXT_CONSTRAINT';
NAME CON#
------------------------------ ----------
_NEXT_CONSTRAINT 11224
SQL> select /*+ index(t1 I_CON2) */ name,con# from con$ t1 where name='_NEXT_CONSTRAINT';
NAME CON#
------------------------------ ----------
_NEXT_CONSTRAINT 11222
SQL> create table t as select * from test where rownum<10;
Table created.
SQL> desc t;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
NAME VARCHAR2(128
SQL> alter table t add primary key(id);
alter table t add primary key(id)
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-08102: index key not found, obj# 52, file 1, block 72661 (2)
修复ORA-08102异常:
SQL> alter table t add primary key(id);
alter table t add primary key(id)
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-08102: index key not found, obj# 52, file 1, block 72661 (2)
SQL> select /*+ FULL(t1) */ name,con# from con$ t1 where name='_NEXT_CONSTRAINT';
NAME CON#
------------------------------ ----------
_NEXT_CONSTRAINT 11224
SQL> select /*+ index(t1 I_CON2) */ name,con# from con$ t1 where name='_NEXT_CONSTRAINT';
NAME CON#
------------------------------ ----------
_NEXT_CONSTRAINT 11222
SQL> alter system dump datafile 1 block 72661;
System altered.
SQL> select * from v$diag_info;
1 Default Trace File /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_6051.trc

SQL> select UTL_RAW.CAST_TO_NUMBER(replace('c3 02 0d 19',' ','')) from dual;
UTL_RAW.CAST_TO_NUMBER(REPLACE('C3020D19','',''))
-------------------------------------------------
11224
row#198[3566] flag: ---D--, lock: 2, len=13, data:(6): 00 41 38 6c 00 ad
col 0; len 4; (4): c3 02 0d 15
row#199[3540] flag: ---D--, lock: 2, len=13, data:(6): 00 41 38 6c 00 af
col 0; len 4; (4): c3 02 0d 16
row#200[3553] flag: ------, lock: 0, len=13, data:(6): 00 40 01 21 00 0c
col 0; len 4; (4): c3 02 0d 17
----- end of leaf block dump -----
End dump data blocks tsn: 0 file#: 1 minblk 72661 maxblk 72661
SQL> select UTL_RAW.CAST_TO_NUMBER(replace('c3 02 0d 17',' ','')) from dual;
UTL_RAW.CAST_TO_NUMBER(REPLACE('C3020D17','',''))
-------------------------------------------------
11222

BBED> set file 1 block 72661;
FILE# 1
BLOCK# 72661
BBED> dump offset 3677 count 16
File: /u01/app/oracle/oradata/orcl/system01.dbf (1)
Block: 72661 Offsets: 3677 to 3692 Dba:0x00411bd5
------------------------------------------------------------------------
04c3020d 17010200 41386c00 ad04c302
BBED> modify /x 19 offset 3681
File: /u01/app/oracle/oradata/orcl/system01.dbf (1)
Block: 72661 Offsets: 3681 to 3696 Dba:0x00411bd5
------------------------------------------------------------------------
19010200 41386c00 ad04c302 0d150100
<32 bytes per line>
BBED> sum apply
Check value for File 1, Block 72661:
current = 0x1fa3, required = 0x1fa3
BBED> dump offset 3677 count 16
File: /u01/app/oracle/oradata/orcl/system01.dbf (1)
Block: 72661 Offsets: 3677 to 3692 Dba:0x00411bd5
------------------------------------------------------------------------
04c3020d 19010200 41386c00 ad04c302
<32 bytes per line>
SQL> select /*+ FULL(t1) */ name,con# from con$ t1 where name='_NEXT_CONSTRAINT';
NAME CON#
------------------------------ ----------
_NEXT_CONSTRAINT 11224
SQL> select /*+ index(t1 I_CON2) */ name,con# from con$ t1 where name='_NEXT_CONSTRAINT';
NAME CON#
------------------------------ ----------
_NEXT_CONSTRAINT 11224
SQL> alter table t add primary key(id);
Table altered.
ORA-08102异常重现及恢复的更多相关文章
- Go语言 异常panic和恢复recover用法
Go语言 异常panic和恢复recover用法 背景:Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在 ...
- mysql主从同步异常原因及恢复
mysql主从同步异常原因及恢复 前言 mysql数据库做主从复制,不仅可以为数据库的数据做实时备份,保证数据的完整性,还能做为读写分离,提升数据库的整体性能.但是,mysql主从复制经常会因为某些原 ...
- 【3】JVM-OutOfMemory异常重现
JVM中常见的OOM,那么如何通过自己编写代码产生这些OOM异常呢?通过写代码重现异常,是为了避免在工作中写出有OOM BUG的代码.之前虽然看过相关文章,但是没自己写过这些代码,这次在编写的实际过程 ...
- 通过NBU还原数据库提示LINKING异常,无法恢复数据
错误提示: 解决方法:
- Java中的受检异常
Java中的受检异常 Java提供了三种异常类型,受检异常(checked exception).运行时异常(runtime exception).错误(error).那么这受检异常在实际开发中又有什 ...
- SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式(转载)
SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...
- [Effective Java]第九章 异常
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Win32环境下的程序崩溃异常定位
1 案例描述 作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭.请与您的供应商联系.呵呵,这句微软的“名 ...
- 云计算之路-阿里云上:3个manager节点异常造成 docker swarm 集群宕机
今天 11:29 - 11:39 左右,docker swarm 集群 3 个 manager 节点同时出现异常,造成整个集群宕机,由此给您带来很大的麻烦,请您谅解. 受此次故障影响的站点有:博问,闪 ...
随机推荐
- 敏捷社区--敏捷与OKR
携程敏捷总动员是由携程技术管理中心(PMO)发起的敏捷项目管理线下主题沙龙活动(每2月一次),旨在和研发管理同行分享互联网行业第一线的优秀敏捷实践. 5月10日携程敏捷总动员-OKR专场活动, ...
- 《Java 8 in Action》Chapter 1:为什么要关心Java 8
自1998年 JDK 1.0(Java 1.0) 发布以来,Java 已经受到了学生.项目经理和程序员等一大批活跃用户的欢迎.这一语言极富活力,不断被用在大大小小的项目里.从 Java 1.1(199 ...
- C++中 #ifdef的妙用详解
本文主要介绍c语言中条件编译相关的预编译指令,包括 #define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. #define ...
- PHP 与 MySQL 相关操作
一.MySQL基操 •MySQL启动 注意:MySQL不能直接通过 mysql.exe 命令启动 MySQL客户端访问服务端需要寻找匹配:连接认证 连接:IP和端口确定,如果是本地都可以忽略 -h 主 ...
- 关于dijkstra的优化 及 多源最短路
先来看这样一道题目 给你N个点,M条双向边,要求求出1号点到其他所有点的距离.其中 2 <= N <= 1e5, 1 <=M <= 1e6. 对于这样的一道题目 我们当然不可 ...
- 楼房重建 HYSBZ - 2957
楼房重建 HYSBZ - 2957 第一次写分块, 写了之后觉得真的是暴力的一比. 题解:先讲n分成 sqrt(n)块,记得补上末尾的, 然后就是对于每一次更新操作, 都重新的讲这个块里面的有效楼放入 ...
- 大数乘法(适合k进制)
#include<stdio.h> #include<string.h> #define N 10000 void inv(char str[],int n) { int i, ...
- CF 990D Graph And Its Complement 第十八 构造、思维
Graph And Its Complement time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- Codeforce Round #574(Div.2)
...
- Excel如何动态获取列名
遇到一个动态列,N行数据的求和,但是求和时需要Excel列名(A,B,C...)当时觉得这太非常难了.后来仔细研究了下Excel列名,都是从A到Z,然后AA再到AZ,以此类推. 如此的话就好弄了.通过 ...