SSIS - 旧版本OLEDB不支持Always On Availability Group
Posted 詩和遠方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSIS - 旧版本OLEDB不支持Always On Availability Group相关的知识,希望对你有一定的参考价值。
问题
数仓项目中有上游将SQL Server升级为Always On高可用集群,导致我们使用OLEDB连接方式的SSIS Package在运行时出现了不稳定的情况,偶尔会连接失败。典型报错信息为Unable to complete login process due to delay in opening server connection。
查询相关资料后发现OLEDB即使在连接属性中加入了MultiSubnetFailover=True
也很可能不起作用,官方文档已指出,旧版的OLEDB(SQL Native Client 11.0 OLEDB和Microsoft OLE DB Provider for SQL Server)已不推荐使用,2018新推出的Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL)开始支持最新功能。
现实情况是大量项目均在使用旧版本,而且OLEDB连接由于在SSIS中功能更多而被大量使用。
可选方案
所以如果要支持高可用集群,恐怕得将连接换为ODBC或ADO.NET。过渡期间可暂时直接连接物理服务器名(Primary Replica)。
其它说明
- 使用ODBC连接故障转移集群时,需要加上
MultiSubnetFailover=Yes
选项,相关文档 - 使用ADO.Net连接故障转移集群时,不加
MultiSubnetFailover=Yes
也可正常工作,但加上会有额外的性能提升 - 若故障转移集群为SQL Server 2012版本,以上两种方式都需加上
MultiSubnetFailover=Yes
- sqlcmd基于ODBC连接,若要支持failover,需要加上-M选项
- bcp也是基于ODBC连接,若要支持failover,需要在ServerName上加上
;MultiSubnetFailover=Yes
,比如:
bcp testdb.dbo.Table_A out C:\\Test\\Table_A.csv -T -c -t, -S server_name;multisubnetfailover=Yes
备注:以上均为个人理解,技术也一直在变化(比如OLEDB,一度被微软deprecated,2018年又undeprecated),所以文章仅供参考,若有错漏请指出。
以上是关于SSIS - 旧版本OLEDB不支持Always On Availability Group的主要内容,如果未能解决你的问题,请参考以下文章
如何将 TFS 旧版本的 SSIS 包更新到当前部署的版本?
SSIS - 比较文本文件和非oledb连接以提供匹配和不匹配的输出