一般来讲,在ASM实例和文件系统之间传输文件,可以采用dbms_transfer_file包和rman实现外,或者FTP方式,FTP方式需要XML DB支持,目前还没有学会,因而先记录下前面三种方式…

1:使用dbms_file_transfer在文件系统和asm实例间传输文件,同样适用于10g

   
   
   
   
  1. SQL> desc dbms_file_transfer;  
  2. PROCEDURE COPY_FILE  
  3.  Argument Name                  Type                    In/Out Default?  
  4.  ------------------------------ ----------------------- ------ --------  
  5.  SOURCE_DIRECTORY_OBJECT        VARCHAR2                IN 
  6.  SOURCE_FILE_NAME               VARCHAR2                IN 
  7.  DESTINATION_DIRECTORY_OBJECT   VARCHAR2                IN 
  8.  DESTINATION_FILE_NAME          VARCHAR2                IN 
  9. PROCEDURE GET_FILE  
  10.  Argument Name                  Type                    In/Out Default?  
  11.  ------------------------------ ----------------------- ------ --------  
  12.  SOURCE_DIRECTORY_OBJECT        VARCHAR2                IN 
  13.  SOURCE_FILE_NAME               VARCHAR2                IN 
  14.  SOURCE_DATABASE                VARCHAR2                IN 
  15.  DESTINATION_DIRECTORY_OBJECT   VARCHAR2                IN 
  16.  DESTINATION_FILE_NAME          VARCHAR2                IN 
  17. PROCEDURE PUT_FILE  
  18.  Argument Name                  Type                    In/Out Default?  
  19.  ------------------------------ ----------------------- ------ --------  
  20.  SOURCE_DIRECTORY_OBJECT        VARCHAR2                IN 
  21.  SOURCE_FILE_NAME               VARCHAR2                IN 
  22.  DESTINATION_DIRECTORY_OBJECT   VARCHAR2                IN 
  23.  DESTINATION_FILE_NAME          VARCHAR2                IN 
  24.  DESTINATION_DATABASE           VARCHAR2                IN 
  25.  
  26. SQL> select file_name from dba_data_files;  
  27.  
  28. FILE_NAME  
  29. --------------------------------------------  
  30. +DATA/ogg1/datafile/users.259.773712985  
  31. +DATA/ogg1/datafile/undotbs1.258.773712985  
  32. +DATA/ogg1/datafile/sysaux.257.773712985  
  33. +DATA/ogg1/datafile/system.256.773712985  
  34. +DATA/ogg1/datafile/example.265.773713189  
  35.  
  36. SQL> create user transfer_test default tablespace transfer_test identified by 123456 account unlock;  
  37. User created.  
  38.  
  39. SQL> create tablespace transfer_test datafile '/u01/app/oracle/oradata/ogg1/transfer_test01.dbf' size 100M;  
  40. Tablespace created.  
  41.  
  42. SQL> create directory  asm_dir as '+DATA/ogg1/datafile';  
  43. Directory created.  
  44.  
  45. SQL> create directory  file_dir as '/u01/app/oracle/oradata/ogg1';  
  46. Directory created.  
  47.  
  48. SQL> grant connect,resource to transfer_test;  
  49. Grant succeeded.  
  50.  
  51. SQL> create table transfer_test.t1 as select * from dba_source;  
  52. Table created.  
  53.  
  54. SQL> analyze table transfer_test.t1 compute statistics;  
  55. Table analyzed.  
  56.  
  57. SQL> select count(*) from transfer_test.t1;  
  58.  
  59.   COUNT(*)  
  60. ----------  
  61.     633054  
  62.  
  63. SQL> alter tablespace transfer_test offline;  
  64. Tablespace altered.  
  65.  
  66. SQL> begin 
  67.   2  dbms_file_transfer.copy_file('file_dir','transfer_test01.dbf','asm_dir','transfer_test01.dbf');  
  68.   3  end;  
  69.   4  /  
  70.  
  71. PL/SQL procedure successfully completed.  
  72.  
  73. [root@oel1 ~]# su - grid  
  74. [grid@oel1 ~]$ asmcmd  
  75. ASMCMD> cd +data/ogg1/datafile    
  76. ASMCMD> ls -l  
  77. Type      Redund  Striped  Time             Sys  Name 
  78. DATAFILE  UNPROT  COARSE   MAR 01 20:00:00  Y    COPY_FILE.267.776809311  
  79. DATAFILE  UNPROT  COARSE   MAR 01 20:00:00  Y    EXAMPLE.265.773713189  
  80. DATAFILE  UNPROT  COARSE   MAR 01 20:00:00  Y    SYSAUX.257.773712985  
  81. DATAFILE  UNPROT  COARSE   MAR 01 20:00:00  Y    SYSTEM.256.773712985  
  82. DATAFILE  UNPROT  COARSE   MAR 01 20:00:00  Y    UNDOTBS1.258.773712985  
  83. DATAFILE  UNPROT  COARSE   MAR 01 20:00:00  Y    USERS.259.773712985  
  84.                                             N    transfer_test01.dbf =>   
  85.  
  86. +DATA/OGG1/DATAFILE/COPY_FILE.267.776809311   
  87.  
  88. SQL> alter database rename file '/u01/app/oracle/oradata/ogg1/transfer_test01.dbf' to   
  89.  
  90. '+data/ogg1/datafile/transfer_test01.dbf';  
  91.  
  92. Database altered.  
  93.  
  94. SQL> alter tablespace transfer_test online;  
  95.  
  96. Tablespace altered.   
  97.  
  98. QL> select file_name from dba_data_files;  
  99.  
  100. FILE_NAME  
  101. --------------------------------------------------------------------------------  
  102. +DATA/ogg1/datafile/users.259.773712985  
  103. +DATA/ogg1/datafile/undotbs1.258.773712985  
  104. +DATA/ogg1/datafile/sysaux.257.773712985  
  105. +DATA/ogg1/datafile/system.256.773712985  
  106. +DATA/ogg1/datafile/example.265.773713189  
  107. +DATA/ogg1/datafile/transfer_test01.dbf  
  108. rows selected.  
  109.  
  110. SQL> select count(*) from transfer_test.t1;  
  111.  
  112.   COUNT(*)  
  113. ----------  
  114.     633054   

2: 11g的asm实例可以直接使用cp命令来实现,从asm实例的cp帮助信息上看,已经可以直接从本地数据库直接cp到远端数据库了!

   
   
   
   
  1. ASMCMD> cp /u01/app/oracle/oradata/ogg1/transfer_test01.dbf +data/ogg1/datafile/test01.dbf  
  2. copying /u01/app/oracle/oradata/ogg1/transfer_test01.dbf -> +data/ogg1/datafile/test01.dbf  
  3.  
  4. ASMCMD> pwd   
  5. +data/ogg1/datafile  
  6. ASMCMD> ls -l  
  7. Type      Redund  Striped  Time             Sys  Name  
  8. DATAFILE  UNPROT  COARSE   MAR 01 20:00:00  Y    COPY_FILE.267.776809311  
  9. DATAFILE  UNPROT  COARSE   MAR 01 20:00:00  Y    EXAMPLE.265.773713189  
  10. DATAFILE  UNPROT  COARSE   MAR 01 20:00:00  Y    SYSAUX.257.773712985  
  11. DATAFILE  UNPROT  COARSE   MAR 01 20:00:00  Y    SYSTEM.256.773712985  
  12. DATAFILE  UNPROT  COARSE   MAR 01 20:00:00  Y    UNDOTBS1.258.773712985  
  13. DATAFILE  UNPROT  COARSE   MAR 01 20:00:00  Y    USERS.259.773712985  
  14.                                             N    test01.dbf => +DATA/ASM/DATAFILE/test01.dbf.268.776809913  
  15.                                             N    transfer_test01.dbf =>   
  16.  
  17. +DATA/OGG1/DATAFILE/COPY_FILE.267.776809311 

3:使用rman的convert命令来实现,同样适用于10g

   
   
   
   
  1. [oracle@oel1 ~]$ rman target /  
  2. Recovery Manager: Release 11.2.0.3.0 - Production on Thu Mar 1 20:44:22 2012  
  3. Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.  
  4. connected to target database: OGG1 (DBID=3952830770)  
  5.  
  6. RMAN> convert datafile '+data/ogg1/datafile/SYSTEM.256.773712985' format   
  7.  
  8. '/u01/app/oracle/oradata/ogg1/system01.dbf';  
  9.  
  10. Starting conversion at target at 2012-03-01-20:47:08  
  11. using channel ORA_DISK_1  
  12. channel ORA_DISK_1: starting datafile conversion  
  13. input file name=+DATA/ogg1/datafile/system.256.773712985  
  14. converted datafile=/u01/app/oracle/oradata/ogg1/system01.dbf  
  15. channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:01:56  
  16. Finished conversion at target at 2012-03-01-20:49:07  
  17.  
  18. RMAN> host "ls -lh /u01/app/oracle/oradata/ogg1/";  
  19.  
  20. total 821M  
  21. -rw-r----- 1 oracle asmadmin 721M Mar  1 20:49 system01.dbf  
  22. -rw-r----- 1 oracle asmadmin 101M Mar  1 20:17 transfer_test01.dbf  
  23. host command complete