ASM AMDU工具使用
来源:互联网 发布:arcgis api for js 编辑:程序博客网 时间:2024/05/21 17:22
转自:http://blog.itpub.net/29065182/viewspace-1157086
AMDU是ORACLE针对ASM开发的源数据转储工具,其全称为ASM Metadata Dump Utility(AMDU)
从oracle 11gR2版本,amdu工具可以直接使用,不需要单独下载 命令放在$ORACLE_HOME/bin
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.
查看数据文件的位置,然后一一导出
1234567891011
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
+DATA/db/datafile/system.256.804295135
+DATA/db/datafile/sysaux.257.804295137
+DATA/db/datafile/undotbs1.258.804295139
+DATA/db/datafile/users.259.804295141
$ amdu -diskstring '/dev/oracleasm/disks/ASMDISK*' -extract data.256 <<<<<<<<<<<<<<system
$ amdu -diskstring '/dev/oracleasm/disks/ASMDISK*' -extract data.257 <<<<<<<<<<<<<<sysaux
$ amdu -diskstring '/dev/oracleasm/disks/ASMDISK*' -extract data.258 <<<<<<<<<<<<<<undotbs1
$ amdu -diskstring '/dev/oracleasm/disks/ASMDISK*' -extract data.259 <<<<<<<<<<<<<<users .="" 10.="" 重命名数据文件,并移动到同一个目录下,准备挂载数据文件
12345678
$ mv amdu_2013_07_03_18_12_56/DATA_257.f sysaux.257.804295137
$ mv amdu_2013_07_03_18_22_23/DATA_259.f users.259.804295141
$ mv amdu_2013_07_03_18_23_06/DATA_258.f undotbs1.258.804295139
$ ll
-rw-r--r-- 1 oracle dba 545267712 Jul 3 18:14 sysaux.257.804295137
-rw-r--r-- 1 oracle dba 702554112 Jul 3 18:11 system.256.804295135
-rw-r--r-- 1 oracle dba 99622912 Jul 3 18:23 undotbs1.258.804295139
-rw-r--r-- 1 oracle dba 5251072 Jul 3 18:22 users.259.804295141
11. 挂载前需要修改pfile文件,下面是open数据库是control file如何识别不同路径的datafile, 我使用convert参数来解决(也可以是用set newname的方式)
db_file_name_convert='+DATA/db/datafile','/u01/amdu/amdu_datafile'
添加完pfile,启动数据库,最终成功启动数据库
12345678910111213141516
SQL> startup pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilebk.ora';
[oracle@Single-DB ~]$ sqlplus / as sysdba
Connected to an idle instance.
SQL> startup pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilebk.ora';
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 281022296 bytes
Database Buffers 780140544 bytes
Redo Buffers 5554176 bytes
Database mounted.
Database opened.
SQL> select status, instance_name from v$instance;
STATUS INSTANCE_NAME
------------ ----------------
OPEN db
总结,备份很重要!!
由于是在我测试库上进行的实验,我没有破坏数据文件来完全模拟客户问题。
但是通过这个测试,我们可以确认的是,在ASM diskgroup无法挂载的情况下,我们是有办法将数据文件读出(即使是坏的),然后我们在针对具体的坏块尝试block恢复(估计没有备份,这个也没辙了)。
但是至少,数据文件摆在我们面前了,我们还有其他很多办法去尝试修复,再不行,也只是丢失部分数据,因为其中可能只是个别数据文件的个别block损坏。
总之,数据文件弄出来了,剩下的,继续研究吧。
阅读全文
0 0
- ASM AMDU工具使用
- ASM AMDU工具的使用
- ASM AMDU工具的使用
- ASM工具集合-amdu
- ASM工具集合-amdu
- oracle 10g amdu工具使用
- 介绍Oracle自带的一些ASM维护工具 (kfod/kfed/amdu)
- Oracle自带的一些ASM维护工具 (kfod/kfed/amdu)
- AMDU抽取ASM files(ASM nomount)
- AMDU恢复ASM磁盘组数据(测)
- ASM 翻译系列第十二弹:ASM Internal amdu
- 使用AMDU工具从无法MOUNT的DISKGROUP中抽取数据文件
- asm工具类TraceClassVisitor使用
- amdu抽取asm磁盘组中的datafile到本地文件系统
- 硬盘故障数据库恢复 amdu 使用小记
- 使用ASM工具动态修改类
- Oracle asm kfed工具的使用之一
- Android中asm.jar工具的使用
- MySQL server version for the right syntax to use near ';) T' at line 7
- Leetcode 338. Counting Bits
- [Leetcode] 216. Combination Sum III 解题报告
- UVa442
- JDBC
- ASM AMDU工具使用
- 半路出家, 我的iOS自学之路-2-头文件, 属性, 引用计数, 协议, 类别, 类扩展
- async异步问题(waterfall、parallel、eachSeries、map、whilst)
- cglib动态代理实现
- Contest_5 0614 By lhq
- gulp-删除文件和文件夹
- 基本数据类型
- LSMW批处理使用方法(08)_步骤8、9
- cocos2d-x 3.0rc0 lua练习最基础例子