在某种情况下,数据库system表空间可能有多个数据文件,而意外的丢失了其中某个(不能为第一个),然后通过bbed来模拟一个数据文件来open库
system增加数据文件
SQL>
alter
tablespace system
add
datafile
'/u01/oracle/oradata/ora11g/system02.dbf'
size
10m;
Tablespace altered.
--创建表,为了使得数据库发生类此生产环境的部分操作,使得system表空间可能发生改变
SQL>
create
table
t_xifenfei tablespace system
2
as
3
select
*
from
dba_tables;
Table
created.
|
删除system中某个文件(system02.dbf)
[oracle@xifenfei ora11g]$ mv system02.dbf system02.dbf_bak
|
尝试启动数据库
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System
Global
Area 313860096 bytes
Fixed
Size
1344652 bytes
Variable
Size
251661172 bytes
Database
Buffers 54525952 bytes
Redo Buffers 6328320 bytes
Database
mounted.
ORA-01157: cannot identify/lock data file 8 - see DBWR trace file
ORA-01110: data file 8:
'/u01/oracle/oradata/ora11g/system02.dbf'
|
错误思路offline system数据文件
SQL>
alter
database
datafile 8 offline;
Database
altered.
SQL>
alter
database
open
;
alter
database
open
*
ERROR
at
line 1:
ORA-01147: SYSTEM tablespace file 8
is
offline
ORA-01110: data file 8:
'/u01/oracle/oradata/ora11g/system02.dbf'
SQL>
alter
database
datafile 8 online;
alter
database
datafile 8 online
*
ERROR
at
line 1:
ORA-01157: cannot identify/lock data file 8 - see DBWR trace file
ORA-01110: data file 8:
'/u01/oracle/oradata/ora11g/system02.dbf'
|
使用system表空间其他数据文件来模拟丢失数据文件
[oracle@xifenfei ora11g]$
cp
system01.dbf system02.dbf
|
通过dul获取file$相关信息
FILE
#
RELFILE
#
CRSCNWRP
CRSCNBAS
|
bbed修改下面参数值
--rdba
ub4 rdba_kcbh @4 0x02000001
--绝对文件号
ub2 kccfhfno @52 0x0008
--scn
ub4 kscnbas @100 0xc01a3581
ub2 kscnwrp @104 0x0b2c
--相对文件号
ub4 kcvfhrfn @368 0x00000008
--文件大小(不修改,为了重建欺骗数据库重建控制文件)
kccfhfsz
--文件创建时间(重建控制文件来实现控制文件和数据文件头一致)
kcvfhcrt
|
重建控制文件
1.因为复制来自同一个表空间下面的数据文件,数据文件大小和原数据文件一样, 所以不要修改kccfhfsz大小,不然会出现
CREATE
CONTROLFILE REUSE
DATABASE
"ORA11G"
NORESETLOGS ARCHIVELOG
*
ERROR
at
line 1:
ORA-01503:
CREATE
CONTROLFILE failed
ORA-01200: actual file
size
of
90880
is
smaller than correct
size
of
10485760 blocks
ORA-01110: data file 8:
'/u01/oracle/oradata/ora11g/system02.dbf'
|
2. 数据文件创建时间是通过kcvfhcrt参数值来控制的,而这个值是通过1988年01月01日00时00分00秒开始计时,按照每月31天计算的累计值,按照这个规则可以推断出来kcvfhcrt.因为数据库在启动的时候会验证控制文件中这个值和数据文件头的该值是否一致,所以如果你不修改kcvfhcrt,可以选择重建控制文件来完成.
再次open数据库
SQL>
alter
database
open
;
alter
database
open
*
ERROR
at
line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1:
'/u01/oracle/oradata/ora11g/system01.dbf'
SQL> recover
database
;
Media recovery complete.
SQL>
alter
database
open
;
Database
altered.
|
操作到这里,库已经可以正常的被open,如果通过这种方面屏蔽掉的异常的system数据文件中数据字典的部分表信息时,可能数据库依然不能被正常逻辑导出(例如dba_segments,dba_extents的基表等),需要进一步特殊处理,如果不能自行解决相关问题,需要恢复支持,请联系我们:专业Oracle数据库恢复技术支持