现在的位置: 首页 > 综合 > 正文

DBMS_FILE_TRANSFER文件拷贝命令介绍

2018年02月07日 ⁄ 综合 ⁄ 共 2022字 ⁄ 字号 评论关闭

DBMS_FILE_TRANSFER命令介绍

用途

可以用来传输文件,替代操作系统命令和数据库之间进行传输表空间操作。

os systemASM中的文件都可以使用此过程

实验

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

oracle@linux12c:/oracle$

 

 

能在线传输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直接实现了拷贝数据文件和重命名的操作。 

 

抱歉!评论已关闭.