Azure Data Factory SHIR连接本地Oracle Linked Service报错求助
排查方案及解决建议
1. Oracle服务端链路配置排查
- 检查Oracle服务器的SQLNET.EXPIRE_TIME参数:该参数默认通常为0,若近期运维调整过防火墙会话超时时间,未同步调整该参数会导致空闲连接被防火墙主动掐断,ODBC驱动无法感知就会抛出Connection Dead报错。建议将该参数设置为低于防火墙会话超时阈值1-2分钟,修改后重启Oracle监听生效。
- 排查Oracle侧会话限制:检查是否开启了用户会话数上限、IP连接频率限制,或者近期更新了登录触发器逻辑,拦截了SHIR节点的连接请求,可通过Oracle视图
v$session、dba_audit_trail查看SHIR节点IP的连接记录是否被主动终止。 - 确认Oracle TLS/SSL配置变更:若近期开启了Oracle服务端的传输加密,微软原生Oracle Linked Service默认使用的ODBC驱动可能未匹配加密设置,需在Linked Service的连接字符串中新增
EncryptionMethod=1参数强制启用SSL加密匹配服务端配置。
2. SHIR节点ODBC驱动适配排查
- 你当前使用的是SHIR内置的微软ODBC Oracle Wire Protocol驱动,可尝试在SHIR节点上单独安装对应Oracle版本的官方ODBC驱动,然后在原生Oracle Linked Service的配置中指定使用自定义驱动,填写驱动名称
Oracle in OraClient19Home1(根据你安装的实际驱动名称调整),避免内置驱动与Oracle版本的兼容性问题。 - 检查SHIR节点的TCP Chimney、RSS等网络卸载功能:Windows Server默认开启的这些功能偶尔会导致长连接数据包异常丢失,可通过管理员权限执行命令
netsh int tcp set global chimney=disabled rss=disabled关闭后重启节点测试。
3. ADF Linked Service参数优化
- 在原生Oracle Linked Service的连接字符串中添加连接保活参数:
KeepAlive=1;KeepAliveTime=60;Connection Timeout=180,强制驱动主动发送保活包避免连接被中间链路中断。 - 调整SHIR的并发连接限制:你当前是4节点SHIR集群,若近期数据同步任务并发数上调,超过了SHIR默认的Oracle连接池上限,也会触发连接异常断开,可在SHIR安装目录下的
diawp.exe.config文件中调整连接池最大连接数配置后重启SHIR服务。
临时规避方案
如果上述排查短时间无法定位问题,可在现有ODBC Linked Service的基础上自定义查询语句实现schema、分区逻辑,不需要重写所有管道:在复制活动的源配置中选择“查询”模式,手写指定分区列、查询范围的SQL语句,性能可提升到原生Oracle驱动的80%以上,远高于默认全表同步的性能。
内容的提问来源于stack exchange,提问作者DanielGhita
相关产品推荐
相关产品推荐

