1号文件坏块处理(system01.dbf)

一、模拟坏块环境:
进入bbed然后破坏一号文件的块

copy file 2 block 20 to file 1 block 520

然后强制关闭数据库

shutdown abort;

再次打开数据库,如下报错(可以看到1号文件的520号块已被损坏):

Reading datafile '/oracle/app/xiete/system01.dbf' for corruption at rdba: 0x00400208 (file 1, block 520)
Reread (file 1, block 520) found same corrupt data (no logical check)
Errors in file /oracle/app/diag/rdbms/xiete/xiete/trace/xiete_ora_18012.trc  (incident=6137):
ORA-01578: ORACLE data block corrupted (file # 1, block # 520)
ORA-01110: data file 1: '/oracle/app/xiete/system01.dbf'
Incident details in: /oracle/app/diag/rdbms/xiete/xiete/incident/incdir_6137/xiete_ora_18012_i6137.trc
Errors in file /oracle/app/diag/rdbms/xiete/xiete/trace/xiete_ora_18012.trc:
ORA-00704: bootstrap process failure
ORA-01578: ORACLE data block corrupted (file # 1, block # 520)
ORA-01110: data file 1: '/oracle/app/xiete/system01.dbf'
Errors in file /oracle/app/diag/rdbms/xiete/xiete/trace/xiete_ora_18012.trc:
ORA-00704: bootstrap process failure
ORA-01578: ORACLE data block corrupted (file # 1, block # 520)
ORA-01110: data file 1: '/oracle/app/xiete/system01.dbf'
Error 704 happened during db open, shutting down database
USER (ospid: 18012): terminating the instance due to error 704
Instance terminated by USER, pid = 18012
ORA-1092 signalled during: alter database open...
opiodr aborting process unknown ospid (18012) as a result of ORA-1092
Thu Aug 26 16:28:38 2021
ORA-1092 : opitsk aborting process

二、开始修复
(一)使用dd命令进行修复
1、从一个相同系统,相同数据库版本的数据文件中dd一个好的1号文件520号块

[oracle@yikuer hzmc]$ dd if=/oracle/app/xiete/system01.dbf of=/home/oracle/1 skip=520 bs=8192 count=1  #skip用来跳过多少数据块
1+0 records in
1+0 records out
8192 bytes (8.2 kB) copied, 0.0160776 s, 510 kB/s

2、将文件传到出问题的主机,将这个文件dd进1号数据文件

[oracle@yikuer xiete]$ dd if=/home/oracle/1 of=/oracle/app/xiete/system01.dbf seek=520 bs=8192 count=1 conv=notrunc

#使用notrunc不会删除之后的数据,否则第520块后面的数据就被清空了,seek定位到第520个块,做之前先备份文件

1+0 records in
1+0 records out
8192 bytes (8.2 kB) copied, 0.000196376 s, 41.7 MB/s

然后尝试打开,发现成功。

(二)使用bbed进行修复
1、从一个相同系统,相同数据库版本的1号数据文件中拷贝到问题主机中,然后写入到filelist.txt列表中

[oracle@yikuer trace]$ more filelist.txt 
1 /oracle/app/xiete/system01.dbf 734003200
2 /oracle/app/xiete/sysaux01.dbf 629145600
3 /oracle/app/xiete/undotbs01.dbf 209715200
4 /oracle/app/xiete/users01.dbf 5242880
5 /oracle/app/xiete/system01bbed.dbf

5号就是我们拷贝过来的文件,只要把路径对应好就行,序号往下顺延一个即可

[oracle@yikuer trace]$ more bbed.par 
blocksize=8192 
listfile=/oracle/app/diag/rdbms/hzmc/hzmc/trace/filelist.txt 
mode=edit 

这是bbed的启动参数文件(bbed密码默认为blockedit)

bbed parfile=/oracle/app/diag/rdbms/hzmc/hzmc/trace/bbed.par
Passwd:blockedit

做之前先备份文件,cp /oracle/app/xiete/system01.dbf /oracle/app/xiete/system01.dbf.bak

BBED> copy file 5 block 520 to file 1 block 520
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y
 File: /oracle/app/xiete/system01.dbf (1)

然后打开数据库即可

你可能感兴趣的:(故障解决,oracle,数据库)