如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com
Oracle数据库- 企业版- 版本10.1.0.3至10.2.0.4[发行10.1至10.2]
本文档中的信息适用于任何平台。
Oracle服务器企业版 - 版本:10.1.0.3至10.2.0.4
目的
在Oracle 10g中,如果磁盘组已安装,磁盘组的内容可以回看,还有一些内部视图显示了磁盘内文件(ASM文件和数据库文件)的具体分配。
若磁盘组未安装,该信息不可用,这使得不安装磁盘组便难以诊断错误。此问题用AMDU可以解决。
AMDU是在11g中引入的工具,在11g中可以从一个或多个ASM磁盘中提取所有可用的元数据,从转储输出生成格式化块打印输出,从一个磁盘组(安装/卸载)中提取一个或多个文件,并将其写入OS文件系统。
处理ASM元数据相关的内部错误时,该工具非常重要。
尽管该工具在11g中发行,在ASM10g中也可使用。
本文档提供的链接,可以在ASM10g环境中下载运行AMDU所需的文件。
|
平台 |
|
|
Linux X86 (Platform 46) |
amdu_lnx_32.zip |
|
Linux X86-64 AMD64/EM64T (Platform 226) |
amdu_lnx_X86-64.zip |
|
Solaris 10 Sparc 64bit (Platform 23) |
amdu_solaris10_64.zip |
|
Solaris 9 Sparc 64bit (Platform 23) |
amdu_solaris9_64.zip |
|
HP-UX PA-RISC 64bits (Platform 59) |
amdu_HP-PARISC.zip |
|
HP-UX Itanium (Platform 197) |
amdu_hp_itanium.zip |
|
AIX |
amdu_aix.zip |
* 其他平台待添加
Table 1. List of platforms
本文档的范围不是去解释AMDU可用性和特性。其主要目标是提供一个占位符,其中可以下载AMDU,并在Oracle 10g环境中使用。至于Oracle11g,这个工具是该发行版本的一部分,出现在$ ORACLE_HOME/ bin目录。
要求
有关具体细节,请一步一步查看相关章节。
注意:如果执行过程中报告有核心转储或任何错误,请提交报告,可以替换二进制。配置
1. 下载表1引用的zip文件,并将其转让到服务器。
2.解压内容
zip文件中包含了4个文件:
1. amdu -- amdu binary 2. libclntsh.so.11.1 3. libnnz11.so 4. libskgxp11.so 注意:lib*文件的扩展名在某些平台上可能会不同。3. 如果对ASM和DB使用不同ORACLE_HOMEs,使用ASM位置。修改变量LD_LIBRARY_PATH或LIBPATH(在AIX上)或同等变量,包括下载amdu的目录。同时修改PATH变量:
$cd <your directory> $export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd` or $setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:`pwd` $export PATH=$PATH:`pwd` or setenv PATH ${PATH}:`pwd`
or $cd <your directory> $export LIBPATH=$LIBPATH:`pwd` or $setenv LIBPATH ${LIBPATH}:`pwd` $export PATH=$PATH:`pwd` or setenv PATH ${PATH}:`pwd`已知事项 * amdu的执行可能因为一个核心转储而失败。
回顾核心转储中的调用堆栈:
#0 0x0806235d in slfipn () #1 0x0805e88c in lfimknam () #2 0x081123bd in kfmuCreateDirectory () #3 0x0810a753 in kfmu_main () #4 0x08091a13 in lpmcall () #5 0x08065678 in lpmpmai () #6 0x08057fb9 in main () 这是由于错误5997071. 解决方法是去掉所有NLS*变量,从NLS_LANG开始。说明
$ amdu -diskstring '/dev/asm1_disk*' -dump 'DATA1'
有两个主要参数:
-diskstring Identify the location where the devices used by diskgroup are located. -dump Define the diskgroup whose content will be dumped by AMDU
下面这个例子是关于如何使用amdu,尤其是为了找到磁盘目录的位置。
This example scans disks under '/dev/asmdisk* and will dump details for diskgroup DATA.
Executing amdu: $ ./amdu -diskstring '/dev/asmdisk*' -dump 'DATA' Change to the directory created which the name will be printed in the screen during execution of amdu. Two files will be created: * report.txt which provides details of disks identified during the amdu execution * <diskgroup>.map, Map files are ASCII files that describe the data in the image files for a particular disk group 在地图文件(*.MAP)中,我们找寻F00000002:(磁盘目录始终是ASM文件#2)N0014 D0002 R00 A00000002 F00000002 I0 E00000000 U00 C00256 S0001 B0035663872
现在,阅读report.text,从而使用N0014和D0002识别磁盘:N0014 -- DISK REPORT N0014 D0002 -- Disk # 2 A00000002 -- Allocation Unit 2 F00000002 -- File#2
The file report.txt will have the path for this disk, using the values referenced before: ----------------------------- DISK REPORT N0014 ---------------------- Disk Path: /dev/asmdisk17 Unique Disk ID: Disk Label: Physical Sector Size: 512 bytes Disk Size: 954 megabytes Group Name: DATA Disk Name: DATA_0002 Failure Group Name: DATA_0002 Disk Number: 2 Header Status: 3 AMDU信息表明磁盘目录位于磁盘#2中的AU2,用路径 /dev/asmdisk17来识别。使用KFED来获取特定的AU:
$ kfed read /dev/asmdisk17 aunum=2 blknum=0 text=disk17_dd.txt 注意:从块0开始审查,所添加的磁盘条目可以是在不同的块中此示例代码仅供教育目的,而不是由Oracle Support支持。已经过内部测试,但是,我们不保证它对你有效。使用之前请确保是在测试环境中运行它。
每次执行AMDU,都会在当前位置创建一个目录,除非它被参数-directory覆盖。该目录格式为amdu_YYYY_MM_DD_HH24_MM_SS。
$amdu -diskstring '/dev/asm1*' -dump 'DATA1'
amdu_2008_02_14_15_04_11/
在step-by-step 部分中引用的默认命令,将生成以下文件:
DATA1_0001.img -- could be more than one. size is limited to 2gb. DATA1.map report.txt
这里是文件的一些细节:
1. report.txt 如其名称所示,它包含了扫描的磁盘信息(姓名,磁盘组名称,failgroup名称,大小,创建时间等)。 2. *.map -dump命令引用的每个磁盘组,都有一个*.map文件,它可以用来寻找磁盘上ASM元数据的精确位置。回看元数据的特定区域时,这个文件会是一个关键组成部分。 3. *.img 每一个磁盘组,可能有很多图像文件。大小限制为2GB,将成为磁盘组内容的准确转储。压缩目录下的所有文件,并要求客户将其上传到服务请求。