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

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/curren t.260.794687955, +FRA/prodb/co ntrolfile/current.256.79468795 5 获得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)

你可能感兴趣的:(oracle,数据库)