如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com
ASM support 实用工具
关于使用ASM support 实用工具,特别是kfed 和 amdu的例子及评论。这些实用程序允许ASM磁盘组的故障排除,未安装的磁盘组。但要注意,写模式下的KFED可能会损坏您的ASM配置。注:当ASM磁盘组可以安装,X $表中类似的信息可用,如图ASM_Internals。 Oracle Support文档553639.1有关于amdu和kfed的有用信息
AMDU
- 允许转储ASM内容,无需打开磁盘组,使用普通冗余时允许检查ASM文件镜像,
- 故障排除的有力工具 在11g中引入,在10g中也可用。
- amdu运行创建具有report.tx文件的目录,可以选择加上.MAP和.IMG转储文件(元数据和数据,实际输出取决于在命令行中指定的交换机)
- 几个有趣的例子:
# displays online help for the utility
$ amdu -help
# extracts file 267 from ASM diskgroup TEST4_DATADG1
# Note: works as asmcmd cp but olso on dismounted disk groups!
$ amdu -dis ‘/dev/mapper/itsto*p1’ -extract TEST4_DATADG1.267
# compares primary and mirror extents in normal redundancy disk groups
# Useful to check for potential corruption issues
# results in the report.txt file
$ amdu -dis ‘/dev/mapper/itsto*p1’ -compare -extract TEST4_DATADG1.267 -noextract
# dump contents of a given diskgroup and does not create image file
# the .map file reports on all files found (column number 5 prefixed by the letter F)
$ amdu -dis ‘/dev/mapper/itsto*p1’ -noimage -dump TEST4_DATADG1
# print 10 blocks for the first extent of file 267
$ amdu -dis ‘/dev/mapper/itsto*p1’ -print TEST4_DATADG1.F267.X1.B1.C10
- 举例:如何从已卸除的磁盘组检索DB文件
- 从数据磁盘组中提取文件256,它往往是控制文件的第一个副本
- (或如上所示,使用磁盘组转储找到文件列表。DB警报日志和RMAN目录是其他来源,需要检查)
- 使用字符串命令来查找要检索的文件列表,并使用amdu提取它们
- -fullscan, -baddisks 和/或-former 在某些情况下也有用
$ amdu -dis ‘/dev/mapper/itsto*p1’ -extract TEST4_DATADG1.256
$ strings TEST4_DATADG1.256|grep TATEST4_DATADG1|less # find list of <FILENUM>
$ amdu -dis ‘/dev/mapper/itsto*p1’ -extract TEST4_DATADG1.<FILENUM>
KFED
- kfed可用于读写ASM元数据,特别是盘头和ASM(隐藏的)元数据文件。
- 注:写模式下的KFED是个功能强大,但有潜在危险的工具
# displays online help for the utility
$ kfed -help
# reads the disk header to stdout
$ kfed op=read dev=/dev/mapper/itstor741_11p1
# reads the specified AU and block into file /tmp/a
$ kfed op=read dev=/dev/mapper/itstor741_11p1 aunum=3 blknum=3 text=/tmp/a
# writes from /tmp/a into the specified AU and block
#block checksum is computed and written together with data
$ kfed op=write dev=/dev/mapper/itstor741_11p1 aunum=3 blknum=3 text=/tmp/a
- 举例:如何在已卸除的磁盘组上改变ASM磁盘组参数。
- 参数在ASM(隐藏)文件#9中
- 找到包含该信息的AU(一个常规冗余磁盘组可以有3个镜像副本,3个或更多故障组)
- 读取当前值到平面文件,更新文件,并使用KFED校验写出更新的文件
- 卸除并安装磁盘组,看变化(查询V $ asm_attribute)
SQL> select DISK_KFFXP,AU_KFFXP,LXN_KFFXP,SIZE_KFFXP from x$kffxp where NUMBER_KFFXP=9 and GROUP_KFFXP=1;
DISK_NUMBER PATH
————– —————————————-
41 /dev/mapper/itstor741_11p1
22 /dev/mapper/itstor739_10p1
34 /dev/mapper/itstor740_9p1
READ: kfed read /dev/mapper/itstor741_11p1 aunum=3 blknum=3 text=/tmp/a
EDIT: vi /tmp/a and change attribute value (for example change smart_scan_enable from TRUE to FALSE
to disable exadata smart scans in this particular diskgroup, note update length field too)
例如:
‘cell.smart_scan_capable’=’FALSE’;
kfede[0].name: smart_scan_capable ; 0x034: length=18
kfede[0].value: FALSE ; 0x074: length=5
kfede[0].length: 5 ; 0x174: 0x0005
‘cell.smart_scan_capable’=’TRUE’;
kfede[0].name: smart_scan_capable ; 0x034: length=18
kfede[0].value: TRUE ; 0x074: length=4
kfede[0].length: 4 ; 0x174: 0x0004
WRITE PRIMARY EXTENT: kfed write /dev/mapper/itstor741_11p1 aunum=3 blknum=3 text=/tmp/a
WRITE SECONDARY extents:
kfed write /dev/mapper/itstor739_10p1 aunum=3 blknum=3 text=/tmp/a
kfed write /dev/mapper/itstor740_9p1 aunum=2 blknum=3 text=/tmp/a
SQL> (dismount) and mount the group again to see the chagen in v$asm_attribute
注意更改参数后,可能需要在RDBMS上关闭智能扫描
alter system set cell_offload_processing=FALSE scope=both sid=’*’;
举例:如何恢复卸载的ASM磁盘组或从卸载的磁盘组恢复文件
- 方法1:使用amdu恢复文件: amdu -dis ‘/dev/mapper/devstor4_1p1’ -former -extract RDTEST2_TESTDROP.256
- 方法2:使用KFED更改磁盘头返回到成员
kfed read /dev/mapper/devstor4_1p1 aunum=0 blknum=0 text=devstor4_1p1.txt
vi devstor4_1p1.txt and change
from:
kfdhdb.hdrsts: 4 ; 0x027: KFDHDR_FORMER
to:
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER
kfed write /dev/mapper/devstor4_1p1 aunum=0 blknum=0 text=devstor4_1p1
举例:怎样重新命名ASM磁盘
- 在ASM 12c的情况下,程序是:
- alter diskgroup .. mount restricted
- alter diskgropu rename disk ‘…’ to ‘new path’;
- 该程序未公开,不受支持,可以在11g中使用(风险自担):
- 确定ASM文件N.2的所有的镜像盘区相关的磁盘组(即磁盘目录)。 例:
- select disk_kffxp,au_kffxp, path from x$kffxp x,v$asm_disk_stat v
where x.group_kffxp=2 and number_kffxp=2
and x.group_kffxp=v.group_number and x. disk_kffxp=v.disk_number
order by x.pxn_kffxp;
2) 卸载磁盘组
3) 读取盘头的第一个副本,更新至新的磁盘名称和长度。 例:
kfed read /dev/mapper/disk1name_p1 aunum=0 blknum=0 text=disk1name_p1_au0blk0
make a backup copy of the file disk1name_p1_au0blk0
vi disk1name_1p1_au0blk0
update -> kfddde[0].dskname: NEWNAME ; 0x038: length=7
kfed write /dev/mapper/disk1name_p1 aunum=0 blknum=0 text=disk1name_1p1_au0blk0
注意:似乎并不需要更新磁盘头的其他副本,当我们将安装磁盘时,ASM会考虑到这一点。
4)使用KFED读取、修改,并在目录的相关条目中写入新的磁盘名称。
这类似于N.3,但有着显著的微小差异:
– 从上面步骤(1)中,我们知道在目录在哪个aunum和磁盘中,但不一定在哪个blknum中。只需要尝试blknum= 0,blknum=1等,不需要很长时间。
– 对于正常或高冗余磁盘组,建议更新所有的镜像副本
5) 安装磁盘组,监测ASM警报日志,希望是最佳 🙂
6) 一些修复错误的建议:
– 卸载磁盘组–复制回已修改的块先前的值,在备份文件中使用
– 安装磁盘组
– 受影响的磁盘可能会是离线,使其回到在线。
- 怎样在10g使用KFED 和 AMDU
在11g中的$ ORACLE_HOME/ bin中KFED和amdu默认是可用的。在10g中则需要
- 对于KFED需要运行链接操作:
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk kfed
- 对于amdu, 需要从support下载. 详见文档号 553639.1
- 替代性的安装以及附加ORACLE_HOME和11gR2中的二进制文件也应努力实现使用amdu的目的
BBED
BBED是Oracle 内部实用工具,用来做 BLOCKEDIT. 在http://www.orafaq.com/papers/dissassembling_the_data_block.pdf 中有广泛讨论。
在 ASM中默认情况下BBED不起作用。 http://oracleprof.blogspot.com/2009/06/asm-and-bbed.html 中研究出了解决办法。下面可以找到上手的例子。需要注意的是BBED没有在11g和12C上建立开箱测试,因为在Oracle二进制分布中缺少正确构建BBED的一些文件。有一个简单的解决办法,即运行make之前从10G二进制中复制相关文件。 在Laurent Leturgez博客条目中有更多详细信息http://laurent-leturgez.com/2011/06/29/bbed-in-oracle-11g/
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
用上述方法转储一个盘区或是一个ASM文件,例如:
amdu -dis ‘/dev/mapper/itsto*p1’ -extract TEST4_DATADG1.555
Edit: vi bbed.par (or rather follow the example in the ASMBBED link above)
blocksize=8192
datafile=/ORA/dbs01/oracle/home/work/amdu_2010_02_01_17_22_39/TEST2_DATADG1_555.f
mode=browse
最后:
$ORACLE_HOME/rdbms/lib/bbed parfile=bbed.par
Comment