sql-server - 收到此错误:链接服务器“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。
有没有办法可以调试并解决这个问题?
解决方案
推荐阅读
- python-3.x - 尝试使用用户输入将列表另存为文件,但不断收到一条显示“无”的额外行
- python - 我该如何解决“ascii 编解码器无法解码位置 8 中的字节 0x9a:序数不在范围内(128)”?(python 3 中 cPickle 的问题)
- c - 按值或指针传递和返回结构 - 是否有默认准则?
- outlook - 如何使用预填充的收件人和主题字段创建指向 Outlook 的链接?
- javascript - iPhone Mobile Safari 在从横向旋转到纵向后强制出现顶部栏(避免“最小 ui”)
- java - 如何对弹跳球施加阻尼和摩擦?
- java - 如何找到数组中三个的最后一个倍数?
- javascript - 如何使用 ListView 在 asp.net 中进行自动完成?
- php - 从 GitHub 存储库中删除设置文件,而不从每个远程克隆中删除它
- python-2.7 - 通过套接字发送加密数据和解密不起作用