联系:手机/微信(+86 17813235971) QQ(107644445)
标题:找回ASM中数据文件
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
很多时候由于asm不能正常启动,导致数据丢失。下面提供两种方法找回asm中的数据文件
一.使用AMDU工具
AMDU是Oracle 11g里自带的一个免费的工具,用于分析ASM磁盘组的元数据以及从不能mount的磁盘组中往外抽取数据文件“NOTE:553639.1 Placeholder for AMDU binaries and using with ASM 10g”明确指出:AMDU也可用于10g,并提供了可用于10g的AMDU的各个操作系统的版本供大家下载。
1.设置LD_LIBRARY_PATH
rac1-> export LD_LIBRARY_PATH=/tmp/amdu
2.查看asm磁盘信息
rac1-> ./amdu -diskstring '/dev/raw/raw*' amdu_2012_03_05_03_17_19/ rac1-> cd amdu_2012_03_05_03_17_19/ rac1-> ls report.txt rac1-> more report.txt -*-amdu-*- ******************************* AMDU Settings ******************************** ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1 System name: Linux Node name: rac1 Release: 2.6.9-89.0.0.0.1.ELhugemem Version: #1 SMP Tue May 19 04:38:38 EDT 2009 Machine: i686 amdu run: 05-MAR-12 03:17:19 Endianess: 1 --------------------------------- Operations --------------------------------- ------------------------------- Disk Selection ------------------------------- -diskstring '/dev/raw/raw*' ------------------------------ Reading Control ------------------------------- ------------------------------- Output Control ------------------------------- ********************************* DISCOVERY ********************************** ----------------------------- DISK REPORT N0001 ------------------------------ Disk Path: /dev/raw/raw23 Unique Disk ID: Disk Label: Physical Sector Size: 512 bytes Disk Size: 156 megabytes ** NOT A VALID ASM DISK HEADER. BAD VALUE IN FIELD blksize_kfdhdb ** ----------------------------- DISK REPORT N0002 ------------------------------ Disk Path: /dev/raw/raw11 Unique Disk ID: Disk Label: Physical Sector Size: 512 bytes Disk Size: 156 megabytes ** NOT A VALID ASM DISK HEADER. BAD VALUE IN FIELD blksize_kfdhdb ** ----------------------------- DISK REPORT N0003 ------------------------------ Disk Path: /dev/raw/raw32 Unique Disk ID: Disk Label: Physical Sector Size: 512 bytes Disk Size: 156 megabytes ** NOT A VALID ASM DISK HEADER. BAD VALUE IN FIELD blksize_kfdhdb ** ----------------------------- DISK REPORT N0004 ------------------------------ Disk Path: /dev/raw/raw31 Unique Disk ID: Disk Label: Physical Sector Size: 512 bytes Disk Size: 156 megabytes ** NOT A VALID ASM DISK HEADER. BAD VALUE IN FIELD blksize_kfdhdb ** ----------------------------- DISK REPORT N0005 ------------------------------ Disk Path: /dev/raw/raw12 Unique Disk ID: Disk Label: Physical Sector Size: 512 bytes Disk Size: 156 megabytes ** NOT A VALID ASM DISK HEADER. BAD VALUE IN FIELD blksize_kfdhdb ** ----------------------------- DISK REPORT N0006 ------------------------------ Disk Path: /dev/raw/raw2 Unique Disk ID: Disk Label: Physical Sector Size: 512 bytes Disk Size: 1976 megabytes Group Name: DATA Disk Name: DATA_0001 Failure Group Name: DATA_0001 Disk Number: 1 Header Status: 3 Disk Creation Time: 2012/03/01 22:32:39.289000 Last Mount Time: 2012/03/05 02:10:02.771000 Compatibility Version: 0x0a100000 Disk Sector Size: 512 bytes Disk size in AUs: 1976 AUs Group Redundancy: 1 Metadata Block Size: 4096 bytes AU Size: 1048576 bytes Stride: 113792 AUs Group Creation Time: 2012/03/01 22:32:39.221000 File 1 Block 1 location: AU 0 ----------------------------- DISK REPORT N0007 ------------------------------ Disk Path: /dev/raw/raw1 Unique Disk ID: Disk Label: Physical Sector Size: 512 bytes Disk Size: 3137 megabytes Group Name: DATA Disk Name: DATA_0000 Failure Group Name: DATA_0000 Disk Number: 0 Header Status: 3 Disk Creation Time: 2012/03/01 22:32:39.289000 Last Mount Time: 2012/03/05 02:10:02.771000 Compatibility Version: 0x0a100000 Disk Sector Size: 512 bytes Disk size in AUs: 3137 AUs Group Redundancy: 1 Metadata Block Size: 4096 bytes AU Size: 1048576 bytes Stride: 113792 AUs Group Creation Time: 2012/03/01 22:32:39.221000 File 1 Block 1 location: AU 2 ******************************* END OF REPORT ********************************
从这里可以得到信息如下:
1)只有/dev/raw/raw1和raw2是有效的asm磁盘
2)磁盘组只有DATA
3.找出数据文件信息
rac1-> ../amdu -diskstring '/dev/raw/raw*' -dump 'DATA' amdu_2012_03_05_03_19_38/ rac1-> cd amdu_2012_03_05_03_19_38/ rac1-> ls DATA_0001.img DATA.map report.txt rac1-> strings DATA_0001.img |grep DATAFILE DATAFILE DATAFILE DATAFILE DEVDB/DATAFILE/SYSTEM.256.776817753 DEVDB/DATAFILE/SYSAUX.257.776817753 DEVDB/DATAFILE/UNDOTBS1.258.776817753 DEVDB/DATAFILE/USERS.259.776817753 DEVDB/DATAFILE/UNDOTBS2.267.776817909
从这里可以得出数据文件的file号(第一位数字)
4.恢复数据文件
rac1-> ../../amdu -diskstring '/dev/raw/raw*' -extract 'DATA.259' amdu_2012_03_05_03_27_21/ rac1-> cd amdu_2012_03_05_03_27_21/ rac1-> ls -l total 5148 -rw-r--r-- 1 oracle oinstall 5251072 Mar 5 03:27 DATA_259.f -rw-r--r-- 1 oracle oinstall 6468 Mar 5 03:27 report.txt rac1-> dbv file=DATA_259.f DBVERIFY: Release 10.2.0.1.0 - Production on Mon Mar 5 03:28:00 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. DBVERIFY - Verification starting : FILE = DATA_259.f DBVERIFY - Verification complete Total Pages Examined : 640 Total Pages Processed (Data) : 15 Total Pages Failing (Data) : 0 Total Pages Processed (Index): 2 Total Pages Failing (Index): 0 Total Pages Processed (Other): 26 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 597 Total Pages Marked Corrupt : 0 Total Pages Influx : 0 Highest block SCN : 442362 (0.442362)
二.使用aulasm工具
1.配置ASM使用磁盘
[root@rac1 oracle]# more disk /dev/sdb1 /dev/sdb2
2.使用aulasm
[root@rac1 oracle]# ./aulasm_linux32_trial.bin AUL : AnySQL UnLoader(MyDUL) for Oracle ASM, release 2.0.0 (C) Copyright Lou Fangxin 2011-2012 (AnySQL.net), all rights reserved. ASM> help SET -- set options (BLOCK_SIZE, AU_SIZE, F1B1_DISK, F1B1_AU) OPEN -- open data file ADD -- add disk with customized disk num (disk, path) LIST -- list opened disks information (to) LSAU -- list file of given AU (disk, au, count) FILE -- list all file entries in ASM (file, [disk, au, block]). ALIAS -- list all alias entries in ASM (file, [disk, au, block]). EXTENT -- list or adjust variable extent (level, au, count). FMAP -- list file extent (file, [disk, au, block], to) DUMP -- dump file extent (file, [disk, au, block], offset, to) COPY -- copy file to os (file, [disk, au, block], to) QUIT/EXIT -- exit the program. ASM> open disk 2012-03-05 03:32:48 2012-03-05 03:32:48 ASM> list 2012-03-05 03:32:49 Total Disks = 2, ausize=1048576, blksize=4096 disk size block disk name disk group disk path ===== ======== ===== ================ ============ ======================== 0 3137 4096 DATA_0000 DATA /dev/sdb1 1 1976 4096 DATA_0001 DATA /dev/sdb2 f1b1disk = 0, f1b1au = 2, score=256, compat=0x0a100000 file=(1,0,2,1), disk=(2,0,2,2), alias=(6,0,2,6) 2012-03-05 03:32:49 ASM> alias 2012-03-05 03:33:15 file inc parent fstblk flag refer alias ======== ============ ====== ====== ==== ====== ========================== -1 -1 0 0 4 1 DEVDB -1 -1 0 1 4 2 DATAFILE -1 -1 0 1 4 3 CONTROLFILE -1 -1 0 1 4 4 ONLINELOG -1 -1 0 1 4 5 TEMPFILE -1 -1 0 1 4 6 PARAMETERFILE -1 -1 0 1 4 7 ARCHIVELOG 256 776817753 1 2 18 -1 SYSTEM 257 776817753 1 2 18 -1 SYSAUX 258 776817753 1 2 18 -1 UNDOTBS1 259 776817753 1 2 18 -1 USERS 267 776817909 1 2 18 -1 UNDOTBS2 261 776817829 1 3 18 -1 Current 260 776817829 1 3 18 -1 Current 262 776817833 1 4 18 -1 group_1 263 776817835 1 4 18 -1 group_1 264 776817837 1 4 18 -1 group_2 265 776817841 1 4 18 -1 group_2 268 776818011 1 4 18 -1 group_3 269 776818013 1 4 18 -1 group_3 270 776818015 1 4 18 -1 group_4 271 776818017 1 4 18 -1 group_4 266 776817859 1 5 18 -1 TEMP 272 776818021 1 6 18 -1 spfile -1 -1 1 7 4 8 2012_03_01 -1 -1 1 7 4 9 2012_03_03 -1 -1 1 7 4 10 2012_03_05 273 776818747 7 8 18 -1 thread_1_seq_2 274 776819571 7 8 18 -1 thread_1_seq_3 275 776819721 7 8 18 -1 thread_2_seq_1 276 776820331 7 8 18 -1 thread_1_seq_4 277 776992321 7 9 18 -1 thread_1_seq_5 278 776992321 7 9 18 -1 thread_2_seq_2 279 777089437 7 10 18 -1 thread_1_seq_6 2012-03-05 03:33:15 ASM> fmap file 259 2012-03-05 03:34:49 fid=259, disk=0, au=56, block=3 siz=5, ecnt=6, eeof=6, flags=17, type=12, alias=109,-1 extid disk auid cnt flg chk ========== ===== ========== ==== === === 1 0 428 1 0 135 2 1 408 1 0 178 3 0 429 1 0 134 4 1 409 1 0 179 5 0 430 1 0 133 6 1 410 1 0 176 2012-03-05 03:34:49 ASM> copy file 259 to user_259 2012-03-05 03:35:01 2012-03-05 03:35:01 [root@rac1 oracle]# ll total 6252 -rwxr-xr-x 1 root root 84619 Mar 6 2012 aulasm_linux32_trial.bin -rw-r--r-- 1 root root 20 Mar 5 02:52 disk -rw-r--r-- 1 root root 6291456 Mar 5 03:35 user_259 [root@rac1 oracle]# su - oracle rac1-> dbv file=user_259 DBVERIFY: Release 10.2.0.1.0 - Production on Mon Mar 5 03:35:27 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. DBVERIFY - Verification starting : FILE = user_259 DBVERIFY - Verification complete Total Pages Examined : 640 Total Pages Processed (Data) : 15 Total Pages Failing (Data) : 0 Total Pages Processed (Index): 2 Total Pages Failing (Index): 0 Total Pages Processed (Other): 26 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 597 Total Pages Marked Corrupt : 0 Total Pages Influx : 0 Highest block SCN : 442362 (0.442362)
通过dbv验证,两个数据文件(文件大小有出入,可能在对待未格式化数据块上,两者处理有出入)可以基本上确定一致,证明两种方法都可以从异常的ASM中获取数据文件
三.总结与比较
1.AMDU完全免费,aulasm超过16块硬盘需要收费
2.AMDU操作相对于aulasm麻烦一点,但是整体还是可以接受
3.获取到asm中的数据文件后恢复数据内容或者open库,那都是容易的事情
如果因为磁盘头损坏太多或者其他原因,以上方法都不能实现抽取asm磁盘组中数据文件,参考:asm disk header 彻底损坏恢复