DBMS_FILE_TRANSFER命令介绍
用途
可以用来传输文件,替代操作系统命令和数据库之间进行传输表空间操作。
在os system和ASM中的文件都可以使用此过程
实验
SQL>
SQL> create directory source_dir as '/u01/app/oracle/oradata/orcl';
Directory created.
SQL>
SQL>
SQL> grant read ,write on directory source_dir to system;
Grant succeeded.
SQL>
SQL>
SQL> create directory dest_dir as '/oracle';
Directory created.
SQL>
SQL>
SQL> grant read,write on directory dest_dir to system;
Grant succeeded.
SQL>
SQL> begin
2 dbms_file_transfer.copy_file(
3 source_directory_object => 'SOURCE_DIR',
4 SOURCE_FILE_NAME => 'control01.ctl',
5 destination_directory_object => 'DEST_DIR',
6 DESTINATION_FILE_NAME => 'control01_copy.ctl');
7 end;
8 /
PL/SQL procedure successfully completed.
SQL>
SQL>
SQL>
SQL> select name from v$controlfile;
NAME
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/oradata/orcl/control02.ctl
到目标/oracle目录下看一下:
oracle@linux12c:/oracle$pwd
/oracle
oracle@linux12c:/oracle$ll
total 17576
-rw-r----- 1 oracle oinstall 17973248 Nov 21 19:10 control01_copy.ctl
能在线传输online的数据文件system?
SQL> begin
2 dbms_file_transfer.copy_file(
3 source_directory_object => 'SOURCE_DIR',
4 SOURCE_FILE_NAME => 'system01.dbf',
5 destination_directory_object => 'DEST_DIR',
6 DESTINATION_FILE_NAME => 'system01_copy.dbf');
7 end;
8 /
PL/SQL procedure successfully completed.
SQL>
--成功了
结论
可以完成在线拷贝数据库文件的功能,但不知道一致性如何(多个文件的时候很难做到一致),还记得前两天看的12c的新特性,可以online拷贝数据文件,或许这个就是啊,另外还可以通过此命令来进行跨库的文件传输操作。
最有用的地方应该是从文件系统向ASM,或ASM向文件系统(11g已经支持两者之间的copy了,这个有什么大用途的地有待开发)
补充:
下面才是在线拷贝数据文件的功能:
SQL> alter database move datafile '/u01/app/oracle/oradata/newcdb/salespdb/test01.dbf' to '/u01/app/oracle/test01.dbf';
Database altered.
SQL> alter database move datafile '/u01/app/oracle/test01.dbf' to '/u01/app/oracle/oradata/newcdb/salespdb/test01.dbf';
Database altered.
SQL>
--db直接实现了拷贝数据文件和重命名的操作。