AMDU是ORACLE针对ASM开发的源数据转储工具,其全称为ASM Metadata Dump Utility(AMDU)
ASM作为近几年最流行的存储解决方案,大家对他的优缺点都有所了解,其中的问题之一就是ASM是个黑盒。
一旦DISKGROUP无法MOUNT起来就意味着传统方法无法以磁盘为基础导出任何数据。AMDU解决了这一问题.
一.AMDU具体以下三个主要功能:
1. 将ASM DISK上的元数据转储到文件系统上以便分析
2. 将ASM文件的内容抽取出来并写入到OS文件系统,Diskgroup是否mount均可
3. 打印出块的元数据,以块中C语言结构或16进制的形式
优点: 1.是oracle自带工具, 兼容性好,坏块或文件少的情况下比较适合
缺点: 1.严重依赖源数据,如果源数据有问题,抽取的文件也会有问题
二. 下载:从MOS上可以下载Oracle 10g版本的AMDU ( Note: 553639.1 ) 工具。
注意 AMDU虽然是11g才发布的工具,但是实际对10g的ASM 也有效。
从oracle 11gR2版本,amdu工具可以直接使用,不需要单独下载
三. amdu的使用方法
命令放在$ORACLE_HOME/bin目录下
[oracle@node1 ~]$ cd $ORACLE_HOME/bin
[oracle@node1 bin]$ amdu --amdu 运行后输出的格式如下 会在当前目录下生成个以amdu+日期格式的文件夹
amdu_2016_03_14_17_11_21/
在这个文件夹下,会生成report.txt文件,report.txt文件格式如下:
[oracle@node1 amdu_2016_03_14_17_11_21]$ cat report.txt
-*-amdu-*-
******************************* AMDU Settings ********************************
[grid@rac01test ~]$ cd amdu_2016_03_15_16_34_54/
[grid@rac01test amdu_2016_03_15_16_34_54]$ ls
report.txt
[grid@rac01test amdu_2016_03_15_16_34_54]$ cat report.txt
-*-amdu-*-
******************************* AMDU Settings ********************************
ORACLE_HOME = /u01/11.2.0/grid
System name:Linux
Node name:rac01test
Release:2.6.32-504.el6.x86_64
Version:#1 SMP Wed Oct 15 04:27:16 UTC 2014
Machine:x86_64
amdu run:15-MAR-16 16:34:54
Endianess:1
--------------------------------- Operations ---------------------------------
------------------------------- Disk Selection -------------------------------
-diskstring ''
------------------------------ Reading Control -------------------------------
------------------------------- Output Control -------------------------------
********************************* DISCOVERY **********************************
----------------------------- DISK REPORT N0001 ------------------------------
Disk Path: /dev/raw/raw1
Unique Disk ID:
Disk Label:
Physical Sector Size: 512 bytes
Disk Size: 2055 megabytes
Group Name: ARCH_DG
Disk Name: ARCH_DG_0004
Failure Group Name: ARCH_DG_0004
Disk Number: 4
Header Status: 3
Disk Creation Time: 2015/11/04 14:51:20.529000
Last Mount Time: 2016/02/03 09:53:53.840000
Compatibility Version: 0x0b200000(11020000)
Disk Sector Size: 512 bytes
Disk size in AUs: 2055 AUs
Group Redundancy: 1
Metadata Block Size: 4096 bytes
AU Size: 1048576 bytes
Stride: 113792 AUs
Group Creation Time: 2015/10/27 10:00:00.144000
File 1 Block 1 location: AU 0
OCR Present: NO
----------------------------- DISK REPORT N0002 ------------------------------
Disk Path: /dev/raw/raw10
Unique Disk ID:
Disk Label:
Physical Sector Size: 512 bytes
Disk Size: 2055 megabytes
Group Name: ARCH_DG
Disk Name: ARCH_DG_0003
Failure Group Name: ARCH_DG_0003
Disk Number: 3
Header Status: 3
Disk Creation Time: 2015/11/04 14:51:20.529000
Last Mount Time: 2016/02/03 09:53:53.840000
Compatibility Version: 0x0b200000(11020000)
Disk Sector Size: 512 bytes
Disk size in AUs: 2055 AUs
Group Redundancy: 1
Metadata Block Size: 4096 bytes
AU Size: 1048576 bytes
Stride: 113792 AUs
Group Creation Time: 2015/10/27 10:00:00.144000
File 1 Block 1 location: AU 0
OCR Present: NO
---------------------------------------------------------------------------------
1.从ASM磁盘组中抽取控制文件
查看控制文件的信息:
SQL> show parameter control_files
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string +DATADG01/xedb/controlfile/current.256.894187571
+DATADG01/xedb/controlfile/current.256.894187571 这里256 是这个控制文件在+DATADG01/ 这个DISKGROUP中的FILE NUMBER
此外我们还需要ASM DISK的 DISCOVERY PATH信息,这完全可以从 ASM 的 SPFILE中的asm_diskstring 参数获得
[grid@rac01test ~]$ amdu -diskstring '/dev/raw/raw*' -extract datadg01.256
amdu_2016_03_15_16_40_48/
WARNING: Using brute force method to determine the size of /dev/raw/rawctl.
There will be performance issues. Please check configuration to determine the cause for the failure of ioctl
AMDU-00204: Disk N0006 is in currently mounted diskgroup DATADG01
AMDU-00201: Disk N0006: '/dev/raw/raw15'
查看抽取的控制文件
[grid@rac01test ~]$ cd amdu_2016_03_15_16_40_48/
[grid@rac01test amdu_2016_03_15_16_40_48]$ ls
DATADG01_256.f report.txt
2.抽取数据文件
2.1 查看数据文件的位置,然后一次导出
SQL> select name from v$datafile;
NAME
----------------------------------------------
+DATADG01/xedb/datafile/system.259.894187575
+DATADG01/xedb/datafile/sysaux.260.894187589
+DATADG01/xedb/datafile/undotbs1.261.894187601
+DATADG01/xedb/datafile/undotbs2.263.894187615
+DATADG01/xedb/datafile/users.264.894187621
+DATADG01/xedb/datafile/users.268.895081225
+DATADG01/xedb/datafile/users.269.895582787
+DATADG01/xedb/datafile/users.280.898078315
2.2 抽取文件
[grid@rac01test ~]$ amdu -diskstring '/dev/raw/raw*' -extract datadg01.259
[grid@rac01test ~]$ amdu -diskstring '/dev/raw/raw*' -extract datadg01.260
[grid@rac01test ~]$ amdu -diskstring '/dev/raw/raw*' -extract datadg01.261
......
2.3 重命名数据文件,并移动到同一个目录下,准备挂载数据文件
[oracle@rac01test ~]$mv datadg01_259.f system.259.894187575
[oracle@rac01test ~]$mv datadg01_260.f sysaux.260.894187589
[oracle@rac01test ~]$mv datadg01_261.f undotbs1.261.894187601
... ...
2.4 挂载前需要修改pfile文件,下面是open数据库是control file如何识别不同路径的datafile,我使用convert参数来解决(也可以是用set newname的方式)
db_file_name_convert='+DATADG01/xedb/datafile/','/oradata/aux'
添加完pfile,启动数据库,最终成功启动数据库