Oracle bbed 五个实用试验之修复坏块
(2016-05-11 00:31:30)
标签:
bbedblockoraclecorrputit |
分类: bbed |
本文介绍bbed五个实用试验之修复坏块,之前已经写过两边前载
《Oracle bbed 安装及五个实用试验之数据修改》
《Oracle bbed 五个实用试验之恢复删除的行》
在前面文章中有介绍《oracle_数据库坏块类型以及坏块处理》
在五个例子中记录坏块修复,当出现ora-01578错误时,oracle会设置块的序列号为0xff,
在块中位置为kcbh.seq_kcbh.
SQL> SELECT * FROM sun.bb1;
SELECT * FROM sun.bb1
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 6, block #
209)
ORA-01110: data file 6:
'/u01/app2/ora11/oradata/sunr/bbts01.dbf'
BBED> set dba 6,209
BBED> p kcbh
struct kcbh, 20 bytes
@0
BBED> m /x 01 offset 14
再根据bas_kcbh+type_kcbh+seq_kcbh修复tailchk值,由于是litter_endian倒序修改
51f9+06+01 变为
0106f951
BBED> m /x 0106f951 offset 8188
至此修复成功。
介绍在什么情况下会将buffer_cache中的块写到磁盘,且buffer_cache中是否有指定块。
在实验中经常要执行alter system flush
buffer_cache命令来重新读取磁盘数据,那么如何判断数据是否在buffer_cache中呢?
SELECT dirty FROM v$bh WHERE file#=6 And block#=19;
有数据表上在BUFFER_CACHE中,dirty字段为N为已写入磁盘。
通过以下几种方式制造坏块并进行修复
SQL> select a.*,rowid,
---------- ----------------------------- ---------- ----------
---------- ----------
a> 通过rman制造坏块
RMAN> blockrecover datafile 6 block 209
clear;
SQL> SELECT * FROM sun.bb1;
SELECT * FROM sun.bb1
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 6, block #
209)
ORA-01110: data file 6:
'/u01/app2/ora11/oradata/sunr/bbts01.dbf'
BBED> sum apply
Warning: contents of previous BIFILE will be lost. Proceed?
(Y/N) y
Check value for File 6, Block 209:
current = 0x3141, required = 0x3141
BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app2/ora11/oradata/sunr/bbts01.dbf
BLOCK = 209
DBVERIFY - Verification complete
Total Blocks Examined
: 1
Total Blocks Processed (Data) : 1
Total Blocks Failing (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty
: 0
Total Blocks Marked Corrupt : 0
Total Blocks Influx
: 0
Message 531 not found; product=RDBMS;
facility=BBED
b>
bbed制造坏块
BBED> corrupt dba 6,209
Block marked media corrupt.
BBED>
BBED>
BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app2/ora11/oradata/sunr/bbts01.dbf
BLOCK = 209
Block Checking: DBA = 25166033, Block Type = KTB-managed data
block
Found block already marked corrupted
DBVERIFY - Verification complete
Total Blocks Examined
: 1
Total Blocks Processed (Data) : 1
Total Blocks Failing (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty
: 0
Total Blocks Marked Corrupt : 0
Total Blocks Influx
: 0
Message 531 not found; product=RDBMS;
facility=BBED
BBED> p kcbh
struct kcbh, 20 bytes
@0
BBED> m /x 01 offset 14
------------------------------------------------------------------------
BBED> sum apply
Check value for File 6, Block 209:
current = 0x339f, required = 0x339f
BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app2/ora11/oradata/sunr/bbts01.dbf
BLOCK = 209
Block 209 is corrupt
Corrupt block relative dba: 0x018000d1 (file 0, block
209)
Fractured block found during verification
Data in bad block:
DBVERIFY - Verification complete
Total Blocks Examined
: 1
Total Blocks Processed (Data) : 0
Total Blocks Failing (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty
: 0
Total Blocks Marked Corrupt : 1
Total Blocks Influx
: 2
Message 531 not found; product=RDBMS;
facility=BBED
BBED> map
------------------------------------------------------------
BBED> m /x 01060000 offset 8188
------------------------------------------------------------------------
BBED> sum apply
Check value for File 6, Block 209:
current = 0x3361, required = 0x3361
BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app2/ora11/oradata/sunr/bbts01.dbf
BLOCK = 209
DBVERIFY - Verification complete
Total Blocks Examined
: 1
Total Blocks Processed (Data) : 1
Total Blocks Failing (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty
: 0
Total Blocks Marked Corrupt : 0
Total Blocks Influx
: 0
Message 531 not found; product=RDBMS;
facility=BBED
可以看到bbed的corrupt命令跟案例中的解决方式相同,修改seq_kcbh和tailchk