设为首页 加入收藏

TOP

介绍Oracle自带的一些ASM维护工具(kfod/kfed/amdu)(七)
2015-11-21 02:07:05 来源: 作者: 【 】 浏览:15
Tags:介绍 Oracle 自带 一些 ASM 维护 工具 kfod/kfed/amdu
74 ; 0x238: HOUR=0xa DAYS=0x1eMNTH=0x6 YEAR=0x7df

kfddde[1].crestmp.lo: 574201856 ; 0x23c: USEC=0x0 MSEC=0x268SECS=0x23 MINS=0x8

kfddde[1].failstmp.hi: 0 ; 0x240: HOUR=0x0 DAYS=0x0MNTH=0x0 YEAR=0x0

kfddde[1].failstmp.lo: 0 ; 0x244: USEC=0x0 MSEC=0x0SECS=0x0 MINS=0x0

kfddde[1].timer: 0 ; 0x248: 0x00000000

kfddde[1].size: 8189 ; 0x24c: 0x00001ffd

。。。。。。(略)

3. 根据以上信息,生成/dev/asm-disk2的磁盘头信息(这里可以通过/dev/asm-disk1的磁盘头信息修改)

[oracle@rac01 ~]$ kfed read /dev/asm-disk1aun=0 blkn=0 text=/home/oracle/asm-disk1.txt

利用编辑器打开生成的文件asm-disk1.txt,主要对应修改以下内容

原始的

kfbh.block.obj: 2147483648 ; 0x008: disk=0

kfdhdb.dsknum: 0 ; 0x024: 0x0000

kfdhdb.dskname: DATA_0000 ; 0x028: length=9

kfdhdb.fgname: DATA_0000 ; 0x068: length=9

kfdhdb.crestmp.hi:33020845 ; 0x0a8: HOUR=0xd DAYS=0x1dMNTH=0x6 YEAR=0x7df

kfdhdb.crestmp.lo:1437992960 ; 0x0ac: USEC=0x0 MSEC=0x182 SECS=0x1b MINS=0x15

kfdhdb.dsksize: 8189; 0x0c4: 0x00001ffd

kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002

修改后的

kfbh.block.obj: 2147483649 ; 0x008: disk=1 (按顺序加1)

kfdhdb.dsknum: 1 ; 0x024: 0x0001 (参照kfddde[1].dsknum

kfdhdb.dskname: DATA_0001 ; 0x028: length=9 (参照kfddde[1].dskname

kfdhdb.fgname: DATA_0001 ; 0x068: length=9 (参照kfddde[1].fgname

kfdhdb.crestmp.hi:33020874; 0x0a8: HOUR=0xd DAYS=0x1d MNTH=0x6 YEAR=0x7df (参照kfddde[1].crestmp.hi

kfdhdb.crestmp.lo:574201856; 0x0ac: USEC=0x0 MSEC=0x182SECS=0x1b MINS=0x15 (参照kfddde[1].crestmp.lo

kfdhdb.dsksize: 8189; 0x0c4: 0x00001ffd (参照kfddde[1].size

kfdhdb.f1b1locn: 0 ; 0x0d4: 0x00000000 (因为asm-disk2为非file directory文件)

修改完成后,保存为新的文本名称为asm-disk2.txt,最后利用merge命令,写入/dev/asm-disk2磁盘头中,如下:

[oracle@rac01~]$ kfed merge /dev/asm-disk2 text=/home/oracle/asm-disk2.txt

?

来总结下利用merge修复的基本步骤,1.首先确认file directory的位置,再根据filedirectory找到dis directory的位置;2.根据disk directory找出磁盘信息,手工编辑磁盘头文件;3最后用kfed merge到对应的磁盘头中,生成磁盘头信息。

最后提一下,一般情况,file directory在磁盘组某个磁盘的au=2的位置,但是如果对磁盘组进行了增加和删除操作,就可能需要手工去查询了。

5.amdu工具使用

前面我们介绍了对磁盘头信息的修复,接下来我们介绍一个对存放在ASM里面的数据进行抽取的工具amdu。我们知道,如果asm实例是启动状态,我们可以通过asmcd或者rman命令将asm中的文件提取出来,但是如果asm无法启动的情况下,以上2个工具就无发实现了,这时候我们就可以用amdu来进行数据文件的抽取,这对于极端情况下的数据恢复是非常有帮助的。

AMDU是Oracle 11g里自带的一个免费的工具,用于分析ASM磁盘组的元数据以及从不能mount的磁盘组中往外抽取数据文件,它的原理就是跳过磁盘头直接解析磁盘中的filedirectory部分的内容,然后找到文件和目录结构,根据数据文件号,直接将文件抽取出来。因此,使用AMDU一般要满足以下三个情况:1.ASM实例无法启动;2.磁盘中的filedirectory信息完整;3.知道数据文件号;这样我们就可以尝试把数据文件直接抽取出来,在本地启动数据库实例,接下来我们来操作下。

1. 关闭ASM实例

[oracle@rac01~]$ sqlplus /nolog

SQL*Plus:Release 11.2.0.4.0 Production on Thu Jul 23 14:33:24 2015

Copyright(c) 1982, 2013, Oracle. All rightsreserved.

SQL>conn / as sysasm

Connected.

SQL>shutdown immediate;

ASMdiskgroups dismounted

ASMinstance shutdown

由于ASM中存放有CRS相关组件,因此CRS集群也被停止,整个数据库无法访问,如下

[oracle@rac01~]$ crs_stat -t

CRS-0184:Cannot communicate with the CRS daemon.

因为ASM实例没有启动,常用的asmcmd也无法访问相关的信息,如下

[oracle@rac01~]$ asmcmd

Connectedto an idle instance.

ASMCMD>ls

ASMCMD-8102:no connection to Oracle ASM; command requires Oracle ASM to run

过去遇到这种情况,我们只能想方设法的启动ASM实例,不然就只能通过备份文件恢复数据,现在我们可以尝试通过amdu工具,将数据文件直接抽取出来。

2. 利用ODU中的asmcmd工具查看数据文件号

由于ORACLE自带的ASMCMD工具无法使用,这时候我们就要借助牛人开发的ODU工具进行查看了,ODU是技术达人开发的一块收费的数据抽取工具(http://www.oracleodu.com/cn/download),我们只需要下载个试用版,用于查询下就行了。

[oracle@rac01~]$ tar -xvf odu_trial_413_linux_x86.tar

odu/

odu/asmdisk.txt

od

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

评论

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