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 连接管理器错误

SSIS - 比较文本文件和非oledb连接以提供匹配和不匹配的输出

如何在 SSIS 脚本组件中使用 OLEDB 连接执行 SqlCommand

源查询中的 ssis oledb 源死锁

SQL Server 2016/Visual Studio 2015 上的 SSIS OLEDB.12.0 问题