TCP探针防数据中断方法研究与实现

2017-10-17 22:18朱颖琪
山东工业技术 2017年20期

朱颖琪

摘 要:随着信息化的不断深入,企业内部存在着各种各样的异构软、硬件平台,形成异构数据源。当各应用系统间需要进行数据交流时,其复制数据效率及准确性、及时性必然受到平台异影响。为了解决这一问题,通常利用数据库数据实时同步进行交互。但是,当各平台数据量为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