dbms_file_transfer是一个存储过程它是在Oracle 9i中引入的,这个包提供了在两个目录(在相同主 机或数据库)之间复制文件的方法。从Oracle 10gr1,ASM使用这个工具在ASM磁盘组之间复制文件, 并且它是实例化ASM DataGuard数据库的主要工具。在Oracle 10gr2中,dbms_file_transfer被增强 来支持ASM与non-ASM文件的组合传输。
dbms_file_trasnfer包能让DBA在两个目录之间复制文件。这个过程被用来在ASM磁盘组之间移动或复 制文件。对于以下情况可以使用这个过程来复制文件:
.从一个ASM磁盘组复制文件到另一个ASM磁盘组
.从一个ASM磁盘组复制文件到外部存储介质,比如操作系统级别的文件系统
.从操作系统级别的文件系统复制文件到ASM磁盘组
.从操作系统级别的文件系统复制文件到另一个目录或裸设备
下面的例子将演示如何使用dbms_file_transfer来将文件从一个目录移动到另一个目录:
1.识别要从一个目录移动或复制到另一个目录的数据文件
SQL> select file_name from dba_data_files; FILE_NAME ------------------------------------------------------------ +DATADG/jyrac/datafile/users.263.930413057 +DATADG/jyrac/datafile/undotbs1.262.930413057 +DATADG/jyrac/datafile/sysaux.258.930413055 +DATADG/jyrac/datafile/system.259.930413057 +DATADG/jyrac/datafile/example.260.930413057 +DATADG/jyrac/datafile/undotbs2.261.930413057
2.识别要存储复制文件的目录(ASM或non-ASM),在这里文件被复制到操作系统文件系统中。
3.将数据文件脱机:
SQL> alter database datafile '+DATADG/jyrac/datafile/users.263.930413057' offline; Database altered.
4.对原文件目录与目标目录使用以下操作来创建directory_name并将文件复制到新目录
SQL> alter database datafile '+DATADG/jyrac/datafile/users.263.930413057' offline; Database altered. SQL> create directory asmsrc as '+DATADG/jyrac/datafile/'; Directory created. SQL> create directory osdest as '/rman_backup/transfer/'; Directory created. SQL> begin 2 dbms_file_transfer.copy_file ('ASMSRC','users.263.930413057','OSDEST','users01.dbf'); 3 end; 4 / PL/SQL procedure successfully completed.
5.将数据文件联机
SQL> recover datafile '+DATADG/jyrac/datafile/users.263.930413057'; ORA-00279: change 3079902 generated at 12/12/2016 16:07:01 needed for thread 1 ORA-00289: suggestion : +ARCHDG/jyrac/1_1_930413221.dbf ORA-00280: change 3079902 for thread 1 is in sequence #1 Specify log: {=suggested | filename | AUTO | CANCEL} AUTO ORA-00279: change 3105677 generated at 12/13/2016 07:00:07 needed for thread 1 ORA-00289: suggestion : +ARCHDG/jyrac/1_2_930413221.dbf ORA-00280: change 3105677 for thread 1 is in sequence #2 Log applied. Media recovery complete. SQL> alter database datafile '+DATADG/jyrac/datafile/users.263.930413057' online; Database altered.
6.验证复制文件
[oracle@jyrac1 transfer]$ ls -lrt total 5140 -rw-r----- 1 oracle asmadmin 5251072 Dec 13 10:35 users01.dbf
在11g就可以使用列简单的cp命令进行文件复制,不需要使用这种方法。