Oracle10g新增DBMS_FILE_TRANSFER包(二)

日期: 2009-05-11 作者:杨廷琨 来源:TechTarget中国 英文

  前面介绍了COPY_FILE,这里介绍这个包的另外两个过程,GET_FILE和PUT_FILE。这两个过程的功能和FTP的get和put命令是否类似,就是利用数据库的功能将文件在两个数据库服务器之间进行拷贝。和COPY_FILE过程唯一不同之处在于,GET_FILE和PUT_FILE过程多了一个参数,这个参数用来指定数据库链信息。

[oracle@yanttest ~]$ export ORACLE_SID=testzj
[oracle@yanttest ~]$ sqlplus “/ as sysdba”
SQL*Plus: Release 10.2.0.3.0 – Production on 星期四 5月 7 15:31:47 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

  连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> select directory_path
2 from dba_directories
3 where directory_name = ‘D_OUTPUT’;

  未选定行


SQL> create directory d_output as ‘/home/oracle’;

  目录已创建。


SQL> grant read, write on directory d_output to test;

  授权成功。

  在远端数据库做好DIRECTORY的准备工作。


bash-2.03$ sqlplus “/ as sysdba”
SQL*Plus: Release 10.2.0.3.0 – Production on 星期六 3月 7 19:15:24 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

  连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SQL> grant execute on dbms_file_transfer to test;

  授权成功。


SQL> grant read, write on directory d_output to test;

  授权成功。


SQL> conn test/test已连接。
SQL> create database link testzj 
2 connect to test
3 identified by test
4 using ‘172.25.13.231/testzj’;

  数据库链接已创建。


SQL> begin
2 sys.dbms_file_transfer.put_file(
3 ‘D_OUTPUT’, 
4 ‘spfiletestrac.ora’, 
5 ‘D_OUTPUT’, 
6 ‘spfiletestzj.ora’, 
7 ‘TESTZJ’);
8 end;
9 /
PL/SQL 过程已成功完成。

  已经将本地/export/home/oracle目录下的spfiletestrac.ora文件拷贝到远端站点,下面在利用GET_FILE,从远端读取文件:


SQL> begin
2 sys.dbms_file_transfer.get_file(
3 ‘D_OUTPUT’, 
4 ‘spfiletestzj.ora’, 
5 ‘TESTZJ’, 
6 ‘D_OUTPUT’, 
7 ‘spfiletestrac.bak’);
8 end;
9 /
PL/SQL 过程已成功完成。

  需要注意,这个过程的执行要求本地数据库和远端数据库的版本都是10g以上,否则会出现错误:


SQL> create database link testdata94.emedchina.com 
2 connect to test 
3 identified by test 
4 using ‘172.25.88.94/testdata’;

  数据库链接已创建。


SQL> select * from v$version@testdata94.emedchina.com;
BANNER
—————————————————————-
Oracle9i Enterprise Edition Release 9.2.0.4.0 – Production PL/SQL Release 9.2.0.4.0 – Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 – Production
NLSRTL Version 9.2.0.4.0 – Production
SQL> col directory_path format a50
SQL> set pages 100 lines 120
SQL> select directory_name, directory_path from all_directories@testdata94.emedchina.com;
DIRECTORY_NAME DIRECTORY_PATH
—————————— ————————————————–
DIR_TEST /home/oracle/test
D_TEST /data/oradata/testdata
SQL> exec sys.dbms_file_transfer.put_file(‘D_OUTPUT’, ‘spfiletestzj.ora’, ‘D_TEST’, ‘spfiletestzj.ora’, ‘TESTDATA94.EMEDCHINA.COM’)
BEGIN sys.dbms_file_transfer.put_file(‘D_OUTPUT’, ‘spfiletestzj.ora’, ‘D_TEST’, ‘spfiletestzj.ora’, ‘TESTDATA94.EMEDCHINA.COM’); END;
*第 1 行出现错误:
ORA-03115: 不支持的网络数据类型或表示法
ORA-02063: 紧接着 line (起自 TESTDATA94.EMEDCHINA.COM)
ORA-06512: 在 “SYS.DBMS_FILE_TRANSFER”, line 60
ORA-06512: 在 “SYS.DBMS_FILE_TRANSFER”, line 168
ORA-06512: 在 line 1

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐