【问题标题】:What might be causing this SQL job to randomly fail to execute?什么可能导致此 SQL 作业随机执行失败?
【发布时间】:2018-05-26 16:58:08
【问题描述】:

我正在使用 SQL Server 2014,并且我有一个 SQL 作业 (SSIS Package) 设置为每天在特定时间运行。 在过去的 3 周中,SQL 作业在随机日期中执行了大约 4 次失败。我很难弄清楚这些故障的可能原因以及如何解决它们。对于这些失败中的每一个,我都会从 SQL 日志文件中收到相同的错误消息。

错误信息如下图:

Source: Execute SQL Task Description: OLE DB provider "SQLNCLI11" for   linked server "(null)" 
returned message "Protocol error in TDS stream".  
End   Error  Error:  2018-05-26 05:23:23.68
Code: 0x00000000     Source: Execute SQL Task 
Description: OLE DB provider "SQLNCLI11" for linked server "(null)" 
returned message "Communication link failure".  
End Error  Error: 2018-05-26 05:23:23.68
Code: 0x00000000 Source: Execute SQL Task      
Description: Session Provider: Physical connection is not usable [xFFFFFFFF].   
End Error  Error: 2018-05-26 05:23:23.68 Code: 0x00000000       Source: Execute SQL Task       
Description: OLE DB provider "SQLNCLI11" for linked server "(null)" 
returned message "Communication link failure".  
End Error  Error: 2018-05-26 05:23:23.72 
Code: 0xC002F210     Source: Execute SQL Task Execute SQL Task 
Description: Executing the query "  SELECT ResStayNonRoomBundleID<c/>  ReservationStayI..." 
failed with the following error: 
"TCP Provider: An existing connection was forcibly closed by the remote host.". 
Possible failure reasons: Problems with the query<c/> "ResultSet" property not set correctly 
<c/> parameters not set correctly<c/> or connection not established correctly. 
End Error  DTExec: The package execution returned DTSER_FAILURE (1).
Started:  5:22:57 AM  Finished: 5:23:23 AM  Elapsed:  26.343 seconds.  
The package execution failed.  The step failed.,00:00:26,0,0,,,,0

如果有人可以提供有关此错误的潜在原因的一些帮助和指示,不胜感激。

由于工作在某些日子里成功,我已经排除了SQLSSIS Package 中使用的查询可能存在问题的选项

补充说明:SQL 作业由 12 个步骤组成,并且每次都不会在特定步骤发生故障。

【问题讨论】:

  • 错误信息提示链接服务器不可用。
  • 这是否意味着链接服务器在失败的那些日子里停机,因此无法与之通信?
  • 在互联网上搜索错误,“TDS 流中的协议错误”返回所有来自 NIC 卡设置不正确或某种网络错误的内容。我不确定为什么尊敬的 Gordon Linoff 会暗示这是一个链接服务器问题。

标签: sql sql-server ssis sql-server-2014 jobs


【解决方案1】:

我同意@gordon-linoff。我建议创建一个控制台应用程序,该应用程序对封装有一些 try catch 块的数据库进行计数。如果可以进行计数,请从控制台应用程序执行 SSIS 包。

这样做可以让您预先检查是否可以与数据库建立连接。如果没有,您可以捕获其他错误并重试。这是一篇关于从控制台应用程序执行 SSIS 包的帖子。

Call SSIS Package from c# Console Application For Each Loop

【讨论】:

  • 谢谢。我不是数据库管理员......所以我对这个控制台应用程序的了解有限。我是否调整该链接中提到的代码并在 SSMS 中运行它们?
  • 好问题。我使用 Visual Studio 作为开发控制台应用程序的 IDE。他们是visualstudio.com/downloads 的免费版本。它很容易上手,并且有大量可用的文档。一旦您构建了控制台应用程序。该 dll 可以从 Windows 任务计划程序执行,这将允许您自行决定控制 SSIS 包的执行时间。您可能会发现数据库上发生了死锁。换句话说,另一个进程可能正在调用该表并将其锁定以阻止其他进程。
猜你喜欢
  • 2018-03-16
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
相关资源
最近更新 更多