暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

运维日记丨5分钟掌握ORACLE AMDU工具

新运维新数据 2022-06-25
1712

各位新朋友~记得先点蓝字关注我哦~


当ORACLE RAC 集群发生严重故障,集群无法正常启动。在没有容灾、备份的情况下,如何恢复数据库,ASM中快速转储数据文件,ORACLE AMDU工具是一个不错的选择。


AMDU是ORACLE针对ASM开发的源数据转储工具,其全称为ASM Metadata Dump Utility(AMDU)。从ORACLE 11G 开始,ORACLE 自带amdu工具。但其在10g版本上也适用,可在Placeholder for AMDU binaries and using with ASM 10g, 11g, 12c (Doc ID 553639.1)文档中进行下载。


下面介绍amdu文件转储流程。

对DATA磁盘组进行转储

    [grid@rac2 ~]$ amdu -diskstring "/dev/asm-disk*"  #/dev/asm-disk*为asm_diskstring 参数值
    amdu_2022_06_22_13_43_54/
    [grid@rac2 ~]$ cd amdu_2022_06_22_13_43_54
    [grid@rac2 amdu_2022_06_22_13_43_54]$ amdu -diskstring "/dev/asm-disk*" -dump "DATA" #把DATA磁盘组转储出来
    amdu_2022_06_22_13_44_48/
    AMDU-00204: Disk N0002 is in currently mounted diskgroup DATA
    AMDU-00201: Disk N0002: '/dev/asm-diskb'
    [grid@rac2 amdu_2022_06_22_13_43_54]$ cd amdu_2022_06_22_13_44_48
    [grid@rac2 amdu_2022_06_22_13_44_48]$ ls -rlt
    total 113708
    -rw-r--r-- 1 grid oinstall 9520 Jun 22 13:44 DATA.map
    -rw-r--r-- 1 grid oinstall 116416512 Jun 22 13:44 DATA_0001.img
    -rw-r--r-- 1 grid oinstall 5750 Jun 22 13:44 report.txt

    说明:

    <diskgroup>_0001.img - 磁盘组内容的精确转储,大小限制为2GB,可为多个文件

    <diskgroup>.map - 可用于查找磁盘上 ASM 元数据的确切位置

    report.txt - 包含扫描磁盘的详细信息

    转储控制文件

      [grid@rac2 amdu_2022_06_22_13_44_48]$ amdu -diskstring "/dev/asm-disk*" -extract  DATA.260  -output control.260 -noreport -nodir
      AMDU-00204: Disk N0002 is in currently mounted diskgroup DATA
      AMDU-00201: Disk N0002: '/dev/asm-diskb'
      [grid@rac2 amdu_2022_06_22_13_44_48]$ ls -rlt
      total 131772
      -rw-r--r-- 1 grid oinstall 9520 Jun 22 13:44 DATA.map
      -rw-r--r-- 1 grid oinstall 116416512 Jun 22 13:44 DATA_0001.img
      -rw-r--r-- 1 grid oinstall 5750 Jun 22 13:44 report.txt
      -rw-r--r-- 1 grid oinstall 18497536 Jun 22 13:50 control.260

      说明:转储控制文件命令中DATA.260 表示转储DATA磁盘组中ASM FILE_NUMBER为260的文件,即控制文件,可从参数文件中获取或者数据库alert日志中获取。


      转储数据文件

      当控制文件转储完成之后,可从控制文件中获取数据文件的信息,然后使用命令amdu -diskstring "/dev/asm-disk*" -extract  DATA.<ASM FILE_NUMBER>  -output <名字> -noreport -nodir  转储数据文件


      从控制文件中获取数据文件的信息:

        [grid@rac2 amdu_2022_06_22_13_44_48]$ strings control.260 |grep "+DATA"|grep -v archivelog|grep -v snapcf|sort|uniq -c
        2 +DATA/orcl/datafile/sysaux.257.1061895965
        2 +DATA/orcl/datafile/system.256.1061895965
        2 +DATA/orcl/datafile/test01.dbf
        2 +DATA/orcl/datafile/test.269.1071138281
        2 +DATA/orcl/datafile/undotbs1.258.1061895965
        2 +DATA/orcl/datafile/undotbs2.264.1061896109
        2 +DATA/orcl/datafile/users.259.1061895965
        2 +DATA/orcl/onlinelog/group_1.261.1061896041
        2 +DATA/orcl/onlinelog/group_2.262.1061896041
        2 +DATA/orcl/onlinelog/group_3.265.1061896143
        2 +DATA/orcl/onlinelog/group_4.266.1061896147
        2 +DATA/orcl/tempfile/temp.263.1061896045


        转储system数据文件例子如下:

          [grid@rac2 amdu_2022_06_22_13_44_48]$ amdu -diskstring "/dev/asm-disk*" -extract  DATA.256  -output system.256  -noreport -nodir
          AMDU-00204: Disk N0002 is in currently mounted diskgroup DATA
          AMDU-00201: Disk N0002: '/dev/asm-diskb'
          [grid@rac2 amdu_2022_06_22_13_44_48]$ ls -rlt
          total 1104584
          -rw-r--r-- 1 grid oinstall 9520 Jun 22 13:44 DATA.map
          -rw-r--r-- 1 grid oinstall 116416512 Jun 22 13:44 DATA_0001.img
          -rw-r--r-- 1 grid oinstall 5750 Jun 22 13:44 report.txt
          -rw-r--r-- 1 grid oinstall 18497536 Jun 22 13:50 control.260
          -rw-r--r-- 1 grid oinstall 996155392 Jun 22 14:09 system.256

          使用以上方法可把控制文件以及所有的数据文件、日志文件转储出来,然后打开数据库即可。


          至此,你学会了吗?


          此外,细心的朋友会发现,如果数据文件使用的是OMF格式管理,我们可以很容易从控制文件获取ASM的FILE_NUMBER。如果数据文件不是OMF格式管理(如上述文件+DATA/orcl/datafile/test01.dbf),该如何获取ASM FILE_NUMBER呢?


          如果在ASM实例正常的情况下,可以使用下面语句进行查看以及做信息留存:

            SELECT NAME,FILE_NUMBER FROM V$ASM_ALIAS where file_number<>4294967295 order by 2;


            但如果前期没有任何数据文件相关信息留存的情况下,该如何获取ASM数据文件对应的FILE_NUMBE呢?这里推荐一个办法,使用kfed读取磁盘信息。


            通过kfed找出来所有的asm中文件的file_number,脚本如下(演示环境为11.2.0.4 RAC):

              for (( num=0; num<255; num++ ))
              do
              kfed read dev/asm-diskb aun=48 blknum=$num |egrep 'name|fnum'|grep -v length=0 |grep -v 0x00000000 >>asm_ALIASDIR.out
              done
              [grid@rac2 amdu_2022_06_22_13_44_48]$ more asm_ALIASDIR.out


              大家还有什么好的方法获取ASM数据文件对应的FILE_NUMBE呢?评论区给小编留言吧!



              美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。



              文章转载自新运维新数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论