IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    查询asm disk directory的脚本

    小荷发表于 2015-07-19 13:08:56
    love 0

    简单写了一个查询asm disk directory。

    我们一般在asm磁盘mount不了的时候,需要检查磁盘头的信息,有时候盘头的信息会和disk directory的信息不一致,需要手工的修改disk dir或者盘头的信息。

    由于找disk dir有点麻烦,需要先找到file 1 block 1,找到file dir,再去找disk dir,如果磁盘多,这个过程会有点麻烦,因此写了个脚本,可以指示如何去找disk dir。

    脚本见附件。脚本运行完之后,会在当前目录下产生一个以时间戳结尾的chk_result文件。输出类似结果如下:

    [oracle@rac1 log]$ cat chk_result_20150719210305.txt
    #####################################
    #  ASM Disk Metadata Info
    #####################################
     
    ----------------------------
    ALL DISK INFO:
    ============================
    /dev/asm-acfs01 ACFS kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.dsknum: 0 ; 0x024: 0x0000
    /dev/asm-acfs02 ACFS kfdhdb.f1b1locn: 0 ; 0x0d4: 0x00000000 kfdhdb.dsknum: 1 ; 0x024: 0x0001
    /dev/asm-data01 DATA kfdhdb.f1b1locn: 447 ; 0x0d4: 0x000001bf kfdhdb.dsknum: 0 ; 0x024: 0x0000
    /dev/asm-data02 DATA kfdhdb.f1b1locn: 0 ; 0x0d4: 0x00000000 kfdhdb.dsknum: 1 ; 0x024: 0x0001
    /dev/asm-data03 DATA kfdhdb.f1b1locn: 0 ; 0x0d4: 0x00000000 kfdhdb.dsknum: 2 ; 0x024: 0x0002
    /dev/asm-fra01 FRA kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.dsknum: 0 ; 0x024: 0x0000
    /dev/asm-fra02 FRA kfdhdb.f1b1locn: 0 ; 0x0d4: 0x00000000 kfdhdb.dsknum: 1 ; 0x024: 0x0001
    /dev/asm-fra03 FRA kfdhdb.f1b1locn: 0 ; 0x0d4: 0x00000000 kfdhdb.dsknum: 2 ; 0x024: 0x0002
    /dev/asm-data04 MYTEST kfdhdb.f1b1locn: 0 ; 0x0d4: 0x00000000 kfdhdb.dsknum: 1 ; 0x024: 0x0001
    /dev/asm-data05 MYTEST kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.dsknum: 0 ; 0x024: 0x0000
    /dev/asm-fra04 MYTEST kfdhdb.f1b1locn: 0 ; 0x0d4: 0x00000000 kfdhdb.dsknum: 2 ; 0x024: 0x0002
    /dev/asm-ocrvot1 OCRVOT kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.dsknum: 0 ; 0x024: 0x0000
    /dev/asm-ocrvot2 OCRVOT kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.dsknum: 1 ; 0x024: 0x0001
    /dev/asm-ocrvot3 OCRVOT kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.dsknum: 2 ; 0x024: 0x0002
     
     
    ----------------------------
    FILE_DIR(f1b1) INFO:
    ============================
    /dev/asm-acfs01 ACFS kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.dsknum: 0 ; 0x024: 0x0000
    /dev/asm-data01 DATA kfdhdb.f1b1locn: 447 ; 0x0d4: 0x000001bf kfdhdb.dsknum: 0 ; 0x024: 0x0000
    /dev/asm-fra01 FRA kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.dsknum: 0 ; 0x024: 0x0000
    /dev/asm-data05 MYTEST kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.dsknum: 0 ; 0x024: 0x0000
    /dev/asm-ocrvot1 OCRVOT kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.dsknum: 0 ; 0x024: 0x0000
    /dev/asm-ocrvot2 OCRVOT kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.dsknum: 1 ; 0x024: 0x0001
    /dev/asm-ocrvot3 OCRVOT kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.dsknum: 2 ; 0x024: 0x0002
     
     
    ----------------------------
    DISK_DIR LOC:
    ============================
    ==> ACFS :
    kfffde[0].xptr.au:                    2 ; 0x4a0: 0x00000002
    kfffde[0].xptr.disk:                  1 ; 0x4a4: 0x0001
    ------------
    ==> DATA :
    kfffde[0].xptr.au:                    2 ; 0x4a0: 0x00000002
    kfffde[0].xptr.disk:                  1 ; 0x4a4: 0x0001
    ------------
    ==> FRA :
    kfffde[0].xptr.au:                    2 ; 0x4a0: 0x00000002
    kfffde[0].xptr.disk:                  2 ; 0x4a4: 0x0002
    ------------
    ==> MYTEST :
    kfffde[0].xptr.au:                    2 ; 0x4a0: 0x00000002
    kfffde[0].xptr.disk:                  2 ; 0x4a4: 0x0002
    ------------
    ==> OCRVOT :
    kfffde[0].xptr.au:                    3 ; 0x4a0: 0x00000003
    kfffde[0].xptr.disk:                  2 ; 0x4a4: 0x0002
    kfffde[1].xptr.au:                    3 ; 0x4a8: 0x00000003
    kfffde[1].xptr.disk:                  1 ; 0x4ac: 0x0001
    kfffde[2].xptr.au:                    3 ; 0x4b0: 0x00000003
    kfffde[2].xptr.disk:                  0 ; 0x4b4: 0x0000
    ------------
    ==> OCRVOT :
    kfffde[0].xptr.au:                    3 ; 0x4a0: 0x00000003
    kfffde[0].xptr.disk:                  2 ; 0x4a4: 0x0002
    kfffde[1].xptr.au:                    3 ; 0x4a8: 0x00000003
    kfffde[1].xptr.disk:                  1 ; 0x4ac: 0x0001
    kfffde[2].xptr.au:                    3 ; 0x4b0: 0x00000003
    kfffde[2].xptr.disk:                  0 ; 0x4b4: 0x0000
    ------------
    ==> OCRVOT :
    kfffde[0].xptr.au:                    3 ; 0x4a0: 0x00000003
    kfffde[0].xptr.disk:                  2 ; 0x4a4: 0x0002
    kfffde[1].xptr.au:                    3 ; 0x4a8: 0x00000003
    kfffde[1].xptr.disk:                  1 ; 0x4ac: 0x0001
    kfffde[2].xptr.au:                    3 ; 0x4b0: 0x00000003
    kfffde[2].xptr.disk:                  0 ; 0x4b4: 0x0000
    ------------

    根据上面的结果,可以去看如DATA这个diskgroup的disk dir在该diskgroup的disk1,aun 2上。那么,我们就可用用kfed看此disk dir的信息:

    [oracle@rac1 log]$ kfed read /dev/asm-data02 aun=2
    kfbh.endian:                          1 ; 0x000: 0x01
    kfbh.hard:                          130 ; 0x001: 0x82
    kfbh.type:                            6 ; 0x002: KFBTYP_DISKDIR
    kfbh.datfmt:                          1 ; 0x003: 0x01
    kfbh.block.blk:                       0 ; 0x004: blk=0
    kfbh.block.obj:                       2 ; 0x008: file=2
    kfbh.check:                  3293924642 ; 0x00c: 0xc4554d22
    kfbh.fcn.base:                    28405 ; 0x010: 0x00006ef5
    kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
    kfbh.spare1:                          0 ; 0x018: 0x00000000
    kfbh.spare2:                          0 ; 0x01c: 0x00000000
    kffdnd.bnode.incarn:                  1 ; 0x000: A=1 NUMM=0x0
    kffdnd.bnode.frlist.number:  4294967295 ; 0x004: 0xffffffff
    kffdnd.bnode.frlist.incarn:           0 ; 0x008: A=0 NUMM=0x0
    kffdnd.overfl.number:        4294967295 ; 0x00c: 0xffffffff
    kffdnd.overfl.incarn:                 0 ; 0x010: A=0 NUMM=0x0
    kffdnd.parent.number:                 0 ; 0x014: 0x00000000
    kffdnd.parent.incarn:                 1 ; 0x018: A=1 NUMM=0x0
    kffdnd.fstblk.number:                 0 ; 0x01c: 0x00000000
    kffdnd.fstblk.incarn:                 1 ; 0x020: A=1 NUMM=0x0
    kfddde[0].entry.incarn:               3 ; 0x024: A=1 NUMM=0x1
    kfddde[0].entry.hash:                 0 ; 0x028: 0x00000000
    kfddde[0].entry.refer.number:4294967295 ; 0x02c: 0xffffffff
    kfddde[0].entry.refer.incarn:         0 ; 0x030: A=0 NUMM=0x0
    kfddde[0].dsknum:                     0 ; 0x034: 0x0000
    kfddde[0].state:                      2 ; 0x036: KFDSTA_NORMAL
    kfddde[0].ddchgfl:                  132 ; 0x037: 0x84
    kfddde[0].dskname:            DATA_0000 ; 0x038: length=9
    kfddde[0].fgname:             DATA_0000 ; 0x058: length=9
    kfddde[0].crestmp.hi:          33016111 ; 0x078: HOUR=0xf DAYS=0x9 MNTH=0x2 YEAR=0x7df
    kfddde[0].crestmp.lo:        3814190080 ; 0x07c: USEC=0x0 MSEC=0x1fb SECS=0x35 MINS=0x38
    kfddde[0].failstmp.hi:                0 ; 0x080: HOUR=0x0 DAYS=0x0 MNTH=0x0 YEAR=0x0
    kfddde[0].failstmp.lo:                0 ; 0x084: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0
    kfddde[0].timer:                      0 ; 0x088: 0x00000000
    kfddde[0].size:                    1019 ; 0x08c: 0x000003fb
    kfddde[0].srRloc.super.hiStart:       0 ; 0x090: 0x00000000
    kfddde[0].srRloc.super.loStart:       0 ; 0x094: 0x00000000
    kfddde[0].srRloc.super.length:        0 ; 0x098: 0x00000000
    ……

    第0块盘是/dev/asm-data01,我们可以对比盘头的信息,是否有差异:

    [oracle@rac1 log]$ kfed read /dev/asm-data01
    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:                  2274119862 ; 0x00c: 0x878c50b6
    kfbh.fcn.base:                    27832 ; 0x010: 0x00006cb8
    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:                186646528 ; 0x020: 0x0b200000
    kfdhdb.dsknum:                        0 ; 0x024: 0x0000
    kfdhdb.grptyp:                        1 ; 0x026: KFDGTP_EXTERNAL
    kfdhdb.hdrsts:                        3 ; 0x027: KFDHDR_MEMBER
    kfdhdb.dskname:               DATA_0000 ; 0x028: length=9
    kfdhdb.grpname:                    DATA ; 0x048: length=4
    kfdhdb.fgname:                DATA_0000 ; 0x068: length=9
    kfdhdb.capname:                         ; 0x088: length=0
    kfdhdb.crestmp.hi:             33016111 ; 0x0a8: HOUR=0xf DAYS=0x9 MNTH=0x2 YEAR=0x7df
    kfdhdb.crestmp.lo:           3814190080 ; 0x0ac: USEC=0x0 MSEC=0x1fb SECS=0x35 MINS=0x38
    kfdhdb.mntstmp.hi:             33021547 ; 0x0b0: HOUR=0xb DAYS=0x13 MNTH=0x7 YEAR=0x7df
    kfdhdb.mntstmp.lo:            785752064 ; 0x0b4: USEC=0x0 MSEC=0x168 SECS=0x2d MINS=0xb
    kfdhdb.secsize:                     512 ; 0x0b8: 0x0200
    kfdhdb.blksize:                    4096 ; 0x0ba: 0x1000
    kfdhdb.ausize:                  1048576 ; 0x0bc: 0x00100000
    kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80
    kfdhdb.dsksize:                    1019 ; 0x0c4: 0x000003fb
    kfdhdb.pmcnt:                         2 ; 0x0c8: 0x00000002
    kfdhdb.fstlocn:                       1 ; 0x0cc: 0x00000001
    kfdhdb.altlocn:                       2 ; 0x0d0: 0x00000002
    kfdhdb.f1b1locn:                    447 ; 0x0d4: 0x000001bf
    kfdhdb.redomirrors[0]:                0 ; 0x0d8: 0x0000
    kfdhdb.redomirrors[1]:            65535 ; 0x0da: 0xffff
    kfdhdb.redomirrors[2]:            65535 ; 0x0dc: 0xffff
    kfdhdb.redomirrors[3]:            65535 ; 0x0de: 0xffff
    kfdhdb.dbcompat:              186646528 ; 0x0e0: 0x0b200000
    kfdhdb.grpstmp.hi:             33005974 ; 0x0e4: HOUR=0x16 DAYS=0xc MNTH=0x8 YEAR=0x7de
    kfdhdb.grpstmp.lo:           3913823232 ; 0x0e8: USEC=0x0 MSEC=0x20d SECS=0x14 MINS=0x3a
    kfdhdb.vfstart:                       0 ; 0x0ec: 0x00000000
    kfdhdb.vfend:                         0 ; 0x0f0: 0x00000000
    kfdhdb.spfile:                        0 ; 0x0f4: 0x00000000

    我的磁盘目前是正常的情况。在异常的情况下,可能会因为disk dir和disk header信息不一致,导致ora-15042 无法mount asm。

    disk directory ,
    kfddde[3].crestmp.hi: 32989455 ; 0x5b8: HOUR=0xf DAYS=0x8 MNTH=0x8 YEAR=0x7dd
    kfddde[3].crestmp.lo: 942520320 ; 0x5bc: USEC=0x0 MSEC=0x36e SECS=0x2 MINS=0xe
     
    ASM disk header level value was,
    kfdhdb.crestmp.hi: 32989458 ; 0x0a8: HOUR=0x12 DAYS=0x8 MNTH=0x8 YEAR=0x7dd
    kfdhdb.crestmp.lo: 2350652416 ; 0x0ac: USEC=0x0 MSEC=0x307 SECS=0x1 MINS=0x23
    <<<<<<<<<<<<<<

    我们可以用kfed修改一下之后,再merge进去,然后在mount起来,再运行check all norepair检查该diskgroup,没问题后,就可以起到数据库了。

    附件:asm_disk_dir_loc.zip



沪ICP备19023445号-2号
友情链接