深入淺出叢書系列之系統(tǒng)間文件傳輸方案-Oracle EBS技術(shù)文檔_第1頁
深入淺出叢書系列之系統(tǒng)間文件傳輸方案-Oracle EBS技術(shù)文檔_第2頁
深入淺出叢書系列之系統(tǒng)間文件傳輸方案-Oracle EBS技術(shù)文檔_第3頁
深入淺出叢書系列之系統(tǒng)間文件傳輸方案-Oracle EBS技術(shù)文檔_第4頁
深入淺出叢書系列之系統(tǒng)間文件傳輸方案-Oracle EBS技術(shù)文檔_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

深入淺出叢書系列

EBS開發(fā)技術(shù)

系統(tǒng)間文件傳輸

系統(tǒng)間文件傳輸方案

Author:李蛟龍

CreationDate:2015-09-10

LastUpdated:2015-10-20

DocumentRef:<DocumentReferenceNumber>

Version:DRAFT1A

Approvals:

<Approver1>

〈Approver2>

CopyNumber

DocumentControl

ChangeRecord

DateAuthorVersionChangeReference

2015-10-20李蛟龍DraftlaNoPreviousDocument

Reviewers

NamePosiHon

Distribution

CopyNo.NameLocation

1LibraryMasterProjectLibrary

2ProjectManager

3

4

NoteToHolders:

Ifyoureceiveanelectroniccopyofthisdocumentandprintitout,pleasewriteyour

nameontheequivalentofthecoverpage,fordocumentcontrolpurposes.

Ifyoureceiveahardcopyofthisdocument,pleasewriteyournameonthefront

cover,fordocumentcontrolpurposes.

Contents

DocumentControlii

1.FTP文件傳輸2

1.1FTP概述2

1.2FTP搭建2

1.3Directory使用3

1.4FTP用法舉例4

1.5案例7

2.SFTP9

2.1FTP與SFTP9

2.2EBS中使用SFTP9

2.3用法舉例10

3.Webservice文件傳輸12

3.1Webservice數(shù)據(jù)傳輸12

3.2負(fù)載測試13

33用法舉例14

3OpenandClosedIssuesforthisDeliverable18

OpenIssues26

ClosedIssues26

1.FTP文件傳輸

這種系統(tǒng)間接口方式也比較常見,當(dāng)我們在應(yīng)用中需要使用服務(wù)來共享文件和傳遞文

件的時候,使用FTP方式比較合適。

1.1FTP概述

1.1.1FTP

FTP是FileTransferPrntnr.nl(文件傳輸協(xié)議)的英文簡稱,而中文簡稱為“文傳

協(xié)議”。用于Internet上的控制文件的雙向傳輸。

TCP/IP協(xié)議中,F(xiàn)TP標(biāo)準(zhǔn)命令TCP端口號為21,Port方式數(shù)據(jù)端口為200FTP的任務(wù)是從

一臺計算機(jī)將文件傳送到另一臺計算機(jī),不受操作系統(tǒng)的限制。

1.2FTP搭建

1.2.1FTP通用包

在項(xiàng)目上使用的大部分都是這個包,這個包把ftp傳輸文件要用到的函數(shù)都不封裝好

了,使用起來會更方便一些

CUX_ftp.pck

1.2.2測試FTP環(huán)境搭建

在這里我使用一個比較簡單的FTP搭建軟件來搭建一個FTP環(huán)境,這個軟件叫“簡單

FTP”,他只能有一個用戶,下載直接啟動就行了。

1.2.3連接測試

連接測試,代碼如下

DECLARE

l_conutl_tcp.connection;

BEGIN

l_con:=cux_ftp.login(p_host=>*192.168.0.Ill,,

p_port=>'21',

p_user=>'root’,

p_pass=>

'rootroot');

cux_ftp.logout(p_conn->l_con);

dbms_output.put_line('連接成功!1);

EXCEPTION

WHENOTHERSTHEN

dbms_output.put_line(,測試失敗:111SQLERRM);

END;

輸出內(nèi)容

220

331Passwordrequiredforroot.

230Userrootloggedin.

221Goodbye.

連接成功!

Directory使用

1.3.1directory路徑設(shè)置

一般倉J建directory都是為了用數(shù)據(jù)泵導(dǎo)入/導(dǎo)出數(shù)據(jù)用,在oracle中涉及文件的操作一

般都會用到directory,其實(shí)directory還有很多別的用處,本文不做闡述

1.3.2新建directory

語法:

CREATE[ORREPLACE]DIRECTORYdirectoryAS'pathname';

例如:

createorreplacedirectoryftp_tmpas'/honie/applmgr/ljl';

1.3.3查詢directory

select*fromdba_directories

1.3.4賦權(quán)

grantread,writeondirectorydump_dirtouserOl

1.3.5刪除

dropdirectorydump_dir

1.4FTP用法舉例

1.4.1上傳文件

測試代碼

DECLARE

Localvariableshere

ftp_connectionutl_tcp.connection;

vhostVARCHAR2(50):=110.10.10.1031;

192.168.(Till

v_portVARCHAR2(2):='21';

vuserVARCHAR2(50):='root*;

v_passvzordVARCHAR2(50):='rootroot';

v_filehandleutl_file.file_type;

v_directoryVARCHAR2(200)":='FTP_TMP';

vfilenameVARCHAR2(100):='TEST123.txt,;

BEGIN

―第一步,獲取ETP連接

BEGIN

ftp_connection:=cux_ftp.login(vhostz

v_port,v_user,v_password);

dbms_output.put_line('獲取FTP連接成功');

---亓始生成文件

v_filehandle:=utl_file.fopen(v_directory,

v_filename,*w');

utl_file.pu二(v_filehandle,'測試文件上傳');

utl_file.fflush(v_filehandle);

utl_file.fclose(v_filehandle);

dbms_output.put_line('文件創(chuàng)建成功,);

cux_ftp.put(p_conn>ftp_connection,

p_from_dir=>v_directory,

p_from_file=>v_filename,

p_to_file=>v_filename);

EXCEPTION

WHENOTHERSTHEN

dbms_output.pujline(,獲取連接失敗,||

SQLERRM);

ftpconnection:=NULL;

END;

END;

結(jié)果輸出

SQLOutputStatistics

]n==-1e

ClearBuffersize50000金SEnabled

220http://www.aq817.cn

331Passwordrequiredforroot.

230Userrootloggedin.

獲取FTP連接成功

文件創(chuàng)建成功

227EnteringPassiveMode(13,10,10,103,234,142).

150OpeningdataconnectionforTEST123.txt.

226Filereceivedok

syfdemo.m(1)x

/home/oracle/ljl

Name

二home_TEST123.txt

與j.oracle

Jo..

卜人Ijl

由mail

i+ioradiag.oracle

TEST123

文件(F)編聲(E)格式(O)查看(V)幫助(H)

廁試文件上傳

1.4.2下載文件

測試代碼

DECLARE

--Localvariableshere

ftp_rnnnpf:ticnuf1_trp.ccnnact*ion;

v_hostVARCHAR2(50):='10.10.10.1031;

v_portVARCHAR2(2):='21';

v_userVARCHAR2(50):='root';

v_passwordVARCHAR2(50):='rootroot';

v_filehandleutl_file.file_type;

vdirectoryVARCHAR2(200)-:=-FTPTMP1;

v_filenameVARCHAR2(100):='get二test.二xt';

BEGIN

第一步,獲取FEP連接

BEGIN

ftp_connection:=cux_ftp.login(v_host,

v_port,

vuser,

vpassword);

dbms_output.put_line(,獲取FTP連接成功,);

-一并始下載文件

cux_ftp.get(p_conn=>ftp_connection,

p_from_file=>v_filename,

p_to_dir=>v_directory,一下載到改目錄

p_to_file=>v_filename);

EXCEPTION-

WHENOTHERSTHEN

dEn5_output.put_line「獲取連接火敗,||

SQLERRM);

ftp_connection:=NULL;

END;

END;

結(jié)果

SQLoutputStatistics

ClearBuffersize50000:MEnabled

220

331Passwordrequiredforroot.

230Userrootloggedin.

獲取FTP連接成功

227EnteringPassiveMode(10,10,10,103,240,124).

150Openingdataconnectionforget_test.txt.

226Filesentok

syfdemo.ml.com(1)x

/home/oracle/ljl

Name

白Jhomei4運(yùn)Ti豆鼠;

B-oracle

,,get_test.txt

;&Ijl

ffi-mail

國jioradiag_oracle

1.4.3刪除文件

測試代碼

DECLARE

——Localvariableshere

ftp_connectionutl_tcp.connection;

v_hostVARCHAR2(50):=,10.10.10.1031;

v^portVARCHAR2(2;:-'21,;

v^userVARCHAR2(50):='root';

v_passwordVARCHAR2(50):='rootroot1;

v_filehandleutl_file.file_type;

v二filenameVARCHAR2(200)-:='TEST123.txt';

BEGIN

--第一步,獲取FTP連接

BEGIN

itp_connection:=cux_ftp.login(v_host,

v_port,

v_user,

v_password);

dbmsoutput.put」ine('獲取FTP連接成功');

--并始下載文件

cuxftp.delete(pconn=>ftpconnection,

p_file=>v_filename);

EXCEPTION

WHENOTHERSTHEN

dbms_output.put_line「獲取連接失敗,I|SQLERRMj;

ftp_connection:=NULL;

END;

END;

結(jié)果

SQLOutputStatistics

ClearBuffersize50000:Enabled

220

331Passwordrequiredforroot.

230Userrootloggedin.

獲取FTP連接成功

227EnteringPassiveMode(10,10,10,103,242,167).

250File17TEST123.txt1deleted.

系統(tǒng)建成■]?ftpjmp

M/SoftwareMyGames迅雷下0HostTNSHand.Training...漢兩項(xiàng)目開發(fā)漢兩項(xiàng)目文件FileRecv

文件

Ti>ftp_tmp

名稱修改日期類型大小

4工或Hgettest.txt2015/5/318:09TXT文件

?桌面

Q最近訪問的位■

AOneDrive

1.5案例

1.5.1簡單案例

簡單傳輸客戶信息的ftp案例

99

CUX_ftp.pckcux_aeb_interface_pub.pck

cux_aeb_customer_outbound_prg.pck

1.5.2成熟案例

在項(xiàng)目上使用比較FTP比較好的有日立項(xiàng)目,比較通用的平臺可以使用"TBU-HN-KM19

通用FTP接口平臺”,有需要的可以參考一下。

2.SFTP

SFTP是SecureFileTransferProtocol的縮寫,是安全文件傳送協(xié)議??梢詾閭鬏斘募?/p>

提供?種安全的加密方法。跟ftp幾乎語法功能一樣。

SFTP是SSH的一部分,是一種傳輸檔案至Blogger伺服器的安全方式。它本身沒有單獨(dú)

的守護(hù)進(jìn)程,必須使用sshd守護(hù)進(jìn)程來完成相應(yīng)的連接操作,所以從某種意義上來

說,SFTP并不像一個服務(wù)器程序,而更像是一個客戶端程序。SFTP同樣是使用加密傳

輸認(rèn)證信息和傳輸?shù)臄?shù)據(jù),所以使用SFTP是十分安全的。但由于這種傳輸方式使用了

加密/解密技術(shù),所以傳輸效率比普通的FTP要低得多。在對網(wǎng)絡(luò)安全性要求更高時,

代替FTP使用。

2.1FTP與SFTP

2.1.1區(qū)別

SFTP作為FTP的一種加強(qiáng)協(xié)議安全性,在文件傳輸?shù)臅r候更加的安全,因?yàn)檫@邊公司

是做的安全的,所以最后采用SFTP的方式來進(jìn)行數(shù)據(jù)文件的交互。

2.1.2優(yōu)缺點(diǎn)

SFTP傳輸效率會比FTP要低。默認(rèn)端口為22

2.2EBS中使用SFTP

2.2.1實(shí)現(xiàn)方式

使用JavaSource實(shí)現(xiàn)SFTP操作服務(wù)器文件:具體使用的是JSCHJavaLibrary

222JSCHJavaLibrary

JSCH是用java實(shí)現(xiàn)SSH功能的庫,JSCH是?個純粹的用java實(shí)現(xiàn)SSH功能的java

library.

官方地址為:http:〃/jsch/

2.2.3調(diào)用方式

調(diào)用JAVA程序時,常見的方式有把jar包load到數(shù)據(jù)庫中,在數(shù)據(jù)庫白通過函數(shù)的方式

調(diào)用JAVA方法;另外一種方式就是寫JAVA程序調(diào)用jar中的方法,再通過并發(fā)請求調(diào)

用客戶化的JAVA程序

2.2.4安裝

1.登陸到EBS服務(wù)器,

2.上傳SFTP文件夾里面的jzlib.jar和jsch-0.L45.jar到服務(wù)器路徑$HOME/instalI

3.執(zhí)行下面的命令

cdSUOME/install

loadjava-r-f-o-userapps/appsjzlib.jar

loadjava-r-f-o-userapps/appsjsch-0.1.45.jar

4.登陸到EBS數(shù)據(jù)庫,編譯SFTP文件夾里面程序:

XxfndSftp.jsp

xxfnd_sftp_utl.pck

xxfnd_sftp_utl.pckXxfndSftp.jsp

jsch-0.1.45.jarjzlib.jar

2.3用法舉例

2.3.1文件上傳

從本地數(shù)據(jù)庫服務(wù)器發(fā)送到目標(biāo)服務(wù)器

--uploadfile

BEGIN

--dbms_java.set_output(10000);--EnabledJavaOutput

xxfnd_sftp_utl.upload_file(host=>,03,,

port'22\

username'oratest',

password1oratest,,

sourcefile

'/hone/oratest/1j1/PopulateJsonData.javaI

destfile=>

*/home/oratest/java_int/I/PopulateJsonData.java');

EXCEPTION

WHENOTHERSTHEN

dbms_output.put_line(SQLERRM);

END;

2.3.2創(chuàng)建后上傳

現(xiàn)在本地服務(wù)器創(chuàng)建文件,創(chuàng)建完成后傳輸?shù)侥繕?biāo)服務(wù)器

--uploadfileanddata

BEGIN

--dbms_java.set_output(10000);—EnabledJavaOutput

xxfnd_sftp_utl.upload_file(host=>'031,

port=>'22',

username=>'oratest,,

password=>'oratest’,

sourcefile=>

'/home/oratest/1j1/1.txt',

destfile->

*/home/oratest/javaint/*,

data=>'SFTPTesting

@20140603');

EXCEPTION

WHENOTHERSTHEN

dbms_output.put_line(SQLERRM);

END;

2.3.2刪除本地文件

輸入本地文件路徑即可刪除

--deletelocalfile

BEGIN

--dbms_java.set_output(10000);一一EnabledJavaOutput

xxfnd_sftp_utl.delete_file(deletefile=>

'/hone/oratest/1j1/1.txt');

EXCEPTION

WHENOTHERSTHEN

dbms_output.put_line(SQLERRM);

END;

2.3.3刪除遠(yuǎn)程文件

輸入近程服務(wù)器地址信息及遠(yuǎn)程服務(wù)器文件路徑即可刪除

--deleteremovefile

BEGIN

一一dbms_java.set_output(10000);一一EnabledJavaOutput

xxfnd_sftp_utl.delete_file(host=>'192.168.0.2031,

port=>'22\

username=>'oratest,,

password=>'oratest,,

deletefile=、

*/hone/oratest/java_int/l.txt*);

EXCEPTION

WHENOTHERSTHEN

dbms_output.put_line(SQLERRM);

END;

3.Webscrvicc文件傳輸

Webservice在實(shí)際應(yīng)用中也可以用來傳輸文件,但傳輸文件的大小是有限制的,一般

不允許超過2M,其實(shí)Webservice也不太適合用來傳輸文件;Webservice傳輸文件的原

理也是把文件當(dāng)作數(shù)據(jù)傳輸

3.1Webservice數(shù)據(jù)傳輸

3.1.1限制

在實(shí)際使用Webscrvice時存在一些限制,最明顯的就是傳輸文件的大小,

utl_http.write_text程序一次傳輸數(shù)據(jù)量最大不超過32K,當(dāng)然在讀取Webservice數(shù)

據(jù)的時候,一次讀取的數(shù)據(jù)量也應(yīng)不超過32K

3.1.2發(fā)送大數(shù)據(jù)

在Mctlink上也為我們提供了發(fā)送CLQB大數(shù)據(jù)的方法

CREATEORREPLACEFUNCTIONhttp_post(urlVARCHAR2,

req_bodyCLOBjRETURN

VARCHAR2AS

buffersizeNUMBER(4):=2000;

chunk_bufferVARCHAR2(20000);

chunklengthNUMBER(4);

chunkoffsetNUMBER;

request_body_lengthNUMBER;

requtl_http.req;

resputl_http.resp;

v_response_textVARCHAR2(32767);

BEGIN

req:=utlhttp.beginrequest(url,

,POST',

sys.utl_http.http_version_l_l');

utlhttp.setheader(req,

*Content-Type',

*text/xml');

utl_http.set_header(req,

,Transfer-Encoding’,

*chunked*);

request_body_length:=dbms_lob.getlength(req_body);

chunk_offset:=1;

WHILE(chunk_offset<request_body_length)

LOOP一一一

IFchunk_offset+buffersize>=request_body_lengthTHEN

chunk_length:=request_body_length-chunk_offset+1;

ELSE

chunk_length:=buffersize;

ENDIF;-

dbms_lob.read(reqbody,

chunk_length,

chunkoffset,

chunk_buffer);

utl_http.write_text(req,

chunk_buffer);

chunk_offset:=chunk_offset+chunk_length;

ENDLOOP;

-Therequestisactuallymadewhentheget_responsecallis

made

—andfarLhissiiup工ecase,we?willexpecLthewtibsexvexLo

respondwith

--lessthan32K.SeeNote:1072214.1forexampleof

response>32k

resp:=utl_http.get_response(req);

utl_http.readtext(resp,

v_response_text,

32767);

utl_http.end_response(resp);

RETURNv_response_text;

END;

3.1.3實(shí)際應(yīng)用

在實(shí)際應(yīng)用中,如果用Wcbservice發(fā)送文件數(shù)據(jù)的話,也會影響系統(tǒng)性能,由于文件

數(shù)據(jù)量比較大,Webservice服務(wù)也會處在高負(fù)荷運(yùn)行情況下,這樣傳輸?shù)男室矔?/p>

打折扣

3.2負(fù)載測試

3.2.1問題

調(diào)用WS時,如果請求或響應(yīng)的XML數(shù)據(jù)量過大,會發(fā)生

java.lang.OutOfMemoryErrorfi<jSYSTEMERRORo如數(shù)據(jù)量過大,可以采用分批多

次調(diào)用的方式來實(shí)現(xiàn),每次調(diào)用WS傳輸?shù)腦ML大小最好不要超過2M。以下是個人測

試調(diào)用ISG發(fā)布的WS,隨著數(shù)據(jù)量的遞增WS響應(yīng)時間遞增的記錄

3.2.2測試環(huán)境

EBSR12.1.3環(huán)境,系統(tǒng)狀態(tài)處于空閑狀態(tài),網(wǎng)絡(luò)狀況良好。

OS:RedHatEnterpriseLinuxServerrelease5.6(Tikanga)64位

CPU:2*4核*2.13GHz

內(nèi)存:32G

3.2.3測試結(jié)果

在數(shù)據(jù)量接近20M的時候數(shù)據(jù)基本上無法傳輸,這個在山推項(xiàng)目上就出現(xiàn)這種情況

返回記錄數(shù)響應(yīng)文件大小響應(yīng)時間(單位:說明

秒)

130298K0.6WebService正常響應(yīng)

230594K1WebService正常響應(yīng)

3501M1.2WebService正常響應(yīng)

5301.5M1.5WebService正常響應(yīng)

7302M2WebService正常響應(yīng)

13002.9M2.7WebService正常響應(yīng)

15004.4M4WebService正常響應(yīng)

17205M4.6WebService正常響應(yīng)

23005.8M5.4WebService正常響應(yīng)

25007.2M6.5WebService正常響應(yīng)

33008.7M8.3WebService正常響應(yīng)

350010M10WebService正常響應(yīng)

430011.6M11WebService正常響應(yīng)

530014.5M14.7WebService正常響應(yīng)

630017.4M1950%WebService響應(yīng)發(fā)生

錯誤

3.3用法舉例

3.3.1實(shí)際應(yīng)用

這里用發(fā)送hr模塊人員圖片進(jìn)行測試,per_images表中image字段就存儲了BLOB類

型,Oracle中文件數(shù)據(jù)常見的存儲方式就是存到表里

DECLARE

l_soap_contentCLOB;

l_soap_content_endCLOB;

l_hULp_requLl_hLLp.req;

Ihttpresputlhttp.resp;

l_soap_respondCLOB;

1respxmlxmltype;

l_nanufacturer_xmlxmltype;

1jsondataVARCHAR2(32767);

l_lengthNUMBER;

l_picBLOB;

l_cpicCLOB;

l_buffersizeNUMBER:=2400;

l_chunk_bufferVARCHAR2(32767);

l_chunk_lengthNUMBER;

l_chunk_offsetNUMBER;

l_request_body_lengthNUMBER;

BEGIN一一

l_soap_content:='<soapenv:Envelope

xmlns:soapenv='*http://schemas.xmlsoap.org/soap/envelope/*'

xmlns:ws="http://ws.esb./M>

<soapenv:Header/〉

<soapenv:Body>

<ws:sendMessage><baseParams>{

'?clientcode":"EHR”,

"tradeCode":,,MGR002'\

"regSerialNo1':"10012”,

'?tradeTime'1:',2014-08-2101:23:13”,

"tradeDescription”:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論