gpt4 book ai didi

sql-server - MS Access 无限期地持有表行锁

转载 作者:行者123 更新时间:2023-12-03 03:26:33 27 4
gpt4 key购买 nike

我们使用 MS Access 作为其中一个系统的 GUI,但遇到了一个问题:Access 持有基础表或行的锁,这会阻止 SQL Server 对此数据运行任何更新查询。这是有问题的,因为虽然我们的 Access 前端只需要对此数据的只读 Access ,但我们拥有定期刷新数据的系统。由于 Access 已持有数据锁定,这些刷新操作失败(或无限期延迟)。

通过打开 Access 前端并使用 sys.dm_tran_locks DMV 显示数据锁定来说明此问题。我重现该问题所采取的步骤是:

  1. 打开 Access 前端。这显示了一个包含数千条记录的可滚动表单
  2. 使用 SQL Server DMV 显示数据锁定。这显示了 5 个“对象”类型锁,请求模式为“IS”(意向共享)。使用 sys.dm_exec_requests 显示命令状态为“挂起”,等待类型为“ASYNC_NETWORK_IO”。只要用户打开 Access 前端,这些锁就会一直保持,并防止对所涉及的表进行任何更新/删除/截断操作。现在,如果用户滚动到 Access 中记录集的末尾,锁定就会被释放!

当用户单击以在前端显示单个记录时,会出现第二个问题。当屏幕上显示单个记录时,SQL Server DMV 显示这些锁:3x 对象、1x key 、1x 页面。 key 是共享锁,其他的是意图共享。同样,命令状态已暂停,等待类型为 ASYNC_NETWORK_IO。只要用户正在查看记录,这些锁就会被持有

我们需要阻止 Access 无限期地持有这些锁。不幸的是,MS Access 不属于我的技能范围,所以我不知道需要做什么来解决这个问题。

最佳答案

我没有解决这个问题,但是一位同事解决了。我们所做的是,不是创建到 SQL Server 表的链接表,而是创建到 View 的链接表。 View 如下所示:

CREATE VIEW dbo.acc_tblMyTable
AS
SELECT * FROM tblMyTable WITH (NOLOCK)

无锁定,并且作为奖励,Access 将数据视为只读。

确保您了解what can happen when you use NOLOCK然而。

Unfortunately MS Access is not part of my skill set so I don't know what needs to be done to fix this.

摆脱 Access :)

关于sql-server - MS Access 无限期地持有表行锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12026199/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com