使用AMDU工具从无法MOUNT的ORACLE ASM DISKGROUP中抽取数据文件

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638   QQ号:47079569    邮箱:[email protected]

 

目前ORACLE PRM-DUL 免费提供ORACLE ASM中的文件克隆功能了,详见http://www.parnassusdata.com/

 

AMDU是ORACLE针对ASM开发的源数据转储工具,其全称为ASM Metadata Dump Utility(AMDU)

AMDU具体以下三个主要功能:

1. 将ASM DISK上的元数据转储到文件系统上以便分析
2. 将ASM文件的内容抽取出来并写入到OS文件系统,Diskgroup是否mount均可
3. 打印出块的元数据,以块中C语言结构或16进制的形式

 

这里我们将用到使用AMDU抽取ASM DISKGROUP中的数据文件; ASM作为近几年最流行的存储解决方案, 大家对他的优缺点都有所了解,其中的问题之一就是ASM是个黑盒。 一旦DISKGROUP无法MOUNT起来就意味着传统方法无法以磁盘为基础导出任何数据。

AMDU解决了这一问题, 这里我们仅讨论在ASM DISKGROUP 无法MOUNT的情况下的范畴,不讨论RDBMS数据文件在ASM下讹误的处理。

注意 AMDU虽然是11g才发布的工具,但是实际对10g的ASM 也有效。

当前你可能遇到的场景是, ORACLE DATABASE的SPFILE、CONTROLFILE、DATAFILE均存放在ASM DISKGROUP中,而由于一些ASM ORA-600错误导致无法MOUNT该DISKGROUP, 你需要的是使用AMDU将这些文件从ASM DISK中转储出来。

场景 1 丢失了 包括SPFILE、CONTROLFILE、DATAFILE

 

恢复步骤: 从备份中还原出SPFILE ,即便没有SPFILE的话PFILE也可以,总之你需要从参数文件中了解control_files的信息

 

 

SQL> show parameter control_files

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string   
+DATA/prodb/controlfile/current.260.794687955, 
+FRA/prodb/controlfile/current.256.794687955

 

获得control_files 控制文件在ASM中的位置后事情就好办了,+DATA/prodb/controlfile/current.260.794687955 这里 260是这个控制文件在+DATA 这个DISKGROUP中的FILE NUMBER

此外我们还需要ASM DISK的DISCOVERY PATH信息,这完全可以从ASM的SPFILE中的asm_diskstring 参数获得

 

[oracle@mlab2 oracle.SupportTools]$ unzip amdu_X86-64.zip
Archive: amdu_X86-64.zip
inflating: libskgxp11.so
inflating: amdu
inflating: libnnz11.so
inflating: libclntsh.so.11.1

[oracle@mlab2 oracle.SupportTools]$ export LD_LIBRARY_PATH=./

[oracle@mlab2 oracle.SupportTools]$ ./amdu -diskstring '/dev/asm*' -extract data.260
amdu_2009_10_10_20_19_17/
AMDU-00204: Disk N0006 is in currently mounted diskgroup DATA
AMDU-00201: Disk N0006: '/dev/asm-disk10'
AMDU-00204: Disk N0003 is in currently mounted diskgroup DATA
AMDU-00201: Disk N0003: '/dev/asm-disk5'
AMDU-00204: Disk N0002 is in currently mounted diskgroup DATA
AMDU-00201: Disk N0002: '/dev/asm-disk6'

[oracle@mlab2 oracle.SupportTools]$ cd amdu_2009_10_10_20_19_17/
[oracle@mlab2 amdu_2009_10_10_20_19_17]$ ls
DATA_260.f report.txt
[oracle@mlab2 amdu_2009_10_10_20_19_17]$ ls -l
total 9548
-rw-r--r-- 1 oracle oinstall 9748480 Oct 10 20:19 DATA_260.f
-rw-r--r-- 1 oracle oinstall 9441 Oct 10 20:19 report.txt

 

 

以上转储出来的DATA_260.f 就是控制文件,我们使用该控制文件startup mount RDBMS实例:

 

 

SQL> alter system set control_files='/opt/oracle.SupportTools/amdu_2009_10_10_20_19_17/DATA_260.f' scope=spfile;

System altered.

SQL> startup force mount;
ORACLE instance started.

Total System Global Area 1870647296 bytes
Fixed Size 2229424 bytes
Variable Size 452987728 bytes
Database Buffers 1409286144 bytes
Redo Buffers 6144000 bytes
Database mounted.

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
+DATA/prodb/datafile/system.256.794687873
+DATA/prodb/datafile/sysaux.257.794687875
+DATA/prodb/datafile/undotbs1.258.794687875
+DATA/prodb/datafile/users.259.794687875
+DATA/prodb/datafile/example.265.794687995
+DATA/prodb/datafile/mactbs.267.794688457

6 rows selected.

startup mount实例后,可以从v$datafile中获得数据文件名,其中就包括了其在DISKGROUP中的FILE NUMBER

再使用./amdu -diskstring '/dev/asm*' -extract 命令即可 导出数据文件到操作系统

[oracle@mlab2 oracle.SupportTools]$ ./amdu -diskstring '/dev/asm*' -extract data.256
amdu_2009_10_10_20_22_21/
AMDU-00204: Disk N0006 is in currently mounted diskgroup DATA
AMDU-00201: Disk N0006: '/dev/asm-disk10'
AMDU-00204: Disk N0003 is in currently mounted diskgroup DATA
AMDU-00201: Disk N0003: '/dev/asm-disk5'
AMDU-00204: Disk N0002 is in currently mounted diskgroup DATA
AMDU-00201: Disk N0002: '/dev/asm-disk6'

[oracle@mlab2 oracle.SupportTools]$ cd amdu_2009_10_10_20_22_21/
[oracle@mlab2 amdu_2009_10_10_20_22_21]$ ls
DATA_256.f report.txt
[oracle@mlab2 amdu_2009_10_10_20_22_21]$ dbv file=DATA_256.f

DBVERIFY: Release 11.2.0.3.0 - Production on Sat Oct 10 20:23:12 2009

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

DBVERIFY - Verification starting : FILE = /opt/oracle.SupportTools/amdu_2009_10_10_20_22_21/DATA_256.f

DBVERIFY - Verification complete

Total Pages Examined : 90880
Total Pages Processed (Data) : 59817
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 12609
Total Pages Failing (Index): 0
Total Pages Processed (Other): 3637
Total Pages Processed (Seg) : 1
Total Pages Failing (Seg) : 0
Total Pages Empty : 14817
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 1125305 (0.1125305)

Posted

in

by

Tags:

Comments

6 responses to “使用AMDU工具从无法MOUNT的ORACLE ASM DISKGROUP中抽取数据文件”

  1. […] Metadata Dump Utility(AMDU), 在《使用AMDU工具从无法MOUNT的DISKGROUP中抽取数据文件》中我们介绍了AMDU抽取…, […]

  2. 不了峰 Avatar

    这个工具让我们这DBA心里一震~爽

    谢谢 

  3. dbdream Avatar

    刘兄,您好:
    对于存放在ASM里的数据文件,如果单个数据文件超过操作系统文件大小限制,ORACLE是怎么解决的?比如linux EXT3文件系统,单个文件最大2TB,而存放在ASM里的一个数据文件大于2TB,这种情况,这个工具是否还有效?

  4. […] 使用AMDU工具从无法MOUNT的DISKGROUP中抽取数据文件 […]

Leave a Reply

Your email address will not be published. Required fields are marked *