SQL Server 2017链接服务器事务报错:viperrm.cpp:1780
链接服务器事务更新严重错误排查方案
问题概述
针对链接服务器的事务更新操作触发致命错误,该问题仅出现在指定SQL Server实例,其他同配置实例无此异常。
执行代码
BEGIN TRANSACTION SET XACT_ABORT ON UPDATE LINKEDServer.mydb.DBO.MyTable SET ....
错误详情
Location: viperrm.cpp:1780 Expression: !m_irm && !m_idtm && !m_rmSink && !m_tmAddress && !m_iti && !m_ittf && !m_itrf SPID: 53 Process ID: 5760 Msg 21, Level 20, State 1, Line 4 警告:2022年9月17日上午9:40在对象X中发生严重错误3624。记录错误内容和发生时间,然后联系系统管理员。 Msg 596, Level 21, State 1, Line 0 无法继续执行,因为会话处于终止状态。 Msg 0, Level 20, State 0, Line 0 当前命令发生严重错误。如有结果,应予以丢弃。
环境信息
- SQL Server版本:Microsoft SQL Server 2017 (RTM-CU31) (KB5016884) - 14.0.3456.2 (X64)
- 发布时间:2022年9月2日 11:01:50
- 版本类型:64位Express Edition
- 操作系统:Windows Server 2019 Standard(版本10.0.17763)
- 链接服务器配置:事务提升选项已设为
true
排查与解决建议
- 核对驱动版本:对比正常实例的链接服务器驱动(ODBC/OLE DB)版本,替换当前实例的老旧或不兼容驱动
- 确认事务提升配置:执行
EXEC sp_serveroption 'LINKEDServer', 'remote proc transaction promotion', 'true'重新生效配置,同时检查MSDTC服务的运行状态、防火墙规则及权限设置 - 分析日志详情:提取SQL Server错误日志、Windows事件查看器中的应用程序日志,定位报错前后的资源占用、组件异常信息
- 简化场景测试:使用极简更新语句(如单字段赋值)执行测试,或临时关闭事务提升(设为
false)验证是否为机制兼容性问题 - 检查数据库完整性:运行
DBCC CHECKDB(master)、DBCC CHECKDB(msdb)验证系统数据库是否存在损坏
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

