Oracle ASM实用工具

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638    QQ号:47079569    邮箱:service@parnassusdata.com

ASM support 实用工具

关于使用ASM support 实用工具,特别是kfed  amdu的例子及评论。这些实用程序允许ASM磁盘组的故障排除,未安装的磁盘组。但要注意,写模式下的KFED可能会损坏您的ASM配置。注:当ASM磁盘组可以安装,X $表中类似的信息可用,如图ASM_Internals Oracle Support文档553639.1有关于amdukfed的有用信息

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= 0blknum=1等,不需要很长时间。

对于正常或高冗余磁盘组,建议更新所有的镜像副本

5) 安装磁盘组,监测ASM警报日志,希望是最佳  🙂

6) 一些修复错误的建议:

卸载磁盘组复制回已修改的块先前的值,在备份文件中使用

安装磁盘组

受影响的磁盘可能会是离线,使其回到在线。 

  • 怎样在10g使用KFED AMDU

11g中的$ ORACLE_HOME/ binKFEDamdu默认是可用的。在10g中则需要

  • 对于KFED需要运行链接操作:

cd $ORACLE_HOME/rdbms/lib

make -f ins_rdbms.mk kfed

  • 对于amdu, 需要从support下载. 详见文档号 553639.1
  • 替代性的安装以及附加ORACLE_HOME11gR2中的二进制文件也应努力实现使用amdu的目的

BBED

BBEDOracle 内部实用工具,用来做  BLOCKEDIT. http://www.orafaq.com/papers/dissassembling_the_data_block.pdf 中有广泛讨论。

ASM中默认情况下BBED不起作用。   http://oracleprof.blogspot.com/2009/06/asm-and-bbed.html 中研究出了解决办法。下面可以找到上手的例子。需要注意的是BBED没有在11g12C上建立开箱测试,因为在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

*

沪ICP备14014813号-2

沪公网安备 31010802001379号