各位新朋友~记得先点蓝字关注我哦~
当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 DATAAMDU-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 -rlttotal 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 -nodirAMDU-00204: Disk N0002 is in currently mounted diskgroup DATAAMDU-00201: Disk N0002: '/dev/asm-diskb'[grid@rac2 amdu_2022_06_22_13_44_48]$ ls -rlttotal 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 -c2 +DATA/orcl/datafile/sysaux.257.10618959652 +DATA/orcl/datafile/system.256.10618959652 +DATA/orcl/datafile/test01.dbf2 +DATA/orcl/datafile/test.269.10711382812 +DATA/orcl/datafile/undotbs1.258.10618959652 +DATA/orcl/datafile/undotbs2.264.10618961092 +DATA/orcl/datafile/users.259.10618959652 +DATA/orcl/onlinelog/group_1.261.10618960412 +DATA/orcl/onlinelog/group_2.262.10618960412 +DATA/orcl/onlinelog/group_3.265.10618961432 +DATA/orcl/onlinelog/group_4.266.10618961472 +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 -nodirAMDU-00204: Disk N0002 is in currently mounted diskgroup DATAAMDU-00201: Disk N0002: '/dev/asm-diskb'[grid@rac2 amdu_2022_06_22_13_44_48]$ ls -rlttotal 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++ ))dokfed read dev/asm-diskb aun=48 blknum=$num |egrep 'name|fnum'|grep -v length=0 |grep -v 0x00000000 >>asm_ALIASDIR.outdone[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、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。






