用Oracle AMDU 抽取ASM磁盘组的数据文件
amdu -diskstring '<disk string>' -extract '<diskgroup name>.<file number>'
数据文件号 可以根据asm 实例 查询 v$asm_file视图得出
也可以查v$datafile,如果用了别名,可以用v$asm_alias;
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
+DATA/db1/datafile/system.256.794361477
+DATA/db1/datafile/sysaux.257.794361477
+DATA/db1/datafile/undotbs1.258.794361477
+DATA/db1/datafile/users.259.794361477 <(=== this files need to be extracted
+DATA/db1/datafile/example.261.794361601
+DATA/db1/datafile/testasm.263.817147851
+DATA/db1/datafile/dbfs_ts.264.822088469
比如我们要抽取users表空间下面对应的数据文件
Full File name = "+DATA/db1/datafile/users.259.794361477"
File Number = "259"
Disk String = "/dev/Oracleasm/disks/*"
Diskgroup Name = "DATA"
Extracted File = DATA_259.f
amdu -diskstring '/dev/oracleasm/disks/*' -extract 'DATA.259'
在当前目录下会生成amdu_加日期格式的文件夹
[grid@dbaasm ~]$ cd amdu_2013_08_31_00_17_17/
[grid@dbaasm amdu_2013_08_31_00_17_17]$ ls -l
total 2099228
-rw-r--r-- 1 grid oinstall 2147491840 Aug 31 00:18 DATA_259.f
-rw-r--r-- 1 grid oinstall 14514 Aug 31 00:18 report.txt
生成数据文件的格式为磁盘组+数据文件号,并且加后缀名为点f,然后重命名为对应表空间名字users.dbf即可
[grid@dbaasm amdu_2013_08_31_00_17_17]$ mv DATA_259.f users.dbf
[grid@dbaasm amdu_2013_08_31_00_17_17]$ ls -l
total 2099228
-rw-r--r-- 1 grid oinstall 14514 Aug 31 00:18 report.txt
-rw-r--r-- 1 grid oinstall 2147491840 Aug 31 00:18 users.dbf <(======
上个周末,因为存储故障,asm磁盘不能正常加载,就用这种方法帮客户恢复数据。