Oracle ASM工具amdu使用指南

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

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

服务热线 : 13764045638    QQ号:47079569    邮箱:service@parnassusdata.com

 

AMDU有以下三种功能:

 

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

 

 

AMDU输入数据可以是ASM DISK的内容,亦或者是上一次运行AMDU所生成的文件夹中的信息。

 

 

 

选项-diskstring和-exclude用以指定那些ASM DISK需要被读取。 选项-direcotry指定上一次运行AMDU所生成的文件夹。 指定的文件夹也可以是包含上一次文件夹内容的拷贝。

 

 

探测磁盘

 

这一个步骤使用ASM Discovery信息以找到磁盘组。磁盘的头部Asm disk header将被读取以便判断哪些磁盘属于哪个Diskgroup。下一步骤中被扫描的磁盘将在此步骤中被选择。探测的结果将被存放在report文件中。 使用-directory选项,可以读取已存在的报告文件而非重新在重复一次本步骤。

 

 

 

[oracle@lab1 oracle.SupportTools]$ ./amdu -diskstring '/dev/asm*'
amdu_2012_09_23_01_40_44/


[oracle@lab1 oracle.SupportTools]$ cd amdu_2012_09_23_01_40_44/
[oracle@lab1 amdu_2012_09_23_01_40_44]$ ls

report.txt

[oracle@lab1 amdu_2012_09_23_01_40_44]$ cat report.txt
-*-amdu-*-

******************************* AMDU Settings ********************************
ORACLE_HOME = ?
System name:    Linux
Node name:      lab1.oracle.com
Release:        2.6.32-200.13.1.el5uek
Version:        #1 SMP Wed Jul 27 21:02:33 EDT 2011
Machine:        x86_64
amdu run:       23-SEP-12 01:40:44
Endianess:      1


--------------------------------- Operations ---------------------------------

------------------------------- Disk Selection -------------------------------
-diskstring '/dev/asm*'

------------------------------ Reading Control -------------------------------

------------------------------- Output Control -------------------------------

********************************* DISCOVERY **********************************

----------------------------- DISK REPORT N0001 ------------------------------
Disk Path: /dev/asm-diskd
Unique Disk ID:
Disk Label:
Physical Sector Size: 512 bytes
Disk Size: 8192 megabytes
Group Name: FRA
Disk Name: FRA_0000
Failure Group Name: FRA_0000
Disk Number: 0
Header Status: 3
Disk Creation Time: 2012/09/21 02:42:53.616000
Last Mount Time: 2012/09/23 01:00:49.311000
Compatibility Version: 0x0a100000
Disk Sector Size: 512 bytes
Disk size in AUs: 8192 AUs
Group Redundancy: 1
Metadata Block Size: 4096 bytes
AU Size: 1048576 bytes
Stride: 113792 AUs
Group Creation Time: 2012/09/21 02:42:53.563000
File 1 Block 1 location: AU 2
----------------------------- DISK REPORT N0002 ------------------------------
Disk Path: /dev/asm-diskc
Unique Disk ID:
Disk Label:
Physical Sector Size: 512 bytes
Disk Size: 8192 megabytes
Group Name: DATA
Disk Name: DATA_0001
Failure Group Name: DATA_0001
Disk Number: 1
Header Status: 3
Disk Creation Time: 2012/09/21 02:39:12.436000
Last Mount Time: 2012/09/23 01:00:49.097000
Compatibility Version: 0x0b200000
Disk Sector Size: 512 bytes
Disk size in AUs: 8192 AUs
Group Redundancy: 1
Metadata Block Size: 4096 bytes
AU Size: 1048576 bytes
Stride: 113792 AUs
Group Creation Time: 2012/09/21 02:39:12.389000
File 1 Block 1 location: AU 0

----------------------------- DISK REPORT N0003 ------------------------------
Disk Path: /dev/asm-diskb
Unique Disk ID:
Disk Label:
Physical Sector Size: 512 bytes
Disk Size: 8192 megabytes
Group Name: DATA
Disk Name: DATA_0000
Failure Group Name: DATA_0000
Disk Number: 0
Header Status: 3
Disk Creation Time: 2012/09/21 02:39:12.436000
Last Mount Time: 2012/09/23 01:00:49.097000
Compatibility Version: 0x0b200000
Disk Sector Size: 512 bytes
Disk size in AUs: 8192 AUs
Group Redundancy: 1
Metadata Block Size: 4096 bytes
AU Size: 1048576 bytes
Stride: 113792 AUs
Group Creation Time: 2012/09/21 02:39:12.389000
File 1 Block 1 location: AU 2
******************************* END OF REPORT ********************************

 

 

 

扫描磁盘

磁盘上的分配表将被扫描,基于该分配表的记录和命令行选项,相关的数据块将被写入到镜像文件中。 Map文件将被创建以便描述相关Allocation Unit 以及他们被写入到镜像文件的何处。 若任何文件将被抽取,则他们的这些盘区图将从分配表中读取并在内存中构造起来。若任意块正要被打印则该块的位置将被保留在内存中。在此阶段使用-directory选项将直接读取现有的位图文件而非重新开始本步骤

 

 

抽取文件

将被抽取文件的盘区位图将被排序,从而从ASM DISK中读取该文件的数据并写出到输出文件中。该步骤无法使用-directory选项

 

 

打印块

格式化的块输出将被打印到标准输出并具备该块数据是如何被读取的信息。KFED命令将被使用以便转储该数据块。 使用-directory选项数据从镜像文件中读取。

 

 

 

输出文件

AMDU创建四种类型的输出文件。他们都被存放在新的DUMP目录下。 这些文件名将由AMDU自动生成。 新的DUMP文件目录每次运行都会自动创建。 新的目录的名字基于时间和时期直到每秒。  目录名字写出到标准输出在目录下的文件生成之前。注意目录名字总是关联到当前目录除非你手动输入了-parent选项。

 

若AMDU使用-directory选项则不会有dump目录生成也不会有输出文件创建。取而代之directory选项指定了上一次创建的dump目录的位置。 若使用-pirnt选项则指定生成的格式化文件打印输出从上一次创建的DUMP目录 。 PRINTOUT总是发送到标准输出而非创建新的文件。

 

 

 

抽取文件

 

一个抽取文件被创建,每当使用-extract选项 的命令行。 抽取文件被放置在DUMP目录下,名字为<group>_<number>.f,这里的<group>是diskgroup 的大写的名字,而数字是命令行中指定的文件号。 该抽取文件将出现并包含同样的内容,通过数据库访问。 若该文件的部分不可用则该部分的输出文件将被填入0xBADFDA7A,同时一条信息将出现在stderr中。

选项-output将被使用抽取一个单独的文件到特性的文件名而非DUMP目录。也可以配合nodir选项避免完全创建新的DUMP 目录。

 

镜像文件

 

镜像文件包含ASM DISK的块镜像。 这是从磁盘中拷贝出来的裸数据。 由于可能有大量数据,所以这些文件系统可能存在问题当大文件时, 同时一个镜像文件总是小于2gb。 当有多于2GB的数据时,将生成多个镜像文件。一个镜像文件包含多个磁盘中的数据, 但同时也保证这些磁盘都属于同一个diskgroup(基于磁盘头)。 同一个allocation unit中的块总是相邻的且不跨越镜像文件。 无意义的数据,例如空块,将不会被转储, 因此总是只有部分AU在DUMP中。 所以完整的镜像文件的大小非常数。

 

即便是已经从DISKGROUP角度drop掉的DISK将仍在DISK HEADER包含group name , 将可能被包含在镜像文件中,若-former选项被选中。 注意,这里与mount diskgroup不同,PST表将不作为磁盘是否是DISK GROUP中的依据。那些被强迫drop掉的DISK甚至不需要-former选项也将被包含在镜像文件中。

 

镜像文件的名字基于group name和一个序列号。形式是大写的GROUP NAME,以及一个序列号。第一个镜像文件的序列号是0001.

 

位图文件

 

map file是ASCII文件,描述了特定磁盘组的镜像文件中的数据。 AMDU将为每一个系列的镜像文件创建一个map file,距离来说一个磁盘组对应一个map file。 map file包含每一行对应一个allocation unit,包含内容的对应dump file。 其中部分allocation units可能在map file中有记录 但是实际甚至对应image file没有写入内容。 每一行都有着同样的字段和同样的长度,这些行在image file中对应数据的顺序,但是包含绝对参考在image file中的位置以便能够 其他排序方式 , 而不用丢失image file中AU的跟踪。

 

 

以下的字段包含在每一行中。这些字段使用空格分离。每一个字段开始以一个唯一的字母之后紧跟着数字和前导零。 他们应该帮助排序和查找一遍重新组织map file。在以下的描述中 这个 前导的字母和 数字位 使用 圆括号括起来。 举例来说 D4表示大写D紧跟着4位数字。

 

Disk Report Number (N4) 每一个磁盘被探测发现的均被分配一个disk report number,该号码打印在报告中以及该DISK的信息。2个DISK在同一个diskgroup,同一个disk number的将会有不同的2个disk report number。第一个disk reported会使用disk report number 1

Disk number (D4):这是磁盘号字段从header中抓取到的。若该磁盘号无效或头部无法识别则该字段为9999

Disk repeat (R2) 一般为0 , 有可能在同一个 diskgroup中找到2个磁盘拥有同样的disk number。 The first repeat gets a repeat count of 1 for its map file entries.第一个除非有超过100个同样disk number,则额外的位数将进位。

Allocation Unit (A8): 磁盘中的AU number。  The AU within the disk where the data was read. Note that this is different than the extent number for physically addressed metadata since extent 2 is near AU 113,000. If the disk is greater than 100 terabytes and the AU size is one megabyte, then this field could exceed 8 digits

File Number (F8)文件号 The ASM file that owns the extent. If the number is less than 256 then this is ASM metadata or an ASM registry. If this is physically addressed metadata then the file number will be 00000000

Extent Number (E8): The physical extent number within the file. This is the index in the file extent map that a database instance would use to find this AU. If the file was (two-way) mirrored then this is a primary extent if the number is even, and a secondary copy if it is odd. If this is an indirect extent then this is a value between 0 and 299 giving the index into the indirect extents. For physically addressed metadata this is the extent within the physically addressed metadata, not the AU within the disk.

AU within extent (U2): Large extents are supported for large files. Thus there could be multiple AU’s dumped for the same extent. Note that metadata files do not currently use large extents so this only happens for user file dumps to image files.

Block count (C5): The number of blocks copied to the image file from the AU. A lot of space is saved by not creating images of blocks that are just initialized contents. This is particularly true for indirect extents where most indirect extents will have only a few blocks of extent pointers. If the extent is not dumped to the image file then this is zero. The count is in ASM metadata blocks, even if the file number is >256 and the indirect flag is 0. This is normally 4K blocks, but could be different in the future. With the -noimage option this is always zero since no images are ever created.

Image File Sequence Number (S4): This is the NNNN field of the image file name where blocks from the AU are dumped. With the -noimage option this is always zero since no image files are ever created.

Byte Offset in Image File (B10): This is the location within the image file where the block images appear. It is always a multiple of the ASM metadata block size. Since the image file is always less than 2Gb this will always fit in a 32 bit signed integer. Note that this will be an offset to the end of the previously dumped AU when the block count is zero. With the -noimage option this is always zero since no images are ever created.

Corrupt Block Flag (X0): If any of the blocks in the AU are corrupt, then the line will end with ‘X’. Normally this is a blank character so that the line ends in two blanks.

 

 

 

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)


Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号