BBED制作空块并用rman恢复(修改坏块前一定要做rman备份!!!)

一、BBED(Oracle Block Browerand EDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要重新连接。
二、配置BBED
oracle11g缺失bbed的文件,需要将oracle10g的文件复制到oracle11g的相应目录
三、操作
在10g的数据库中
cd /u01/oracle/product/10.2.0/rdbms/lib
[oracle@dba lib]$ scp ssbbded.o sbbdpt.o [email protected]:/home/oracle
cd /u01/oracle/product/10.2.0/rdbms/mesg

[oracle@dba mesg]$ scp bbedus.msb [email protected]:/home/oracle

在11g数据库中
[oracle@dbtest123 ~]$ ls
bbedus.msb sbbdpt.o ssbbded.o

cp bbedus.msb $ORACLE_HOME/rdbms/mesg
cp sbbdpt.o ssbbded.o $ORACLE_HOME/rdbms/lib

[oracle@dbtest123 lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed

[oracle@dbtest123 lib]$ cp bbed $ORACLE_HOME/bin
四、使用

首先做个rman全备

$ bbed
Password:
BBED是Oracle 内部使用的命令,所以Oracle 不提供技术支持。 为了安全,BBED设置了口令保护,默认密码为blockedit。


SQL> select file#||' '||name||' '||bytes from v$datafile ;


bbed parfile=/home/oracle/bbed_parameter.txt

BBED> show
FILE# 1
BLOCK# 1
OFFSET 0
DBA 0x00400001 (4194305 1,1)
FILENAME /u01/app/oracle/oradata/testdb/system01.dbf
BIFILE bifile.bbd
LISTFILE /home/oracle/xxzx/BBED/psdb_file.txt
BLOCKSIZE 8192
MODE Edit
EDIT Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No

BBED> info all
File# Name Size(blks)
----- ---- ----------
1 /u01/app/oracle/oradata/testdb/system01.dbf 134400
2 /u01/app/oracle/oradata/testdb/sysaux01.dbf 78080
3 /u01/app/oracle/oradata/testdb/undotbs01.dbf 245632
4 /u01/app/oracle/oradata/testdb/users01.dbf 52320
5 /home/oracle/xxzx/CALS7_DATA.dbf 150016
6 /home/oracle/xxzx/CALS7_CONT.dbf 414720

BBED>

五、制作坏块

select
dbms_rowid.ROWID_RELATIVE_FNO(rowid) fno,
dbms_rowid.ROWID_BLOCK_NUMBER(rowid) bno,
dbms_rowid.ROWID_ROW_NUMBER(rowid) rowno,
a from scott.test;


BBED> set dba 4,151
DBA 0x01000097 (16777367 4,151)

BBED> dump /v dba 9,134 offset 0

BBED> modify /x 12345678 dba 9,134 offset 0


BBED> sum dba 9,134 apply

SYS@testdb> alter system flush buffer_cache;

System altered.
SCOTT@testdb> select * from t1;
ERROR:
ORA-01578: ORACLE data block corrupted (file # 4, block # 151)
ORA-01110: data file 4: '/u01/app/oracle/oradata/testdb/users01.dbf'
坏块制作成功。
六、通过dev工具检查

oracle@cpxyts01:~> dbv file= /u01/app/oracle/oradata/testdb/users01.dbf

发现坏块


Total Pages Marked Corrupt : 1

七、通过rman检查验证坏块

RMAN> backup check logical validate database;


validate found one or more corrupt blocks
See trace file /u01/app/oracle/diag/rdbms/testdb/testdb/trace/testdb_ora_10686.trc for details
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
List of Control File and SPFILE
===============================
File Type Status Blocks Failing Blocks Examined
------------ ------ -------------- ---------------
SPFILE OK 0 2
Control File OK 0 704
Finished backup at 21-JAN-19

发现有坏块信息
查看 /u01/app/oracle/diag/rdbms/testdb/testdb/trace/testdb_ora_10686.trc
发现Data in bad block:
type: 18 format: 4 rdba: 0x01000097
last change scn: 0x0000.00337329 seq: 0x1 flg: 0x06
spare1: 0x56 spare2: 0x78 spare3: 0x0
consistency value in tail: 0x73290601
check value in block header: 0xf017
computed block checksum: 0x0
坏块上有数据

单独检查数据文件
RMAN> backup check logical validate datafile 4;
通过数据库中的视图v$database_block_corruption查看坏块
SYS@testdb> select file#,block#,blocks from v$database_block_corruption;

FILE# BLOCK# BLOCKS
---------- ---------- ----------
4 151 1


坏块恢复


RMAN> blockrecover datafile 9 block 134;


(得有备份才能恢复,在修改坏块之前要做全备。)

set 设定当前的环境
show 查看当前的环境参数,跟sqlplus的同名命令类似。
dump 列出指定block的内容
find 在指定的block中查找指定的字符串,结果是显示出字符串,及其偏移量–offset,偏移量就是在block中的字节数
modify 修改指定block的指定偏移量的值,可以在线修改。
copy 把一个block的内容copy到另一个block中
verify 检查当前环境是否有坏块
sum 计算block的checksum,modify之后block就被标识为坏块,current checksum与reqired checksum不一致,sum命令可以计算出新的checksum并应用到当前块。
undo 回滚当前的修改操作,如果手误做错了,undo一下就ok了,回到原来的状态。
revert 回滚所有之前的修改操作,意思就是 undo all

猜你喜欢

转载自www.cnblogs.com/Wardenking/p/10318211.html