一、BBED(Oracle Block Browerand EDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要重新连接。 二、配置BBED oracle11g缺失bbed的文件,需要将oracle10g的文件复制到oracle11g的相应目录 三、操作 在10g的数据库中 cd /u01/oracle/product/10.2.0/rdbms/lib [[email?protected] lib]$ scp ssbbded.o sbbdpt.o [email?protected]:/home/oracle cd /u01/oracle/product/10.2.0/rdbms/mesg
[[email?protected] mesg]$ scp bbedus.msb [email?protected]:/home/oracle
在11g数据库中 [[email?protected] ~]$ ls bbedus.msb sbbdpt.o ssbbded.o
cp bbedus.msb $ORACLE_HOME/rdbms/mesg cp sbbdpt.o ssbbded.o $ORACLE_HOME/rdbms/lib
[[email?protected] lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
[[email?protected] 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
[email?protected]> alter system flush buffer_cache;
System altered. [email?protected]> 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工具检查
?
[email?protected]:~> 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查看坏块 [email?protected]> 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
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|