查看: 560|回复: 1

[原创] bbed 修复ASM磁盘头演示

[复制链接]
论坛徽章:
21
娜美
日期:2017-06-26 15:18:15火眼金睛
日期:2018-04-30 22:00:00目光如炬
日期:2018-07-29 22:00:00火眼金睛
日期:2018-08-31 22:00:00目光如炬
日期:2018-09-02 22:00:00目光如炬
日期:2018-09-16 22:00:01火眼金睛
日期:2018-09-30 22:00:00目光如炬
日期:2018-10-14 22:00:00火眼金睛
日期:2018-11-30 22:00:01目光如炬
日期:2018-04-29 22:00:00
发表于 2018-12-23 10:34 | 显示全部楼层 |阅读模式
本帖最后由 sunyunyi 于 2018-12-24 09:29 编辑

                          BBED 修复ASM磁盘头演示
作者简介:
----------------------------------------------------------------------
@ 孙显鹏,海天起点oracle技术专家,十年从业经验
@ 精通oracle内部原理,擅长调优和解决疑难问题
@ 致力于帮助客户解决生产中的问题,提高生产效率。
@ 爱好:书法,周易,中医。微信:sunyunyi_sun
@ 易曰:精义入神,以致用也!
@ 调优乃燮理阴阳何其难也!
----------------------------------------------------------------------


环境: linux 7 + oracle 12C grid
测试使用BBED 修改ASM磁盘头信息,解决ora-15196


测试步骤:

bbed

set filename '/dev/raw/raw1' blocksize 512 mode edit;

or:

vi /home/oracle/asm_header.txt
1 /dev/raw/raw1 2000000000
set list '/home/oracle/asm_header.txt'

BBED> map
File: /dev/raw/raw1 (1)
Block: 1                                     Dba:0x00400001
------------------------------------------------------------
Undo Segment Header                   --这里显示的undo 头!!

struct kcbh, 20 bytes                      @0      

struct ktect, 44 bytes                     @20      

struct ktetb[1], 8 bytes                   @64      

struct ktuxc, 104 bytes                    @18776   

struct ktuxe[255], 10200 bytes             @18880   

ub4 tailchk                                @508     


BBED> p kcbh
struct kcbh, 20 bytes                       @0      
   ub1 type_kcbh                            @0        0x01
   ub1 frmt_kcbh                            @1        0x82
   ub1 spare1_kcbh                          @2        0x01
   ub1 spare2_kcbh                          @3        0x01
   ub4 rdba_kcbh                            @4        0x00000000
   ub4 bas_kcbh                             @8        0x80000000
   ub2 wrp_kcbh                             @12       0xb315
   ub1 seq_kcbh                             @14       0x33
   ub1 flg_kcbh                             @15       0xe9 (KCBHFNEW)
   ub2 chkval_kcbh                          @16       0x0000
   ub2 spare3_kcbh                          @18       0x0000


BBED> d offset 0 count 8
File: /dev/raw/raw1 (1)
Block: 1                Offsets:    0 to    7           Dba:0x00400001
------------------------------------------------------------------------
01820101 00000000

<32 bytes per line>

注意这里以4个字节为单位显示,共32bit,注意顺序,单个偏移量如 0,1,2,3, 因为是单个字节所以顺序不变,
一个字节8位是两个16进制字符!比如15b333e9,首先以两个字节为一个单位高低位转换
(把后两个字节和前两个字节交换位置):33e91533,然后每两个字节内部再交换高低为,
最后正确的顺序为e933b315,转换为10进制为3912479509。如下:

kfbh.check:                  3912479509 ; 0x00c: 0xe933b315

比如00000080高低转换后为0x80000000 是一个对象,所以低四位在高位存,0080也需要转换为8000。
这个0x80000000的十进制为2147483648,就时下面kfed 读取的obj信息:
kfbh.block.obj:              2147483648 ; 0x008: disk=0

把这个一定要搞清楚!不然会出问题!


BBED> d offset 0 count 32
File: /dev/raw/raw1 (1)
Block: 1                Offsets:    0 to   31           Dba:0x00400001
------------------------------------------------------------------------
01820101 00000000 00000080 15b333e9 00000000 00000000 00000000 00000000

<32 bytes per line>

对照下面KFED 读的磁盘头格式,修改kfbh.endian=0,此时test组会unmount:

BBED> set mode edit;
        MODE            Edit

BBED> m /x 0082 offset 0
File: /dev/raw/raw1 (1)
Block: 1                Offsets:    0 to   31           Dba:0x00400001
------------------------------------------------------------------------
00820101 00000000 00000080 15b333e9 00000000 00000000 00000000 00000000

<32 bytes per line>

BBED> sum apply
Check value for File 1, Block 1:
current = 0x0000, required = 0x0000

BBED> verify;
DBVERIFY - Verification starting
FILE = /dev/raw/raw1
BLOCK = 0

Block 0 is corrupt
Corrupt block relative dba: 0x00000000 (file 0, block 0)
Bad header found during verification
Data in bad block:
type: 0 format: 2 rdba: 0x00000000
last change scn: 0xb315.80000000 seq: 0x33 flg: 0xe9
spare1: 0x1 spare2: 0x1 spare3: 0x0
consistency value in tail: 0x00000000
check value in block header: 0x0
block checksum disabled


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           : 0
Message 531 not found;  product=RDBMS; facility=BBED

存在坏块!!


[grid@exadb ~]$ kfed read '/dev/raw/raw1'
kfbh.endian:                          0 ; 0x000: 0x00
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            1 ; 0x002: KFBTYP_DISKHEAD
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       0 ; 0x004: blk=0
kfbh.block.obj:              2147483648 ; 0x008: disk=0
kfbh.check:                  3912479509 ; 0x00c: 0xe933b315
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfdhdb.driver.provstr:         ORCLDISK ; 0x000: length=8
kfdhdb.driver.reserved[0]:            0 ; 0x008: 0x00000000
kfdhdb.driver.reserved[1]:            0 ; 0x00c: 0x00000000
kfdhdb.driver.reserved[2]:            0 ; 0x010: 0x00000000
kfdhdb.driver.reserved[3]:            0 ; 0x014: 0x00000000
kfdhdb.driver.reserved[4]:            0 ; 0x018: 0x00000000
kfdhdb.driver.reserved[5]:            0 ; 0x01c: 0x00000000
kfdhdb.compat:                168820736 ; 0x020: 0x0a100000



SQL> alter diskgroup test dismount;

Diskgroup altered.

SQL> alter diskgroup test mount;
alter diskgroup test mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15017: diskgroup "TEST" cannot be mounted
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "TEST"

将值修改回去:
BBED> m/x 0182 offset 0
File: /dev/raw/raw1 (1)
Block: 1                Offsets:    0 to   31           Dba:0x00400001
------------------------------------------------------------------------
01820101 00000000 00000080 15b333e9 00000000 00000000 00000000 00000000

<32 bytes per line>

BBED> sum apply
Check value for File 1, Block 1:
current = 0x0000, required = 0x0000

BBED> verify
DBVERIFY - Verification starting
FILE = /dev/raw/raw1
BLOCK = 0

Block 0 is corrupt
Corrupt block relative dba: 0x00000000 (file 0, block 0)
Bad header found during verification
Data in bad block:
type: 1 format: 2 rdba: 0x00000000
last change scn: 0xb315.80000000 seq: 0x33 flg: 0xe9
spare1: 0x1 spare2: 0x1 spare3: 0x0
consistency value in tail: 0x00000000
check value in block header: 0x0
block checksum disabled


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           : 0
Message 531 not found;  product=RDBMS; facility=BBED



SQL> alter diskgroup test mount;

Diskgroup altered.



下面是正常的磁盘头信息: 对比上面的信息
[grid@exadb ~]$ kfed read '/dev/raw/raw1'
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            1 ; 0x002: KFBTYP_DISKHEAD
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       0 ; 0x004: blk=0
kfbh.block.obj:              2147483648 ; 0x008: disk=0
kfbh.check:                  3912479509 ; 0x00c: 0xe933b315
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfdhdb.driver.provstr:         ORCLDISK ; 0x000: length=8
kfdhdb.driver.reserved[0]:            0 ; 0x008: 0x00000000
kfdhdb.driver.reserved[1]:            0 ; 0x00c: 0x00000000
kfdhdb.driver.reserved[2]:            0 ; 0x010: 0x00000000
kfdhdb.driver.reserved[3]:            0 ; 0x014: 0x00000000
kfdhdb.driver.reserved[4]:            0 ; 0x018: 0x00000000
kfdhdb.driver.reserved[5]:            0 ; 0x01c: 0x00000000
kfdhdb.compat:                168820736 ; 0x020: 0x0a100000
kfdhdb.dsknum:                        0 ; 0x024: 0x0000
kfdhdb.grptyp:                        1 ; 0x026: KFDGTP_EXTERNAL
kfdhdb.hdrsts:                        3 ; 0x027: KFDHDR_MEMBER
kfdhdb.dskname:               TEST_0000 ; 0x028: length=9
kfdhdb.grpname:                    TEST ; 0x048: length=4
kfdhdb.fgname:                TEST_0000 ; 0x068: length=9
kfdhdb.capname:                         ; 0x088: length=0
kfdhdb.crestmp.hi:             33075656 ; 0x0a8: HOUR=0x8 DAYS=0xe MNTH=0xc YEAR=0x7e2
kfdhdb.crestmp.lo:            708911104 ; 0x0ac: USEC=0x0 MSEC=0x48 SECS=0x24 MINS=0xa
kfdhdb.mntstmp.hi:             33075656 ; 0x0b0: HOUR=0x8 DAYS=0xe MNTH=0xc YEAR=0x7e2
kfdhdb.mntstmp.lo:            730807296 ; 0x0b4: USEC=0x0 MSEC=0x3cf SECS=0x38 MINS=0xa
kfdhdb.secsize:                     512 ; 0x0b8: 0x0200
kfdhdb.blksize:                    4096 ; 0x0ba: 0x1000
kfdhdb.ausize:                  1048576 ; 0x0bc: 0x00100000
kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80
kfdhdb.dsksize:                    2048 ; 0x0c4: 0x00000800
kfdhdb.pmcnt:                         2 ; 0x0c8: 0x00000002
kfdhdb.fstlocn:                       1 ; 0x0cc: 0x00000001
kfdhdb.altlocn:                       2 ; 0x0d0: 0x00000002
kfdhdb.f1b1locn:                      2 ; 0x0d4: 0x00000002
kfdhdb.redomirrors[0]:                0 ; 0x0d8: 0x0000
kfdhdb.redomirrors[1]:                0 ; 0x0da: 0x0000
kfdhdb.redomirrors[2]:                0 ; 0x0dc: 0x0000
kfdhdb.redomirrors[3]:                0 ; 0x0de: 0x0000
kfdhdb.dbcompat:              168820736 ; 0x0e0: 0x0a100000
kfdhdb.grpstmp.hi:             33075656 ; 0x0e4: HOUR=0x8 DAYS=0xe MNTH=0xc YEAR=0x7e2
kfdhdb.grpstmp.lo:            676819968 ; 0x0e8: USEC=0x0 MSEC=0x1dd SECS=0x5 MINS=0xa

孙显鹏

2018-12


论坛徽章:
4
优秀写手
日期:2015-02-01 06:00:14优秀写手
日期:2015-02-12 06:00:15喜羊羊
日期:2015-03-04 14:52:462015年新春福章
日期:2015-03-06 11:58:18
发表于 2019-5-23 14:50 | 显示全部楼层
正在学习bbed,感谢分享,厉害。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表