首页 > 解决方案 > 收到此错误:链接服务器“NS64”的 OLE DB 提供程序“MSDASQL”报告错误

问题描述

我继承了一个要维护的生产系统,并且一直面临着一个问题。

设置

有一个 SQL Server 通过 NetSuite ODBC 驱动程序作为链接对象连接到 NetSuite。OPENQUERY使用许多存储过程(大约 57 个)中存在的命令从 NetSuite 获取数据。存储过程作为重复作业每 30 分钟并行运行(最多 15 个线程)。该作业由一个 C# 代码组成,该代码运行一个EXEC命令以在一个Parallel.ForEach块中运行存储过程。存储过程的工作是从 NetSuite 中获取数据(仅选择语句),然后在过程本身内部进行本地处理。

问题

有时我在 C# 日志中收到以下错误。

The OLE DB provider "MSDASQL" for linked server "NS64" reported an error. The provider reported an unexpected catastrophic failure.
Cannot fetch a row from OLE DB provider "MSDASQL" for linked server "NS64"

出现此错误后,我无法再连接到 NetSuite。所有后续作业继续等待,没有输出。库sp_whoisactive安装在 SQL 服务器上,它告诉我有一些“卡住”的会话。使用kill命令终止会话不起作用。此处唯一的解决方案是重新启动 SQL Server 服务。重启后,存储过程运行愉快,直到问题再次出现。这种情况有时每周发生 1-2 次,有时甚至数周都不会发生。需要注意的一点是,在sp_whoisactive 查询结果的tempdb_allocations和列下,违规会话 ID 的数字很大。tempdb_current大多数时候价值是几百,最近高达13k。

有没有办法可以调试并解决这个问题?

标签: sql-servernetsuitelinked-server

解决方案


推荐阅读