首页 > 解决方案 > SSIS 在设计时获取连接,但在同一台机器上调试期间失败

问题描述

为了这个,我把头撞在墙上。包含许多数据库连接的软件包。来自一台特定服务器的所有数据库都给我带来了问题。

为了排除其他配置问题,我创建了一个新的连接管理器。输入所有信息。除非我使用 FQDN,否则不会填充数据库列表。测试连接成功。执行使用连接管理器的任务。在验证步骤中挂起 30 秒,然后失败并显示:

Error: 0xC020801C at MyDataFlow, MyComponent [12]: SSIS Error Code 
DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.  The AcquireConnection method call to the 
connection manager "mydatabase" failed with error code 
0xC0202009.  There may be error messages posted before this with more information on why the 
AcquireConnection method call failed.

我已经尝试过 Microsoft OLEDB Driver for SQL Server,但没有成功。我能想到的关于这个服务器的唯一奇怪的事情是它有一个实例名称。这会影响这样的事情吗?在装有 Visual Studio 2017 的 Win7 机器上,它从来没有给我带来麻烦。我真的不知道如何调试它。

有趣的是,我也无法使用 SQLCMD 连接到该服务器。我收到类似的错误,但似乎是完全不同的驱动器:

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Unable to complete login process 
due to delay in opening server connection.

标签: sql-servervisual-studiossissql-server-data-tools

解决方案


尝试修改您的连接字符串以包含Connect Timeout=45;

默认连接超时为 15 秒,因此我们将超时时间增加三倍。

为什么会这样,我不知道。

但这从未阻止我猜测。在我的情况下,我得到

由于延迟打开服务器连接,无法完成登录过程

可用性组中的服务器的超时。但仅在节点的一侧。而且不是始终如一,但经常会毁了我的早晨(由于批处理作业失败导致用户愤怒)。堆栈中的某些东西疯狂地表明导致连接无法完全打开。无论是 DNS、网络、目标服务器太忙,还是谁知道,我的工具带中没有足够的工具来解决它。但是由于错误的根源是它无法足够快地登录,因此增加超时时间似乎是一种合理的方法。

在您的情况下,您需要指定 FQDN 和 SQLCMD 的事实显示出相同的症状,似乎有一些网络化的东西在起作用,但超出了我的专业知识。然而,命名实例不应该有任何影响。在过去的 N 年里,我的客户除了命名实例之外什么都没有。

和未来的读者,连接超时与命令超时之间的区别

https://blogs.msdn.microsoft.com/docast/2018/10/11/connection-timeout-and-command-timeout-in-sql-server/


推荐阅读