一般来讲,在ASM实例和文件系统之间传输文件,可以采用dbms_transfer_file包和rman实现外,或者FTP方式,FTP方式需要XML DB支持,目前还没有学会,因而先记录下前面三种方式…
1:使用dbms_file_transfer在文件系统和asm实例间传输文件,同样适用于10g
- SQL> desc dbms_file_transfer;
- PROCEDURE COPY_FILE
- Argument Name Type In/Out Default?
- ------------------------------ ----------------------- ------ --------
- SOURCE_DIRECTORY_OBJECT VARCHAR2 IN
- SOURCE_FILE_NAME VARCHAR2 IN
- DESTINATION_DIRECTORY_OBJECT VARCHAR2 IN
- DESTINATION_FILE_NAME VARCHAR2 IN
- PROCEDURE GET_FILE
- Argument Name Type In/Out Default?
- ------------------------------ ----------------------- ------ --------
- SOURCE_DIRECTORY_OBJECT VARCHAR2 IN
- SOURCE_FILE_NAME VARCHAR2 IN
- SOURCE_DATABASE VARCHAR2 IN
- DESTINATION_DIRECTORY_OBJECT VARCHAR2 IN
- DESTINATION_FILE_NAME VARCHAR2 IN
- PROCEDURE PUT_FILE
- Argument Name Type In/Out Default?
- ------------------------------ ----------------------- ------ --------
- SOURCE_DIRECTORY_OBJECT VARCHAR2 IN
- SOURCE_FILE_NAME VARCHAR2 IN
- DESTINATION_DIRECTORY_OBJECT VARCHAR2 IN
- DESTINATION_FILE_NAME VARCHAR2 IN
- DESTINATION_DATABASE VARCHAR2 IN
- SQL> select file_name from dba_data_files;
- FILE_NAME
- --------------------------------------------
- +DATA/ogg1/datafile/users.259.773712985
- +DATA/ogg1/datafile/undotbs1.258.773712985
- +DATA/ogg1/datafile/sysaux.257.773712985
- +DATA/ogg1/datafile/system.256.773712985
- +DATA/ogg1/datafile/example.265.773713189
- SQL> create user transfer_test default tablespace transfer_test identified by 123456 account unlock;
- User created.
- SQL> create tablespace transfer_test datafile '/u01/app/oracle/oradata/ogg1/transfer_test01.dbf' size 100M;
- Tablespace created.
- SQL> create directory asm_dir as '+DATA/ogg1/datafile';
- Directory created.
- SQL> create directory file_dir as '/u01/app/oracle/oradata/ogg1';
- Directory created.
- SQL> grant connect,resource to transfer_test;
- Grant succeeded.
- SQL> create table transfer_test.t1 as select * from dba_source;
- Table created.
- SQL> analyze table transfer_test.t1 compute statistics;
- Table analyzed.
- SQL> select count(*) from transfer_test.t1;
- COUNT(*)
- ----------
- 633054
- SQL> alter tablespace transfer_test offline;
- Tablespace altered.
- SQL> begin
- 2 dbms_file_transfer.copy_file('file_dir','transfer_test01.dbf','asm_dir','transfer_test01.dbf');
- 3 end;
- 4 /
- PL/SQL procedure successfully completed.
- [root@oel1 ~]# su - grid
- [grid@oel1 ~]$ asmcmd
- ASMCMD> cd +data/ogg1/datafile
- ASMCMD> ls -l
- Type Redund Striped Time Sys Name
- DATAFILE UNPROT COARSE MAR 01 20:00:00 Y COPY_FILE.267.776809311
- DATAFILE UNPROT COARSE MAR 01 20:00:00 Y EXAMPLE.265.773713189
- DATAFILE UNPROT COARSE MAR 01 20:00:00 Y SYSAUX.257.773712985
- DATAFILE UNPROT COARSE MAR 01 20:00:00 Y SYSTEM.256.773712985
- DATAFILE UNPROT COARSE MAR 01 20:00:00 Y UNDOTBS1.258.773712985
- DATAFILE UNPROT COARSE MAR 01 20:00:00 Y USERS.259.773712985
- N transfer_test01.dbf =>
- +DATA/OGG1/DATAFILE/COPY_FILE.267.776809311
- SQL> alter database rename file '/u01/app/oracle/oradata/ogg1/transfer_test01.dbf' to
- '+data/ogg1/datafile/transfer_test01.dbf';
- Database altered.
- SQL> alter tablespace transfer_test online;
- Tablespace altered.
- QL> select file_name from dba_data_files;
- FILE_NAME
- --------------------------------------------------------------------------------
- +DATA/ogg1/datafile/users.259.773712985
- +DATA/ogg1/datafile/undotbs1.258.773712985
- +DATA/ogg1/datafile/sysaux.257.773712985
- +DATA/ogg1/datafile/system.256.773712985
- +DATA/ogg1/datafile/example.265.773713189
- +DATA/ogg1/datafile/transfer_test01.dbf
- 6 rows selected.
- SQL> select count(*) from transfer_test.t1;
- COUNT(*)
- ----------
- 633054
2: 11g的asm实例可以直接使用cp命令来实现,从asm实例的cp帮助信息上看,已经可以直接从本地数据库直接cp到远端数据库了!
- ASMCMD> cp /u01/app/oracle/oradata/ogg1/transfer_test01.dbf +data/ogg1/datafile/test01.dbf
- copying /u01/app/oracle/oradata/ogg1/transfer_test01.dbf -> +data/ogg1/datafile/test01.dbf
- ASMCMD> pwd
- +data/ogg1/datafile
- ASMCMD> ls -l
- Type Redund Striped Time Sys Name
- DATAFILE UNPROT COARSE MAR 01 20:00:00 Y COPY_FILE.267.776809311
- DATAFILE UNPROT COARSE MAR 01 20:00:00 Y EXAMPLE.265.773713189
- DATAFILE UNPROT COARSE MAR 01 20:00:00 Y SYSAUX.257.773712985
- DATAFILE UNPROT COARSE MAR 01 20:00:00 Y SYSTEM.256.773712985
- DATAFILE UNPROT COARSE MAR 01 20:00:00 Y UNDOTBS1.258.773712985
- DATAFILE UNPROT COARSE MAR 01 20:00:00 Y USERS.259.773712985
- N test01.dbf => +DATA/ASM/DATAFILE/test01.dbf.268.776809913
- N transfer_test01.dbf =>
- +DATA/OGG1/DATAFILE/COPY_FILE.267.776809311
3:使用rman的convert命令来实现,同样适用于10g
- [oracle@oel1 ~]$ rman target /
- Recovery Manager: Release 11.2.0.3.0 - Production on Thu Mar 1 20:44:22 2012
- Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
- connected to target database: OGG1 (DBID=3952830770)
- RMAN> convert datafile '+data/ogg1/datafile/SYSTEM.256.773712985' format
- '/u01/app/oracle/oradata/ogg1/system01.dbf';
- Starting conversion at target at 2012-03-01-20:47:08
- using channel ORA_DISK_1
- channel ORA_DISK_1: starting datafile conversion
- input file name=+DATA/ogg1/datafile/system.256.773712985
- converted datafile=/u01/app/oracle/oradata/ogg1/system01.dbf
- channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:01:56
- Finished conversion at target at 2012-03-01-20:49:07
- RMAN> host "ls -lh /u01/app/oracle/oradata/ogg1/";
- total 821M
- -rw-r----- 1 oracle asmadmin 721M Mar 1 20:49 system01.dbf
- -rw-r----- 1 oracle asmadmin 101M Mar 1 20:17 transfer_test01.dbf
- host command complete
本文转自斩月博客51CTO博客,原文链接http://blog.51cto.com/ylw6006/796897如需转载请自行联系原作者
ylw6006