笔记本上有一个自己玩的数据库,最近不知道怎么回事,被我自己玩坏了,跑了一个脚本 dbms_supportmoniter脚本,后来还执行了一下这个存储过程,第二天周五晚上打开库 报ora 600 16703 错误,后面一堆 ora-704 bootstrap process Failed
没辙,好早有一个之前备份的system01.dbf 文件,我先备份了这个有问题的 600 16703 数据文件
把之前备份的数据文件拷贝过来,改名为system01.dbf
起库,中间还用了oracle 手术刀bbed 修改了一下 相关的scn
创建新的控制文件
恢复数据库 recover database using backup controlfile until cancel;
应用online redo
alter database open resetlogs; 终于打开库了,可是有一个遗憾 wrh$_active_session_history 执行 有ora-08103 错误。
整来整去 我 又试着 来把 600 16703 数据文件打开,也搞不定,重新回到 原来的备份的数据文件
可是这个遇到麻烦了,重建控制文件也不行,都是报 before reslogs 之类的错误
查看 1号文件 select file#,error from v$datafile_header 都是wrong restlogs 错误。今天来到公司想到了办法,使用16703错误的数据文件头拷贝到备份的数据文件都上。操作明细如下:
C:\Windows\system32>cd /d d:\oracle\oradata\myoracle
d:\oracle\oradata\myoracle>lsbifile.bbd old_db_ctl REDO03.LOG tab$.dbf UNDOTBS01.DBF
CONTROL01.CTL OVERFLOW.DBF SYSAUX01.DBF TBS1_01.DBF USERS01.DBF
CONTROL02.CTL REDO01.LOG SYSTEM01.DBF TEMP01.DBF
log.bbd REDO02.LOG SYSTEM01.DBF.16703 TEST.DBF
d:\oracle\oradata\myoracle>dd if=SYSTEM01.DBF.16703 OF=SYS_HEADER.F bs=8192 count=1 skip=1
dd: invalid number `SYS_HEADER.F'
d:\oracle\oradata\myoracle>dd if=SYSTEM01.DBF.16703 of=SYS_HEADER.F bs=8192 count=1 skip=1
1+0 records in
1+0 records out
用bbed 验证 拷贝出来的文件头是否有问题
d:\oracle\oradata\myoracle>bbed filename=SYS_HEADER.F
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Mon Aug 1 09:28:58 2016
Copyright (c) 1982,2002,Oracle Corporation. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> d
File: SYS_HEADER.F (0)
Block: 1 Offsets: 0 to 511 Dba:0x00000000
------------------------------------------------------------------------
0ba20000 01004000 00000000 00000104 32c70000 00000000 0000200b 1be2e36e
4d594f52 41434c45 814b0000 80940100 00200000 01000300 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08024000 07000000 00000000 2d1ca22a 596bc036 5d77dc00 00000000 00000000
00000000 00000000 00000420 06050000 436bc036 05050000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 06005359 5354454d 00000000 00000000
00000000 00000000 00000000 00000000 01000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 0a000a00
266ac036 5677dc00 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 6077dc00 0000f016 5c6bc036 0100e811 01000000 02000000 10000000
<32 bytes per line>
---从下可以看出 文件头完整,bbed可以认识到该数据块,认到了结构。
BBED> map
File: SYS_HEADER.F (0)
Block: 1 Dba:0x00000000
------------------------------------------------------------
Data File Header
struct kcvfh,360 bytes @0
ub4 tailchk @2044
BBED> show all
FILE# 0
BLOCK# 1
OFFSET 0
DBA 0x00000000 (0 0,1)
FILENAME SYS_HEADER.F
BIFILE bifile.bbd
LISTFILE
BLOCKSIZE 2048
MODE Browse
EDIT Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No
BBED> info all
File# Name Size(blks)
----- ---- ----------
BBED> d
File: SYS_HEADER.F (0)
Block: 1 Offsets: 0 to 511 Dba:0x00000000
------------------------------------------------------------------------
dd命令把文件 再拷贝到system01.dbf
dd if=system_header.f of=system01.dbf seek=1 bs=8192 count=1
再重建控制文件
使用控制文件恢复 recover database using backup controlfile until cancl
应用redo
alter database open resetlogs;
终于又把库打开了。
不过 ora-8103 还是存在