非常偶发无法初始化链接服务器的 OLE DB 提供程序“SQLNCLI11”的数据源对象

Dre*_*rew 5 sql-server linked-server errors connections

链接服务器“001”的 OLE DB 访问接口“SQLNCLI11”返回消息“由于打开服务器连接延迟,无法完成登录过程”。消息 7303,级别 16,状态 1,第 19 行无法初始化链接服务器“001”的 OLE DB 访问接口“SQLNCLI11”的数据源对象。

我意识到有很多潜在适用的 SO 帖子和谷歌点击(其中许多我已经阅读了很多次),所以让我来看看我们所看到的和我们已经尝试过的。老实说,我现在不知道还有什么可看的。

我们将链接服务器 001(目标)转到 002(源)作为 SQL 登录名,该登录名从 C#/.Net 应用程序代码作为 proc 通过数据访问方法和 SSPI 连接字符串通过具有适当权限的服务帐户调用。我相信 .Net 版本是 4.3,现在是 4.7,但问题在两者中都存在。它是从不同网络上的旧 2008R2 环境迁移而来的,这在物理设备上从来都不是问题,而且两个新的当前都是 64 位 2016 虚拟机。

问题期间始终可重现,但在其他情况下则不然,并且似乎总是相同的调用。对于阻塞/死锁/奇怪的锁定页面或对象,sp_what 中没有显示任何内容。如果未报告该问题,则该问题将无法重现。有时它只发生一次或两次,有时持续 10-15 周,然后它会正常工作数周。不确定它是否相关,但是当我们看到这个时,应用程序偶尔也会显示线程中止,但我认为这更像是一种症状。

  • 双方的链接服务器和帐户已通过脚本和 GUI 以及已知的工作链接服务器手动重新创建。我已经多次确认他们没有被锁定并且拥有正确的权限。
  • 我增加了双方的最大查询超时。
  • SQLNCLI11.DLL 驱动程序位于与 SQL Server 安装相同版本的两台服务器上。
  • SQL 管理或错误日志中没有显示任何明显的登录失败、损坏或奇怪行为。
  • 我们在任何一方的服务器事件日志中都看不到任何内容。
  • 我们的网络和安全团队进行了检查,并没有发现位于同一交换机上且未通过防火墙的连接和流量方面的任何问题。
  • 端口是开放的。
  • 当这些问题发生时,来自链接服务器的测试连接工作正常,我通常可以通过临时访问底层问题表,但不能访问存储过程的代码,甚至就地运行。

我在这里缺少什么?

小智 0

在一个非常古老的线程上有几件事需要检查。也许对于下一个人:

  • 查看正向和反向 DNS 条目。当我们遇到由 IP 冲突引起的 SPN 问题时,我们看到了类似的行为。
  • 检查您的客户端是否使用 Kerberos 或 NTLM 连接到源 SQL 服务器。您可以设置登录触发器并拉取 auth_scheme。如果您在 NTLM 中看到了需要 Kerberos 的地方,那么您也许能够跟踪问题的根源。