朱穎琪
摘 要:隨著信息化的不斷深入,企業(yè)內(nèi)部存在著各種各樣的異構(gòu)軟、硬件平臺(tái),形成異構(gòu)數(shù)據(jù)源。當(dāng)各應(yīng)用系統(tǒng)間需要進(jìn)行數(shù)據(jù)交流時(shí),其復(fù)制數(shù)據(jù)效率及準(zhǔn)確性、及時(shí)性必然受到平臺(tái)異影響。為了解決這一問(wèn)題,通常利用數(shù)據(jù)庫(kù)數(shù)據(jù)實(shí)時(shí)同步進(jìn)行交互。但是,當(dāng)各平臺(tái)數(shù)據(jù)量為PB級(jí),數(shù)據(jù)交流時(shí)間較長(zhǎng),各種保護(hù)機(jī)制將中斷連接,導(dǎo)致之前的數(shù)據(jù)失效,因此有必要設(shè)置TCP探針?lè)罃?shù)據(jù)中斷。
關(guān)鍵詞:海量數(shù)據(jù)交互;異構(gòu)平臺(tái);TCP探針
DOI:10.16640/j.cnki.37-1222/t.2017.20.112
當(dāng)同步數(shù)據(jù)過(guò)程中源數(shù)據(jù)長(zhǎng)時(shí)間處于前期查詢處理,而不能即時(shí)將數(shù)據(jù)同步到目的數(shù)據(jù)庫(kù),目的數(shù)據(jù)庫(kù)在一定時(shí)間內(nèi)檢測(cè)不到監(jiān)聽(tīng)連接通道中有數(shù)據(jù)推送,就會(huì)默認(rèn)為源數(shù)據(jù)庫(kù)數(shù)據(jù)已完成同步,隨后立即主動(dòng)在TCP協(xié)議中向源數(shù)據(jù)庫(kù)發(fā)送FIN標(biāo)志位,源數(shù)據(jù)庫(kù)在接收到FIN標(biāo)志位后會(huì)主動(dòng)斷掉監(jiān)聽(tīng)連接通道,這樣的“假結(jié)束”造成數(shù)據(jù)同步失敗。因此將目的數(shù)據(jù)庫(kù)推遲發(fā)送FIN標(biāo)志位是關(guān)鍵點(diǎn)。
1 原理說(shuō)明
根據(jù)TCP面向連接的通信協(xié)議,采取在目的數(shù)據(jù)庫(kù)設(shè)置TCP探針調(diào)整超時(shí)參數(shù),使其與業(yè)務(wù)同步數(shù)據(jù)量相適應(yīng),保證在大數(shù)據(jù)量同步之前,不會(huì)立即發(fā)送FIN標(biāo)志位結(jié)束數(shù)據(jù)同步傳輸。
沒(méi)有設(shè)置TCP探針前報(bào)錯(cuò)如下:
Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=172.**.**.**)(PORT=****))
TNS-00505: 操作超時(shí)
nt secondary err code: 60
nt OS err code: 0
ns secondary err code: 12560
nt main err code: 505
TNS-12535: TNS: 操作超時(shí)
Tracing not turned on.
Tns error struct:
ns main err code: 12535
VERSION INFORMATION: TNS for 32-bit Windows: Version 11.1.0.7.0 - Production Oracle Bequeath NT
Protocol Adapter for 32-bit Windows: Version 11.1.0.7.0 - Production Windows NT TCP/IP NT Protocol
Adapter for 32-bit Windows: Version 11.1.0.7.0 - Production
Fatal NI connect error 12170.
Oracle 11G有兩個(gè)參數(shù)SQLNET.INBOUND_CONNECT_TIMEOUT
和INBOUND_CONNECT_TIMEOUT_listenername;他們的默認(rèn)值均為60s,這兩個(gè)參數(shù)負(fù)責(zé)登陸用戶與服務(wù)器驗(yàn)證的超時(shí)時(shí)間,在Oracle 10G R2以前的版本默認(rèn)是0s,為了防止Denial of Service (DOS)攻擊,在此后的版本中才設(shè)置為60s。如果在數(shù)據(jù)交互期間目的數(shù)據(jù)庫(kù)沒(méi)有收到源數(shù)據(jù)庫(kù)的同步數(shù)據(jù),那么將會(huì)在60后發(fā)送FIN標(biāo)志位中斷數(shù)據(jù)同步通道并給出錯(cuò)誤提示,對(duì)于數(shù)據(jù)量較大的同步作業(yè)這個(gè)超時(shí)時(shí)間顯然較短。
設(shè)置TCP探針后:
在目的數(shù)據(jù)庫(kù)Oracle數(shù)據(jù)庫(kù)設(shè)置INBOUND_CONNECT_TIMEOUT
參數(shù),按照Oracle官方文檔建議設(shè)為360s(實(shí)際參數(shù)值可根據(jù)不同業(yè)務(wù)需求進(jìn)行設(shè)置)Oracle 11g has a problem that is session timeout problem. You can add a row to sqlnet.ora file and listener.ora file to resolve session timeout problem.
sqlnet.ora
Note : Add this line to below of sqlnet.ora file.
INBOUND_CONNECT_TIMEOUT=360
listener.ora
Note : Add this line to below of listener.ora file.
通過(guò)將INBOUND_CONNECT_TIMEOUT設(shè)置為360秒,可使目的數(shù)據(jù)庫(kù)延遲6分鐘發(fā)送FIN標(biāo)志位。這樣便能保證數(shù)據(jù)同步成功,繼而保證應(yīng)用系統(tǒng)間需要進(jìn)行數(shù)據(jù)交流時(shí)其效率及準(zhǔn)確性。
2 成果實(shí)施效果
基于Oracle數(shù)據(jù)庫(kù)的TCP探針技術(shù)已在營(yíng)銷、人資、財(cái)務(wù)等多個(gè)重要系統(tǒng)數(shù)據(jù)庫(kù)進(jìn)行設(shè)置調(diào)整,至今未出現(xiàn)故障和隱患。取得如下效果:
(1)極大保障了應(yīng)用系統(tǒng)間數(shù)據(jù)同步準(zhǔn)確性、完整性。
(2)減輕目的端數(shù)據(jù)庫(kù)的負(fù)載,不會(huì)因INBOUND_CONNECT_TIMEOUT參數(shù)設(shè)置過(guò)短在交互過(guò)程中頻繁的向源端發(fā)起FIN標(biāo)志位請(qǐng)求,斷開(kāi)數(shù)據(jù)傳輸通道。
(3)減少人力資源支出,數(shù)據(jù)量較大時(shí),會(huì)花費(fèi)很長(zhǎng)時(shí)間,期間需派人員專門看守防止中途出現(xiàn)同步失敗。人力資源成本標(biāo)準(zhǔn)為平均每小時(shí)人力成本約為:112元?,F(xiàn)在業(yè)務(wù)數(shù)據(jù)量巨大,平均500GB的數(shù)據(jù)至少需12小時(shí)完成。如果合理設(shè)置INBOUND_CONNECT_TIMEOUT參數(shù),同步數(shù)據(jù)時(shí)就不需要專人看守,一次同步500GB的數(shù)據(jù)量便可節(jié)約人力資源成本12小時(shí) * 112元/每小時(shí)=1350元,重要業(yè)務(wù)數(shù)據(jù)一年同步96次,便可節(jié)約人力資源成本96次 * 1350次/元=129600元。如果涉及到的數(shù)據(jù)量共計(jì)10TB,那么年節(jié)資總額為:10TB/500GB*129600元=2592000元。
3 成果推廣前景
只要是通過(guò)Oracle數(shù)據(jù)庫(kù)之間的業(yè)務(wù)數(shù)據(jù)同步,均可使用TCP探針技術(shù)。對(duì)于后續(xù)其他重要業(yè)務(wù)系統(tǒng)數(shù)據(jù)的同步抽取有著重要支撐作用。
4 創(chuàng)新點(diǎn)總結(jié)
TCP探針技術(shù)根本上解決了數(shù)據(jù)交互通道中,在長(zhǎng)時(shí)間沒(méi)有數(shù)據(jù)接收與發(fā)送的狀態(tài)下,目的端主動(dòng)斷掉數(shù)據(jù)通道的問(wèn)題,通過(guò)對(duì)TCP探針的設(shè)置能使數(shù)據(jù)的整個(gè)交互通道穩(wěn)定可靠,不會(huì)因?yàn)閿?shù)據(jù)超時(shí)問(wèn)題,提前結(jié)束數(shù)據(jù)交互,另外設(shè)置TCP探針技術(shù)還有助于提升連接超時(shí)時(shí)間,目的端設(shè)置TCP探針后會(huì)每隔一段時(shí)間向源端發(fā)送ACK標(biāo)志位說(shuō)明需要保持?jǐn)?shù)據(jù)通道使用,因此連接超時(shí)時(shí)間便會(huì)提升。endprint