Use ODU to list and extract any files in ASM diskgroups

Posted: February 18th, 2012

Sometimes, ASM diskgroups can not be mounted for some reason, but the database related files are still intact in them, in that situation we can use ODU to extract any files in the ASM diskgroups which can not be mounted to the file system.


When an ASM diskgroup is mounting, Oracle needs to verify the numerous ASM metadata, if some ASM metadata are corrupted, then the ASM diskgroup can not be mounted. But ODU may still be able to extract data files in that situation because we just only need one type of the ASM metadata to complete the extract function. At the same time, ODU can extract any files in ASM diskgroups, including data files, archive log files, parameter file, online log files, control files and RMAN backup files.


Below is an example to demonstrate how to use ODU to list and extract files in ASM diskgroups. Note: the ODU trial version can only list the files (can not extract) in ASM diskgroups.


First of all, you need to configure the asmdisk.txt file (the details of the asmdisk.txt and config.txt are not detailed here, please refer to the ODU users guide):

[oracle@xty odu]$ cat asmdisk.txt

# disk#  path       group_name meta_block_size  ausize disk_size header_offset

1  /dev/sdb1

2  /dev/sdb2

3  /dev/sdb3


Enter into the ODU

[oracle@xty odu]$ ./odu


Oracle Data Unloader:Release 4.2.3


Copyright (c) 2008,2009,2010,2011 XiongJun. All rights reserved.





loading default config…….


byte_order little

block_size  8192

db_timezone -7

Invalid db timezone:-7

client_timezone 8

Invalid client timezone:8

asmfile_extract_path   /oradata/asmfile

data_path   data

lob_path   /odu/data

charset_name ZHS16GBK

ncharset_name AL16UTF16

output_format text

lob_storage infile

clob_byte_order big

trace_level 1

delimiter |

unload_deleted no

file_header_offset 0

is_tru64 no

record_row_addr no

convert_clob_charset yes

use_scanned_lob  yes

trim_scanned_blob yes

lob_switch_dir_rows 1000

db_block_checksum yes

db_block_checking yes

rdba_file_bits 10

compatible 10

trace.trace_filename odu_trace.txt

trace.build_hash_table  0

trace.trace_asm 4


load config file ‘config.txt’ successful

loading default asm disk file ……



grp# dsk# bsize ausize disksize diskname        groupname       path

—- —- —– —— ——– ————— ————— ——————————————–

   1    1  4096  1024K     1024 DGDATA_0001     DGDATA          /dev/sdb1

   1    0  4096  1024K     1024 DGDATA_0000     DGDATA          /dev/sdb2

   1    2  4096  1024K     1024 DGDATA_0002     DGDATA          /dev/sdb3


load asm disk file ‘asmdisk.txt’ successful

loading default control file ……



 ts#   fn  rfn bsize   blocks bf offset filename

—- —- —- —– ——– — —— ——————————————–

   0    1    1  8192    44800 N       0 +DGDATA/xty/datafile/system.260.745630773

   1    2    2  8192    25600 N       0 +DGDATA/xty/datafile/undotbs1.261.745630805

   2    3    3  8192    16640 N       0 +DGDATA/xty/datafile/sysaux.262.745630817

   4    4    4  8192     1440 N       0 +DGDATA/xty/datafile/users.264.745630833

load control file ‘oductl.dat’ successful

loading dictionary data……done


loading scanned data……done


Enter asmcmd in “ODU>” command prompt to enter into the asmcmd command module:

ODU> asmcmd


Entering asmcmd module.



Use the ls command to list the directories and files, use the pwd command to view the current directory, use the cd command to enter into the directory. Note that, when you at the top of the virtual directory <root> and you want to enter into a diskgroup, you must add "+" before the diskgroup name. In addition, the files and directory names in an ASM diskgroup are not case-sensitive.



Current directory: <root>


Disk Group




ASMCMD> cd +dgdata


Current directory: +DGDATA




Current directory: +DGDATA




Current directory: +DGDATA




XTY                                       <DIR>

TESTDIR                                   <DIR>

TestDIR2                                  <DIR>




Current directory: +DGDATA/XTY




Current directory: +DGDATA/XTY




CONTROLFILE                               <DIR>

ONLINELOG                                 <DIR>

DATAFILE                                  <DIR>

TEMPFILE                                  <DIR>

PARAMETERFILE                             <DIR>

spfilexty.ora                              => +DGDATA.265.745631905




Current directory: +DGDATA/XTY


Use the cp command to extract (copy) files to file system:

ASMCMD> cp spfilexty.ora to /oracle/spfile.ora


starting copy asm file ‘+DGDATA/XTY/spfilexty.ora’ to ‘/oracle/spfile.ora’,file size is 4608

asm file copy completed.


ASMCMD> cd controlfile


Current directory: +DGDATA/XTY/CONTROLFILE


ASMCMD> ls    


Current directory: +DGDATA/XTY/CONTROLFILE






ASMCMD> cp Current.256.745630761  to /oracle/control.ora


starting copy asm file ‘+DGDATA/XTY/CONTROLFILE/Current.256.745630761’ to ‘/oracle/control.ora’,file size is 7618560

asm file copy completed.



We can check the extracted file:

[oracle@xty odu]$ cd /oracle


[oracle@xty ~]$ strings spfile.ora


















The first parameter of the cp command, means the target ASM files which stored in the ASM diskgroup you want to extract, can be a relative path, also can be an absolute path, can be the actual file name, can also be an alias:

spfilexty.ora                              => +DGDATA.265.745631905

The above output shows that the spfilexty.ora is an alias, the actual file is the file 265 in the ASM diskgroup DGDATA.


Run the exit command to exit the asmcmd module, back to the ODU prompt:

ASMCMD> exit


Exiting asmcmd module.


Now we make another demo, we extract a datafile and do a verification to show the ODU cp command really works:

ODU> asmcmd


Entering asmcmd module.


ASMCMD> cp +dgdata/xty/datafile/SYSTEM.260.745630773 to /oracle/system.dbf


starting copy asm file ‘+dgdata/xty/datafile/SYSTEM.260.745630773’ to ‘/oracle/system.dbf’,file size is 367009792


asm file copy completed.


ASMCMD> exit


Exiting asmcmd module.


ODU> exit


[oracle@xty odu]$ dbv file=/oracle/system.dbf blocksize=8192


DBVERIFY: Release – Production on Sat Feb 18 18:30:07 2012


Copyright (c) 1982, 2007, Oracle.  All rights reserved.


DBVERIFY – Verification starting : FILE = /oracle/system.dbf



DBVERIFY – Verification complete


Total Pages Examined         : 44800

Total Pages Processed (Data) : 28974

Total Pages Failing   (Data) : 0

Total Pages Processed (Index): 4641

Total Pages Failing   (Index): 0

Total Pages Processed (Other): 1823

Total Pages Processed (Seg)  : 1

Total Pages Failing   (Seg)  : 0

Total Pages Empty            : 9362

Total Pages Marked Corrupt   : 0

Total Pages Influx           : 0

Highest block SCN            : 391159 (0.391159)


As you can see, the SYSTEM data file which is extracted by ODU is intact.