Oracle重启后BizTalk 2016发送端口连接超时问题咨询
BizTalk 2016 Oracle连接超时问题解决方案分析
问题场景
系统正常运行无异常,但每次Oracle因维护/补丁重启后,BizTalk 2016发送端口会触发如下连接超时错误:
Microsoft.ServiceModel.Channels.Common.ConnectionException:
Connection request timed out --->
Oracle.DataAccess.Client.OracleException: Connection request timed out
临时解决方法为重启BizTalk主机实例,但无法覆盖非工作时间的情况,需彻底解决该问题。当前发送端口的UseOracleConnectionPool属性设置为True,咨询是否可通过将该参数设为False解决问题(接受连接速度变慢的代价)。
针对UseOracleConnectionPool=False的分析
将UseOracleConnectionPool设为False确实可以避免该错误:
- 启用连接池时,BizTalk会复用ODP.NET连接池中的已有连接。Oracle重启后,池内的旧连接已失效,但BizTalk端未及时感知,导致请求使用失效连接触发超时。
- 禁用连接池后,每次发送请求都会创建全新的Oracle连接,不会复用失效连接,因此不会出现超时问题。
- 代价是每次请求都需要重新建立数据库连接,会增加连接开销,导致请求响应速度变慢,具体影响程度取决于业务的请求量和频率。
无需禁用连接池的替代方案
如果不想牺牲连接性能,可尝试以下方案:
- 调整ODP.NET连接池参数:
- 在连接字符串中添加
Validate Connection=True,每次从连接池获取连接时自动验证有效性,若连接已失效则丢弃并新建。 - 设置
Connection Lifetime参数(单位为秒),让连接池自动回收存活时间超过阈值的连接,避免长时间持有失效连接。
- 在连接字符串中添加
- 配置BizTalk发送端口自动重试:
给发送端口设置合理的重试间隔和重试次数,当出现连接超时错误时自动触发重试,无需人工干预即可恢复。 - 自动刷新连接池:
通过脚本监控Oracle重启事件,触发BizTalk相关API刷新发送端口的连接池,无需重启主机实例即可清除失效连接。
内容的提问来源于stack exchange,提问作者NealWalters
相关产品推荐
相关产品推荐

