数据库归档放在ASM里时,想把他CP出来是比较蛋疼的一件事。现在推荐了几个方法。

10g:

       1.用rman copy方式

     RMAN> backup as copy archivelog from sequence 5 until sequence 5 thread 1 format '/u01/app/%h_%e_archivelog.dbf';


     RMAN> backup as copy archivelog  sequence between 5 and 6 thread 1 format '/u01/app/%h_%e_archivelog.dbf';

       2.调用dbms_file_transfer.copy_file包

SQL> create directory  asm_dir as '+arch/oradbca/ARCHIVELOG/2013_08_15';  
 
 SQL>  create directory  file_dir as '/u01';  


 begin   
    dbms_file_transfer.copy_file('asm_dir','thread_2_seq_2136.320.823315519','file_dir','thread_2_seq_2136.320.823315519')
 end; 
  /  

 

11g:

        用asmcmd里的cp功能.10g里的功能,11g全部都可以用。

ASMCMD> pwd
+DATA/ORADBCA/ARCHIVELOG/2013_08_15
ASMCMD> 
ASMCMD> cp thread_1_seq_219.365.823485979 /u01
copying +DATA/ORADBCA/ARCHIVELOG/2013_08_15/thread_1_seq_219.365.823485979 -> /u01/thread_1_seq_219.365.823485979

 

官方文档How to Copy Archivelog Files From ASM to Filesystem and vice versa (文档 ID 944831.1)

 

SOLUTION

RMAN allow you to copy archivelog files to a tape or filesystem. The following examples provide RMAN scripts for copying all archivelog files to '/tmp'. 
 

— Copy all archivelog files to a location in filesystem 
rman> 
run 

allocate channel c1 type disk format '/tmp/arc_%U'; 
backup archivelog all; 

— Back up all archived logs created more than 7 and less than 30 days ago. 
run { 
allocate channel ch1 type disk format '/tmp/arc_%U'; 
backup archivelog from time 'SYSDATE-30' until time 'SYSDATE-7'; 

— Back up all archived logs from sequence # 250 to sequence # 301 and deletes the archived redo logs after the backup is complete. 

run { 
allocate channel ch1 type disk format '/tmp/arc_%U'; 
backup 
archivelog from logseq 250 until logseq 301 thread 1 

In FORMAT clause, %U is replaced with unique file names when creating archivelog backups.

The above RMAN statements create a file in the following format in the destination directory (/tmp).
 

-rw-r—– 1 oracle dba2 46623232 Sep 28 13:14 arc_03kqcj6g_1_1

Then, one can restore the archive logs to a filesystem using the restore command:

run { 
set archivelog destination to '/tmp'; 
restore archivelog all; 
}

If you do not specify SET ARCHIVELOG DESTINATION, then RMAN restores archived redo log files the default archivelog destination.  Refer to RMAN options to restore only the required archive logfiles based on sequence number or creation timestamp.