设为首页 加入收藏

TOP

介绍Oracle自带的一些ASM维护工具(kfod/kfed/amdu)(六)
2015-11-21 02:07:05 来源: 作者: 【 】 浏览:18
Tags:介绍 Oracle 自带 一些 ASM 维护 工具 kfod/kfed/amdu
在我们晓得了磁盘头的备份机制,我们只需要执行一个简单的repair命令,就可以轻松的修复磁盘头信息,如下

利用repair命令恢复1号au中的备份信息到0号au磁盘头信息位置,如下

[oracle@rac01~]$ kfed repair /dev/asm-disk1

磁盘头的信息被备份信息恢复了,如下:

[oracle@rac01~]$ kfed read /dev/asm-disk1

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: 1997052059 ; 0x00c:0x7708989b

kfbh.fcn.base: 4892 ; 0x010: 0x0000131c

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

。。。。。。。(以下内容略)

4.2. Merge修复法

Repair修复asm磁盘头信息是最简单、最方便的方法,它主要是利用了ORACLE自动镜像备份的原因,但是这个功能只在10.2.0.5之后才有,而且如果一旦备份地方(1号AU,倒数第二个块)的信息也被损坏,这个时候就无法利用Repair方式进行恢复了,如果没有备份,那里恢复起来就会比较的麻烦。但是如果是一个磁盘组的某个磁盘头出现了问题,我们可以结合保存在磁盘中的文件字典(file directory)和(diskdirectory)信息的来进行磁盘头恢复,由于文件字典(filedirectory),只保存在磁盘组中其中一个磁盘中,这里以/dev/asm-disk1和/dev/asm-disk2为例,因为是同属一个磁盘组,磁盘组名为DATA,如下:

[oracle@rac01~]$ kfod di=all group=diskgroup ds=true

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

Disk Size Path DiskGroup User Group

================================================================================

1: 8189 Mb/dev/asm-disk1 DATA oracle dba

2: 8189 Mb/dev/asm-disk2 DATA oracle dba

3: 509 Mb /dev/asm-disk3 ARCH oracle dba

我们首先来看下,它们两个磁盘,谁是file directory磁盘,通过如下查询:

[oracle@rac01~]$ kfed read /dev/asm-disk1 |grep f1b1

kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002

[oracle@rac01~]$ kfed read /dev/asm-disk2 |grep f1b1

kfdhdb.f1b1locn: 0 ; 0x0d4: 0x00000000

如果查询出来的结果为非0的,就是file directory磁盘,这里我们可以看到,是/dev/asm-disk1这个磁盘中保存的filecdirectory信息。

1. 确认disk directory在磁盘中的位置

[oracle@rac01~]$ kfed read /dev/asm-disk1 |grep f1b1明确file directory的位置,在2号au

kfdhdb.f1b1locn: 2; 0x0d4: 0x00000002

[oracle@rac01~]$ kfed read /dev/asm-disk1 aun=2 blkn=2 |grep au |head -5明确disk directory的位置

kfffde[0].xptr.au: 3 ; 0x4a0: 0x00000003

kfffde[1].xptr.au: 4294967295 ; 0x4a8: 0xffffffff

kfffde[2].xptr.au: 4294967295 ; 0x4b0: 0xffffffff

kfffde[3].xptr.au: 4294967295 ; 0x4b8: 0xffffffff

kfffde[4].xptr.au: 4294967295 ; 0x4c0: 0xffffffff

2. 查看磁盘字典信息,因为我们损坏的是/dev/asm-disk2,因此我们这里只关注kfddde[1]的信息,重点关注红色的6条信息。

[oracle@rac01~]$ kfed read /dev/asm-disk1 aun=3 blkn=0 |grep name

kfddde[0].dskname: DATA_0000 ; 0x038: length=9

kfddde[0].fgname: DATA_0000 ; 0x058: length=9

kfddde[1].dskname: DATA_0001 ; 0x1f8: length=9

kfddde[1].fgname: DATA_0001 ; 0x218: length=9

kfddde[2].dskname: ; 0x3b8: length=0

kfddde[2].fgname: ; 0x3d8: length=0

。。。。。。(以下内容省略)

这里我们知道DATA磁盘组包含了2个磁盘,其中DATA_0000是本磁盘,那么DATA_0001就是损坏的/dev/asm-disk2磁盘了,因此我们只需要查看涉及该磁盘的相关信息,如下:

[oracle@rac01~]$ kfed read /dev/asm-disk1 aun=3 blkn=0 |more

。。。。。。(略)

kfddde[1].entry.incarn: 1 ; 0x1e4: A=1 NUMM=0x0

kfddde[1].entry.hash: 1 ; 0x1e8: 0x00000001

kfddde[1].entry.refer.number:4294967295; 0x1ec: 0xffffffff

kfddde[1].entry.refer.incarn: 0 ; 0x1f0: A=0 NUMM=0x0

kfddde[1].dsknum: 1 ; 0x1f4: 0x0001

kfddde[1].state: 2 ; 0x1f6: KFDSTA_NORMAL

kfddde[1].ddchgfl: 132 ; 0x1f7: 0x84

kfddde[1].dskname: DATA_0001 ; 0x1f8: length=9

kfddde[1].fgname: DATA_0001 ; 0x218: length=9

kfddde[1].crestmp.hi: 330208

首页 上一页 3 4 5 6 7 8 下一页 尾页 6/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇为什么要学习Oracle技术? 下一篇oracle中往varchar2格式的字段中..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: