很多时候由于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