Oracle10g新增DBMS_FILE_TRANSFER包(二)

yangtingkun發表於2009-05-07

Oracle10g新增了DBMS_FILE_TRANSFER包,透過資料庫的功能實現了檔案的傳輸。

這篇介紹GET_FILEPUT_FILE過程。

Oracle10g新增DBMS_FILE_TRANSFER包(一):http://yangtingkun.itpub.net/post/468/484002

 

 

前面介紹了COPY_FILE,這裡介紹這個包的另外兩個過程,GET_FILEPUT_FILE。這兩個過程的功能和FTPgetput命令是否類似,就是利用資料庫的功能將檔案在兩個資料庫伺服器之間進行複製。和COPY_FILE過程唯一不同之處在於,GET_FILEPUT_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

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-594462/,如需轉載,請註明出處,否則將追究法律責任。

相關文章