如果自己搞不定可以找诗檀软件专业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,将成为磁盘组内容的准确转储。
压缩目录下的所有文件,并要求客户将其上传到服务请求。
Comment