使用ODU列举和提取ASM磁盘组中的文件

Posted: February 18th, 2012

有的时候,ASM磁盘组由于某些原因不能MOUNT,但是磁盘组中存储的数据库相关的文件仍然是完好的,这个时候我们可以使用ODUASM磁盘组中的文件复制到文件系统上。

 

ASM磁盘组MOUNT时,Oracle需要检查ASM磁盘组中众多的元数据,如果有元数据损坏,则ASM磁盘组不能MOUNT。但是,能够复制出ASM磁盘组中存储的文件所需要的元数据相当少(只需要一种),因此在ASM磁盘组不能MOUNT时,ODU仍然很可能能够将文件提取出来复制到文件系统。同时,ODU可以提取ASM磁盘组中的任意文件,包括数据文件、归档日志、参数文件、在线日志文件、控制文件、RMAN备份文件等。

 

下面是一个操作示例,演示了如何列举ASM磁盘组中的目录结构,并将文件提取出来。注:ODU试用版只能列举目录结构和文件,不能提取文件。

 

首先配置好asmdisk.txt文件(至于config.txt文件,此处不再详述,请参考ODU操作指南):

 

[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

 

进入ODU

 

[oracle@xty odu]$ ./odu

 

Oracle Data Unloader:Release 4.2.3

 

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

 

Web: http://www.oracleodu.com

Email: magic007cn@gmail.com

 

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

 

ODU>命令提示符下输入asmcmd,进入asmcmd命令模块:

 

ODU> asmcmd

 

Entering asmcmd module.

 

 

使用ls命令列举目录和文件,使用pwd命令查看当前目录,使用cd命令进入目录,注意,在顶级虚拟目录<root>下进入某个磁盘组时,磁盘组名前需要加上"+"号,另外,ASM磁盘组中的文件名和目录名,不区分大小写。

 

ASMCMD> ls

 

Current directory: <root>

 

Disk Group

————————————

DGDATA

 

ASMCMD> cd +dgdata

 

Current directory: +DGDATA

 

ASMCMD> pwd

 

Current directory: +DGDATA

 

ASMCMD> ls

 

Current directory: +DGDATA

 

Name                                   

—————————————-

XTY                                       <DIR>

TESTDIR                                   <DIR>

TestDIR2                                  <DIR>

 

ASMCMD> cd XTY

 

Current directory: +DGDATA/XTY

 

ASMCMD> ls

 

Current directory: +DGDATA/XTY

 

Name                                   

—————————————-

CONTROLFILE                               <DIR>

ONLINELOG                                 <DIR>

DATAFILE                                  <DIR>

TEMPFILE                                  <DIR>

PARAMETERFILE                             <DIR>

spfilexty.ora                              => +DGDATA.265.745631905

 

ASMCMD> pwd

 

Current directory: +DGDATA/XTY

 

使用cp命令将文件提取(复制)到文件系统:

 

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

 

Name                                   

—————————————-

Current.256.745630761                  

 

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.

 

我们可以检查提取的文件:

 

[oracle@xty odu]$ cd /oracle

[oracle@xty ~]$ strings spfile.ora

xty.__db_cache_size=369098752

xty.__java_pool_size=4194304

xty.__large_pool_size=4194304

xty.__shared_pool_size=138412032

xty.__streams_pool_size=0

*.audit_file_dest=’/oracle/app/oracle/admin/xty/adump’

*.background_dump_dest=’/oracle/app/oracle/admin/xty/bdump’

*.compatible=’10.2.0.5.0′

忽略部分输出

*.remote_login_passwordfile=’EXCLUSIVE’

*.sga_target=524288000

*.standby_archive_dest=’/arch/xty_stb’

*.standby_file_management=’auto’

*.undo_management=’AUTO’

*.undo_tablespace=’UNDOTBS1′

*.user_dump_dest=’/oracle/app/oracle/admin/xty/udump’

 

cp命令的第1个参数,即ASM磁盘组中存储的文件名,可以是相对路径,也可以是绝对路径,可以是实际的文件名,也可以是别名:

spfilexty.ora                              => +DGDATA.265.745631905

上面的输出中,spfilexty.ora是一个别名,实际的文件是DGDATA磁盘组中的265号文件。

 

执行exit命令即可退出asmcmd模块,回到ODU提示符下:

 

ASMCMD> exit

 

Exiting asmcmd module.

 

下面再演示提取一个数据文件,并进行检验:

 

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

ODU>

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

 

DBVERIFY: Release 10.2.0.5.0 – 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)

 

可以看到,使用ODU提取出来的SYSTEM数据文件是完好的。