26

这是我最近修改这个问题的努力。但是这一次,我试图遵循 Oded 在他的文章Getting good answers on StackOverflow中给出的良好建议。

我需要找出如何确定以下错误的根本原因:

通讯链路故障

TCP 提供程序:指定的网络名称不再可用

运行一组 SSIS 包时,我有时会看到此错误。当从以下位置运行一个到多个包时,可能会发生此错误:

  1. SQL Server 代理作业
  2. 一个批处理文件
  3. 在 BIDS 的调试模式下

我看到的完整错误消息如下:

SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“通信链路故障”。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“TCP Provider:指定的网络名称不再可用。”。

SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“TDS 流中的协议错误”。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“通信链路故障”。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“TCP 提供程序:现有连接被远程主机强行关闭。”

这是我如何设计 ETL 过程的概述:

  • 两台服务器
  • 两者都是虚拟机
  • SSIS 包在应用服务器上运行
  • SQL Server 数据库位于数据库服务器上

我使用 OLE DB 连接管理器从应用服务器上的 SSIS 包连接到数据库服务器上的 SQL Server 数据库。

这些包在应用程序服务器上作为文件系统部署运行,而不是作为数据库服务器上的数据库部署运行。

这样做的主要原因是 ETL 集成了一组工具,这些工具在数据库服务器上找不到并且驱动器无法访问。这些工具包括 Apex Data Loader for Salesforce 和 pgAdmin III。

到目前为止,我无法始终如一地重现此错误。但是,这是我观察到的:

  • 在正常工作时间更频繁地发生故障
  • 在非工作时间发生故障的频率较低

在星期五早上大约两个小时的时间里,我能够成功地在特定包上重现错误。

如果启用了大数据流之前的子包调用,则在大数据流期间发生错误。

如果禁用大数据流之前的子包调用,则在同一大数据流期间不会发生错误。

有问题的子包回调数据库以检索少量信息以用于电子邮件正文,然后发送电子邮件。

感觉可能超出了资源限制?

也许是连接限制?

我想知道应该使用哪些工具来尝试确定错误的根本原因。

下面列出了有关所涉及的两台服务器的技术细节:

SQL Server 和数据库服务器信息:
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 版权所有 (c) Microsoft Corporation Enterprise Edition (64-bit) o​​n Windows NT 6.1 (Build 7601) : Service Pack 1) (管理程序)

SSIS 信息:
Microsoft Visual Studio 2008 版本 9.0.30729.1 SP Microsoft .NET Framework 版本 3.5 SP1

应用服务器信息:
操作系统名称:Microsoft Windows Server 2008 R2 标准版本:6.1.7601 Service Pack 1 Build 7601

我已经在线研究了错误消息并找到了这些,但我真的很想在继续之前获得专家的见解:

任何帮助表示赞赏。

谢谢

更新:

进一步的测试表明,这不是“SSIS 问题”,因为在使用 SQL Server Management Studio 时会以相同的速度出现相同的错误。查询的复杂性不会或多或少地产生错误。为了解决这个问题,我们尝试了一种修复方法(如下):

这是我们的第一次尝试。TCP 烟囱现在在应用程序服务器和数据库服务器上被禁用。测试表明,相同的错误以相同的速率发生。

那么从这里去哪里呢?老实说,我不确定。一个看似不错的选择仍然存在:

  • 应用程序服务器和数据库服务器 SQL Server 安装不完全匹配
  • 应用程序服务器 = SQL Server 2008 (SP1) - 10.0.2531.0 (X64)
  • 数据库服务器 = SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)

计划是升级应用程序服务器上的 SQL Server 安装。这是一种打击和希望,但在这一点上,这似乎是最好的选择。我的大脑告诉我,这可以通过修复硬件问题(我的意思是维修或更换)来解决,并且硬件和软件配置可能对此无能为力。

但是,我仍然不确定如何确定根本原因。我仍然想知道应该使用哪些工具来诊断根本原因。

4

5 回答 5

1

您在 Application Server 端有 AV 软件吗?如果是,请尝试禁用 AV - 有时 AV 会阻止 TCP/IP 流量。通过在此处禁用 AV 解决了“指定的网络名称不再可用”的问题: https ://community.spiceworks.com/topic/239423-the-specified-network-name-is-no-longer-available-while -写入共享目录

于 2018-05-23T10:42:51.343 回答
1

错误消息表明连接被强制关闭。您还提到当您运行大量作业时会发生这种情况。很可能,网络防火墙是罪魁祸首。您应该联系防火墙管理员来研究日志,以查看防火墙是否关闭了连接。如果是这种情况,则存在两种可能的解决方案:

  1. 为触发的任何防火墙规则添加例外并导致连接关闭。
  2. 停止同时运行这么多作业。您应该考虑按顺序运行它们。这也秉承了做好网络公民的理念。
于 2018-11-28T23:02:23.007 回答
0
  1. 首先,您是否尝试删除 nic 上的大型发送卸载设置?
  2. 第二点,如果你能重现错误,你能运行一个wireshark来捕获数据包吗?
  3. 第三点,您是否尝试从 VM 更改 vnic ?某些型号可能会导致问题。(如果你使用vmxnet3,试试e1000等。)
  4. 最后一点,它们之间是否有 vswitch,它们在同一台主机上,之间的物理交换机等...配置不当的交换机可能会丢弃流量,如果在主机内部使用同一主机和同一 vswitch,这是最好的测试,如流量永远不会离开服务器。
于 2014-12-02T01:48:36.213 回答
0

这个问题似乎有多种原因。对我来说,SQL 文件太大了,大约 150MiB。将其拆分为较小的文件对我有用。

于 2022-02-11T13:23:46.353 回答
-2

尝试使用 ODBC 而不是 OLE DB 连接到数据库。

于 2017-05-17T05:18:07.117 回答