环境:
操作系统:windows
数据版本:11.2.0.1(单实例)
故障现象:
SQL> delete from bootstrap$;
已删除60行。
SQL> commit;
提交完成。
起库报错:
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 3373858816 bytes
Fixed Size 2180424 bytes
Variable Size 1845496504 bytes
Database Buffers 1509949440 bytes
Redo Buffers 16232448 bytes
数据库装载完毕。
ORA-03113: 通信通道的文件结尾
进程 ID: 6692
会话 ID: 5 序列号: 3
alert日志内容:
ALTER DATABASE OPEN
Beginning crash recovery of 1 threads
parallel recovery started with 3 processes
Started redo scan
Completed redo scan
……
Exception [type: ACCESS_VIOLATION, UNABLE_TO_READ] [ADDR:0x0] [PC:0x8AA6E1A, lmebucp()+30]
ERROR: Unable to normalize symbol name for the following short stack (at offset 199):
dbgexProcessError()+193<-dbgeExecuteForError()+65<-dbgePostErrorKGE()+1726<-dbkePostKGE_kgsf()+75<-kgeade()+560<-kgerev()+125<-kgerec5()+60<-sss_xcpt_EvalFilterEx()+1869<-sss_xcpt_EvalFilter()+174<-.1.6_8+59<-0000000076FB7398<-0000000076FCBF9D<-0000000076FA04CA<-0000000076FCB63E<-lmebucp()+30<-kqlbebs()+1714<-kqlblfc()+222<-adbdrv()+44244<-opiexe()+20842<-opiosq0()+5129<-kpooprx()+357<-kpoal8()+940<-opiodr()+1662<-ttcpip()+1325<-opitsk()+2040<-opiino()+1258<-opiodr()+1662<-opidrv()+864<-sou2o()+98<-opimai_real()+158<-opimai()+191<-OracleThreadStart()+724<-0000000076E559CD<-0000000076FB383D
Errors in file d:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_6692.trc (incident=15761):
ORA-07445: 出现异常错误: 核心转储 [lmebucp()+30] [ACCESS_VIOLATION] [ADDR:0x0] [PC:0x8AA6E1A] [UNABLE_TO_READ] []
Incident details in: d:\app\administrator\diag\rdbms\orcl\orcl\incident\incdir_15761\orcl_ora_6692_i15761.trc
Thu Jun 28 14:06:59 2018
Trace dumping is performing id=[cdmp_20180628140659]
Thu Jun 28 14:07:06 2018
PMON (ospid: 4352): terminating the instance due to error 397
Instance terminated by PMON, pid = 435
进行10046事务跟踪启动过程:
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 3373858816 bytes
Fixed Size 2180424 bytes
Variable Size 1845496504 bytes
Database Buffers 1509949440 bytes
Redo Buffers 16232448 bytes
数据库装载完毕。
SQL> oradebug setmypid
已处理的语句
SQL> oradebug event 10046 trace name context forever,level 12;
已处理的语句
SQL> oradebug tracefile_name
d:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_564.trc
SQL> alter database open
2 ;
alter database open
*
第 1 行出现错误:
ORA-03113: 通信通道的文件结尾
进程 ID: 564
会话 ID: 5 序列号: 3
alter database open;后日志如下:
=====================
PARSING IN CURSOR #2 len=188 dep=1 uid=0 oct=1 lid=0 tim=3127027009 hv=4006182593 ad='7ffc696ac50' sqlid='32r4f1brckzq1'
create table bootstrap$ ( line# number not null, obj# number not null, sql_text varchar2(4000) not null) storage (initial 50K objno 59 extents (file 1 block 520))
END OF STMT
PARSE #2:c=0,e=384,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,plh=0,tim=3127027008
EXEC #2:c=0,e=93,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,plh=0,tim=3127027158
CLOSE #2:c=0,e=5,dep=1,type=0,tim=3127027221
=====================
PARSING IN CURSOR #2 len=55 dep=1 uid=0 oct=3 lid=0 tim=3127027509 hv=2111436465 ad='7ffc696a150' sqlid='6apq2rjyxmxpj'
select line#, sql_text from bootstrap$ where obj# != :1
END OF STMT
PARSE #2:c=15600,e=277,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,plh=0,tim=3127027509
BINDS #2:
Bind#0
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
kxsbbbfp=1aed80e8 bln=22 avl=02 flg=05
value=59
EXEC #2:c=0,e=532,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,plh=867914364,tim=3127028119
WAIT #2: nam='db file sequential read' ela= 6708 file#=1 block#=520 blocks=1 obj#=59 tim=3127034876
WAIT #2: nam='db file scattered read' ela= 296 file#=1 block#=521 blocks=3 obj#=59 tim=3127035295
FETCH #2:c=0,e=7209,p=4,cr=5,cu=0,mis=0,r=0,dep=1,og=4,plh=867914364,tim=3127035351
STAT #2 id=1 cnt=0 pid=0 pos=1 obj=59 op='TABLE ACCESS FULL BOOTSTRAP$ (cr=5 pr=4 pw=0 time=0 us)'
Exception [type: ACCESS_VIOLATION, UNABLE_TO_READ] [ADDR:0x0] [PC:0x8AA6E1A, lmebucp()+30]
Incident 16961 created, dump file: d:\app\administrator\diag\rdbms\orcl\orcl\incident\incdir_16961\orcl_ora_564_i16961.trc
ORA-07445: 出现异常错误: 核心转储 [lmebucp()+30] [ACCESS_VIOLATION] [ADDR:0x0] [PC:0x8AA6E1A] [UNABLE_TO_READ] []
查询相同版本数据库获取59对象:
select
rowid,
dbms_rowid.rowid_object(rowid) "object",
dbms_rowid.rowid_relative_fno(rowid) "file",
dbms_rowid.rowid_block_number(rowid) "block",
dbms_rowid.rowid_row_number(rowid) "row"
from bootstrap$;
ROWID object file block row
------------------ ---------- ---------- ---------- ----------
AAAAA7AABAAAAIJAAA 59 1 521 0
AAAAA7AABAAAAIJAAB 59 1 521 1
AAAAA7AABAAAAIJAAC 59 1 521 2
AAAAA7AABAAAAIJAAD 59 1 521 3
AAAAA7AABAAAAIJAAE 59 1 521 4
AAAAA7AABAAAAIJAAF 59 1 521 5
AAAAA7AABAAAAIJAAG 59 1 521 6
AAAAA7AABAAAAIJAAH 59 1 521 7
AAAAA7AABAAAAIJAAI 59 1 521 8
AAAAA7AABAAAAIJAAJ 59 1 521 9
AAAAA7AABAAAAIJAAK 59 1 521 10
AAAAA7AABAAAAIJAAL 59 1 521 11
AAAAA7AABAAAAIJAAM 59 1 521 12
AAAAA7AABAAAAIJAAN 59 1 521 13
AAAAA7AABAAAAIJAAO 59 1 521 14
AAAAA7AABAAAAIJAAP 59 1 521 15
AAAAA7AABAAAAIJAAQ 59 1 521 16
AAAAA7AABAAAAIJAAR 59 1 521 17
AAAAA7AABAAAAIJAAS 59 1 521 18
AAAAA7AABAAAAIJAAT 59 1 521 19
AAAAA7AABAAAAIJAAU 59 1 521 20
AAAAA7AABAAAAIJAAV 59 1 521 21
AAAAA7AABAAAAIJAAW 59 1 521 22
AAAAA7AABAAAAIJAAX 59 1 521 23
AAAAA7AABAAAAIKAAA 59 1 522 0
AAAAA7AABAAAAIKAAB 59 1 522 1
AAAAA7AABAAAAIKAAC 59 1 522 2
AAAAA7AABAAAAIKAAD 59 1 522 3
AAAAA7AABAAAAIKAAE 59 1 522 4
AAAAA7AABAAAAIKAAF 59 1 522 5
AAAAA7AABAAAAIKAAG 59 1 522 6
AAAAA7AABAAAAIKAAH 59 1 522 7
AAAAA7AABAAAAIKAAI 59 1 522 8
AAAAA7AABAAAAIKAAJ 59 1 522 9
AAAAA7AABAAAAIKAAK 59 1 522 10
AAAAA7AABAAAAIKAAL 59 1 522 11
AAAAA7AABAAAAIKAAM 59 1 522 12
AAAAA7AABAAAAIKAAN 59 1 522 13
AAAAA7AABAAAAIKAAO 59 1 522 14
AAAAA7AABAAAAIKAAP 59 1 522 15
AAAAA7AABAAAAIKAAQ 59 1 522 16
AAAAA7AABAAAAIKAAR 59 1 522 17
AAAAA7AABAAAAIKAAS 59 1 522 18
AAAAA7AABAAAAIKAAT 59 1 522 19
AAAAA7AABAAAAIKAAU 59 1 522 20
AAAAA7AABAAAAILAAA 59 1 523 0
AAAAA7AABAAAAILAAB 59 1 523 1
AAAAA7AABAAAAILAAC 59 1 523 2
AAAAA7AABAAAAILAAD 59 1 523 3
AAAAA7AABAAAAILAAE 59 1 523 4
AAAAA7AABAAAAILAAF 59 1 523 5
AAAAA7AABAAAAILAAG 59 1 523 6
AAAAA7AABAAAAILAAH 59 1 523 7
AAAAA7AABAAAAILAAI 59 1 523 8
AAAAA7AABAAAAILAAJ 59 1 523 9
AAAAA7AABAAAAILAAK 59 1 523 10
AAAAA7AABAAAAILAAL 59 1 523 11
AAAAA7AABAAAAILAAM 59 1 523 12
AAAAA7AABAAAAILAAN 59 1 523 13
AAAAA7AABAAAAILAAO 59 1 523 14
已选择60行。
bootstrap$表占用了521,522,523三个块
SQL> select object_id from dba_objects where object_name='BOOTSTRAP$';
OBJECT_ID
----------
59
SQL> select line#,sql_text from bootstrap$ where obj#=59;
LINE#
----------
SQL_TEXT
--------------------------------------------------------------------------------
59
CREATE TABLE BOOTSTRAP$("LINE#" NUMBER NOT NULL,"OBJ#" NUMBER NOT NULL,"SQL_TEXT
" VARCHAR2(4000) NOT NULL) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE
( INITIAL 56K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 OBJN
O 59 EXTENTS (FILE 1 BLOCK 520))
SQL> select header_file,header_block from dba_segments where segment_name='BOOTSTRAP$';
HEADER_FILE HEADER_BLOCK
----------- ------------
1 520
说明:
数据库启动过程中,需要访问bootstrap$表时,不能够访问。读取到522块时,因为没有内容导致数据库启动异常。
使用bbed修复:
修复思路:
找相同版本的数据库的system表空间数据文件,将好的bootstrap$表块复制到已经删除的块的位置。
准备工作:
将备份损坏system01.dbf文件,将相同版本system01.dbf改名system0101.dbf后复制到和system01.dbf相同目录下。
listfile内容如下:
1 D:\app\Administrator\oradata\orcl\SYSTEM01.DBF 713039872
2 D:\app\Administrator\oradata\orcl\SYSTEM0101.DBF 713039872 (未损坏文件)
listfile文件格式:
第一列:文件号
第二列:文件绝对路径
第三列:文件大小
bbed 参数文件:
blocksize=8192
listfile=D:\file.txt
mode=edit
说明:
blocksize为数据库块大小
listfile为文件位置
mode模式有edit和brower(查看)两种模式,此处为edit(编辑)模式
故障处理:
D:\bbed>bbed parfile=D:\bbed.par
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Thu Jun 28 14:59:51 2018
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED>
默认密码:blockedit
设定块位置:
BBED> set dba 2,521
DBA 0x00800209 (8389129 2,521)
BBED> show
FILE# 2
BLOCK# 521
OFFSET 0
DBA 0x00800209 (8389129 2,521)
FILENAME D:\app\Administrator\oradata\orcl\SYSTEM0101.DBF
BIFILE bifile.bbd
LISTFILE D:\file.txt
BLOCKSIZE 8192
MODE Edit
EDIT Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No
查看块内容:
BBED> d /v count 16
File: D:\app\Administrator\oradata\orcl\SYSTEM0101.DBF (2)
Block: 521 Offsets: 0 to 15 Dba:0x00800209
-------------------------------------------------------
10a20000 08024000 4e020000 00000104 l .?...@.N.......
<16 bytes per line>
说明:
10a20000 10代表segment free list block #此处应为06开头,代表具有ITL插槽的数据块
0000代表unused
08024000代表rdba
确认:
map通过偏移量显示块信息
BBED> map
File: D:\app\Administrator\oradata\orcl\SYSTEM0101.DBF (2)
Block: 521 Dba:0x00800209
------------------------------------------------------------
Unlimited Data Segment Header
struct kcbh, 20 bytes @0
struct ktech, 72 bytes @20
struct ktemh, 16 bytes @92
struct ktetb[1], 8 bytes @108
struct ktshc, 8 bytes @4148
struct ktsfs_seg[1], 20 bytes @4156
struct ktsfs_txn[16], 320 bytes @4176
ub4 tailchk @8188
此处没有rowdata显示
设置块2,522,偏移量为0的位置
BBED> set dba 2,522 offset 0
DBA 0x0080020a (8389130 2,522)
OFFSET 0
BBED> d /v count 16
File: D:\app\Administrator\oradata\orcl\SYSTEM0101.DBF (2)
Block: 522 Offsets: 0 to 15 Dba:0x0080020a
-------------------------------------------------------
06a20000 09024000 60020000 00000106 l .?...@.`.......
<16 bytes per line>
BBED> map
File: D:\app\Administrator\oradata\orcl\SYSTEM0101.DBF (2)
Block: 522 Dba:0x0080020a
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
struct ktbbh, 48 bytes @20
struct kdbh, 14 bytes @68
struct kdbt[1], 4 bytes @82
sb2 kdbr[24] @86
ub1 freespace[1156] @134
ub1 rowdata[6898] @1290
ub4 tailchk @8188
说明:
sb2 kdbr[24] 24代表块行数
设置块523
BBED> set dba 2,523 offset 0
DBA 0x0080020b (8389131 2,523)
OFFSET 0
BBED> map
File: D:\app\Administrator\oradata\orcl\SYSTEM0101.DBF (2)
Block: 523 Dba:0x0080020b
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
struct ktbbh, 48 bytes @20
struct kdbh, 14 bytes @68
struct kdbt[1], 4 bytes @82
sb2 kdbr[21] @86
ub1 freespace[1398] @128
ub1 rowdata[6662] @1526
ub4 tailchk @8188
设置块524
BBED> set dba 2,524 offset 0
DBA 0x0080020c (8389132 2,524)
OFFSET 0
BBED> map
File: D:\app\Administrator\oradata\orcl\SYSTEM0101.DBF (2)
Block: 524 Dba:0x0080020c
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
struct ktbbh, 48 bytes @20
struct kdbh, 14 bytes @68
struct kdbt[1], 4 bytes @82
sb2 kdbr[15] @86
ub1 freespace[3525] @116
ub1 rowdata[4547] @3641
ub4 tailchk @8188
说明:
522,523,524三个块总行数:24+21+15=60
三个块的总行数与bootstrap$表行数相同。
select block地址为521,522,523,说明windows块实际地址实需要+1
确定文件1块地址:
BBED> set dba 1,522 offset 0
DBA 0x0040020a (4194826 1,522)
OFFSET 0
BBED> map
File: D:\app\Administrator\oradata\orcl\SYSTEM01.DBF (1)
Block: 522 Dba:0x0040020a
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
struct ktbbh, 48 bytes @20
struct kdbh, 14 bytes @68
struct kdbt[1], 4 bytes @82
sb2 kdbr[24] @86
ub1 freespace[1156] @134
ub1 rowdata[6898] @1290
ub4 tailchk @8188
BBED> set dba 1,523 offset 0
DBA 0x0040020b (4194827 1,523)
OFFSET 0
BBED> map
File: D:\app\Administrator\oradata\orcl\SYSTEM01.DBF (1)
Block: 523 Dba:0x0040020b
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
struct ktbbh, 48 bytes @20
struct kdbh, 14 bytes @68
struct kdbt[1], 4 bytes @82
sb2 kdbr[21] @86
ub1 freespace[1398] @128
ub1 rowdata[6662] @1526
ub4 tailchk @8188
BBED> set dba 1,524 offset 0
DBA 0x0040020c (4194828 1,524)
OFFSET 0
BBED> map
File: D:\app\Administrator\oradata\orcl\SYSTEM01.DBF (1)
Block: 524 Dba:0x0040020c
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
struct ktbbh, 48 bytes @20
struct kdbh, 14 bytes @68
struct kdbt[1], 4 bytes @82
sb2 kdbr[15] @86
ub1 freespace[3525] @116
ub1 rowdata[4547] @3641
ub4 tailchk @8188
说明:
文件1 522,523,524块信息与文件2 522,523,524信息一致
执行块复制:
BBED> copy dba 2,522 to dba 1,522
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y
File: D:\app\Administrator\oradata\orcl\SYSTEM01.DBF (1)
Block: 522 Offsets: 0 to 15 Dba:0x0040020a
------------------------------------------------------------------------
06a20000 09024000 60020000 00000106
<32 bytes per line>
BBED> copy dba 2,523 to dba 1,523
File: D:\app\Administrator\oradata\orcl\SYSTEM01.DBF (1)
Block: 523 Offsets: 0 to 15 Dba:0x0040020b
------------------------------------------------------------------------
06a20000 0a024000 60020000 00000106
<32 bytes per line>
BBED> copy dba 2,524 to dba 1,524
File: D:\app\Administrator\oradata\orcl\SYSTEM01.DBF (1)
Block: 524 Offsets: 0 to 15 Dba:0x0040020c
------------------------------------------------------------------------
06a20000 0b024000 60020000 00000106
<32 bytes per line>
生效:
BBED> sum dba 1,522 apply
Check value for File 1, Block 522:
current = 0x51a2, required = 0x51a2
BBED> sum dba 1,523 apply
Check value for File 1, Block 523:
current = 0x1e90, required = 0x1e90
BBED> sum dba 1,524 apply
Check value for File 1, Block 524:
current = 0x7e16, required = 0x7e16
启动数据库:
D:\bbed>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期四 6月 28 15:55:15 2018
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> conn /as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 3373858816 bytes
Fixed Size 2180424 bytes
Variable Size 1845496504 bytes
Database Buffers 1509949440 bytes
Redo Buffers 16232448 bytes
数据库装载完毕。
数据库已经打开。
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
bbed恢复bootstrap$表
最新推荐文章于 2022-11-01 12:03:35 发布