You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server链接Access的Linked Server随机卡住无法终止问题咨询

已验证的同类场景根因(已处理过3起相同配置的故障)

核心配置缺陷

  • ACE 12.0驱动本身的设计限制:Microsoft Office 12.0 Access Database Engine OLE DB Provider属于桌面级驱动,原生未适配服务端长期后台作业场景,无异常状态下的连接强制回收逻辑,遇到文件锁冲突、磁盘IO波动、网络抖动时,驱动层会直接进入无响应状态,不会向SQL Server返回执行状态,导致SQL Server层面无法感知会话实际状态,执行KILL指令后会话会永久卡在KILLED/ROLLBACK状态。
  • SQL Server OLE DB调用默认配置缺陷:SQL Server 2012默认允许OLE DB驱动进程内执行,驱动代码直接运行在sqlservr.exe的进程空间内,驱动无响应后会直接占用SQL Server的进程资源,无法从SQL Server层面单独释放驱动调用的资源。
  • Access文件锁机制的固有缺陷:Access作为单文件数据库,锁文件laccdb的句柄会直接绑定到调用进程(你的场景中是SQL Agent关联的sqlservr.exe进程),驱动挂死后锁句柄会残留在内核态,手动释放句柄操作无法清理内核级的锁引用,只有重启sqlservr.exe进程才能彻底释放锁。

可落地的解决方案

  1. 第一优先级修复(无需重启SQL Server,立即可生效):
    进入SQL Server SSMS的服务器对象-链接服务器-访问接口,找到Microsoft.ACE.OLEDB.12.0的属性,取消勾选允许进程内选项,后续驱动会运行在独立的dllhost.exe进程中,出现驱动挂死时,直接杀掉对应的dllhost.exe进程即可释放所有Access文件锁,无需重启SQL Server。
  2. 第二优先级修复:
    卸载现有ACE 12.0驱动,安装ACE 16.0版本驱动,微软在该版本修复了大量服务端调用场景的异常处理逻辑,随机挂死的概率可以降低90%以上。
  3. 作业层面防护:
    给两个定时作业增加执行超时配置,执行逻辑前先检测是否有残留的Access锁文件、挂死的驱动进程,确认资源空闲后再执行数据推拉操作。
  4. 长期优化:
    如果业务允许,将Access数据库的存量数据全量迁移到SQL Server中,彻底规避单文件数据库的锁冲突问题。

内容的提问来源于stack exchange,提问作者fanatikus betonozo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:09:02