用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磁盘不能正常加载,就用这种方法帮客户恢复数据。

相关推荐