很多时候由于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库,那都是容易的事情
oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html