朱穎琪
摘 要:隨著信息化的不斷深入,企業內部存在著各種各樣的異構軟、硬件平臺,形成異構數據源。當各應用系統間需要進行數據交流時,其復制數據效率及準確性、及時性必然受到平臺異影響。為了解決這一問題,通常利用數據庫數據實時同步進行交互。但是,當各平臺數據量為PB級,數據交流時間較長,各種保護機制將中斷連接,導致之前的數據失效,因此有必要設置TCP探針防數據中斷。
關鍵詞:海量數據交互;異構平臺;TCP探針
DOI:10.16640/j.cnki.37-1222/t.2017.20.112
當同步數據過程中源數據長時間處于前期查詢處理,而不能即時將數據同步到目的數據庫,目的數據庫在一定時間內檢測不到監聽連接通道中有數據推送,就會默認為源數據庫數據已完成同步,隨后立即主動在TCP協議中向源數據庫發送FIN標志位,源數據庫在接收到FIN標志位后會主動斷掉監聽連接通道,這樣的“假結束”造成數據同步失敗。因此將目的數據庫推遲發送FIN標志位是關鍵點。
1 原理說明
根據TCP面向連接的通信協議,采取在目的數據庫設置TCP探針調整超時參數,使其與業務同步數據量相適應,保證在大數據量同步之前,不會立即發送FIN標志位結束數據同步傳輸。
沒有設置TCP探針前報錯如下:
Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=172.**.**.**)(PORT=****))
TNS-00505: 操作超時
nt secondary err code: 60
nt OS err code: 0
ns secondary err code: 12560
nt main err code: 505
TNS-12535: TNS: 操作超時
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有兩個參數SQLNET.INBOUND_CONNECT_TIMEOUT
和INBOUND_CONNECT_TIMEOUT_listenername;他們的默認值均為60s,這兩個參數負責登陸用戶與服務器驗證的超時時間,在Oracle 10G R2以前的版本默認是0s,為了防止Denial of Service (DOS)攻擊,在此后的版本中才設置為60s。如果在數據交互期間目的數據庫沒有收到源數據庫的同步數據,那么將會在60后發送FIN標志位中斷數據同步通道并給出錯誤提示,對于數據量較大的同步作業這個超時時間顯然較短。
設置TCP探針后:
在目的數據庫Oracle數據庫設置INBOUND_CONNECT_TIMEOUT
參數,按照Oracle官方文檔建議設為360s(實際參數值可根據不同業務需求進行設置)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.
通過將INBOUND_CONNECT_TIMEOUT設置為360秒,可使目的數據庫延遲6分鐘發送FIN標志位。這樣便能保證數據同步成功,繼而保證應用系統間需要進行數據交流時其效率及準確性。
2 成果實施效果
基于Oracle數據庫的TCP探針技術已在營銷、人資、財務等多個重要系統數據庫進行設置調整,至今未出現故障和隱患。取得如下效果:
(1)極大保障了應用系統間數據同步準確性、完整性。
(2)減輕目的端數據庫的負載,不會因INBOUND_CONNECT_TIMEOUT參數設置過短在交互過程中頻繁的向源端發起FIN標志位請求,斷開數據傳輸通道。
(3)減少人力資源支出,數據量較大時,會花費很長時間,期間需派人員專門看守防止中途出現同步失敗。人力資源成本標準為平均每小時人力成本約為:112元。現在業務數據量巨大,平均500GB的數據至少需12小時完成。如果合理設置INBOUND_CONNECT_TIMEOUT參數,同步數據時就不需要專人看守,一次同步500GB的數據量便可節約人力資源成本12小時 * 112元/每小時=1350元,重要業務數據一年同步96次,便可節約人力資源成本96次 * 1350次/元=129600元。如果涉及到的數據量共計10TB,那么年節資總額為:10TB/500GB*129600元=2592000元。
3 成果推廣前景
只要是通過Oracle數據庫之間的業務數據同步,均可使用TCP探針技術。對于后續其他重要業務系統數據的同步抽取有著重要支撐作用。
4 創新點總結
TCP探針技術根本上解決了數據交互通道中,在長時間沒有數據接收與發送的狀態下,目的端主動斷掉數據通道的問題,通過對TCP探針的設置能使數據的整個交互通道穩定可靠,不會因為數據超時問題,提前結束數據交互,另外設置TCP探針技術還有助于提升連接超時時間,目的端設置TCP探針后會每隔一段時間向源端發送ACK標志位說明需要保持數據通道使用,因此連接超時時間便會提升。endprint