MS Access 无限期地持有表行锁

2023-11-23

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

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

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

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

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


这个问题我没有解决,但是有同事解决了。我们所做的是,不是创建到 SQL Server 表的链接表,而是创建到视图的链接表。视图看起来像这样:

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

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

确保你明白当你使用时会发生什么NOLOCK, 然而。

不幸的是,MS Access 不属于我的技能范围,所以我不知道需要做什么来解决这个问题。

摆脱访问:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MS Access 无限期地持有表行锁 的相关文章

  • 什么是“具有指定instance_id的DacInstance不存在。(Microsoft SQL Server,36004)”?

    我正在尝试使用 dacpac 升级远程 SQL Server 2012 数据库 但收到以下消息 指定instance id 的DacInstance 不存在 微软 SQL Server 36004 我试图在互联网上搜索但找不到任何东西 有任
  • Ms Access:无法读取记录; [表] 没有读取权限

    我编写了用于下载 mdb 文件并通过 OLEDB 提供程序读取它们的脚本 一切正常 但如果我尝试从表中读取 它会抛出异常 Ms Access 无法读取记录 tblMytable 没有读取权限 var cmd new OleDbCommand
  • 更新语句错误:子查询返回超过 1 个值

    我正在尝试更新列中的所有记录 以便它们以 CD 开头 例如DCE206 将成为 CDE206 UPDATE table SET column REPLACE column1 DC CD WHERE column1 LIKE DC 我正在使用
  • 如何将 ROW_NUMBER() 分配给列?

    看完之后这个问题 https stackoverflow com questions 1293390 sql to output line number in results of a query 我还有一个类似的问题 有没有一种简单的方法
  • UCanAccess:向现有表添加列

    我有一个正在运行的 Java 项目 它使用 Access accdb 数据库来存储数据 我正在对我的程序进行更新 以便为用户提供更多功能 为此 我需要向填充数据的现有表添加一列 当我研究时 我发现 UCanAccess 不支持 ALTER
  • SQL Server:十进制精度/小数位数产生奇怪的结果

    我正在为一个项目编写一些 SQL 我注意到 SQL Server 中一些看似奇怪的行为 涉及除以小数时的答案 以下是一些示例 说明了我所看到的行为 DECLARE Ratio Decimal 38 16 SET Ratio CAST 210
  • 有没有办法将加密的脚本插入 SQL Server 数据库?

    我的公司认为我们编写的数据库脚本是我们知识产权的一部分 在新版本中 我们为用户提供了由两部分组成的设置 桌面应用程序 一个可执行文件 它包含了初始化 更新数据库的复杂性 RedGate SQL Packager 我知道一旦脚本存在我就可以加
  • GRANT EXECUTE 所需的权限

    我正在为需要能够创建和删除过程但也向其他用户授予执行权限的用户创建一个组 GRANT CREATE PROCEDURE TO xxx xxx GRANT ALTER ON SCHEMA dbo TO xxx xxx 但是 我需要向组授予什么
  • SQL Case 语句会失败吗?

    有没有办法让 SQL 中的 CASE 语句像 C 中的 case 语句一样失败 我不想做的是下面的例子 但如果这是我唯一的选择 我想我会选择它 EXAMPLE NewValue CASE WHEN MyValue 1 THEN CAST M
  • 是否可以更改 Access 2007 中 SQL 编辑窗口中的字体?

    如果编辑面板上有一个可以更改字体大小的鼠标右键菜单就好了 但是没有 是否有其他地方的系统设置可以让我增加默认字体大小 Office Button gt 访问选项 gt 对象设计器 gt 查询设计 gt 查询设计字体
  • 我应该在删除数据之前禁用聚集索引吗?

    我知道这已经像任何事情一样被讨论过 但找不到我可以接受的可靠答案 假设我有一个有100亿条记录的表 需要删除where子句中带有标识列的记录 我应该选择哪个选项 选项1 禁用索引 这将节省删除后重新排列索引的开销 但会花费更长的时间来搜索需
  • 将记录与另一个表上的最新记录连接

    我正在尝试创建一个 SQL 视图 我如何从一个表中选择最新的记录 而其他记录保持原样 我需要从所有表中选择所有记录 这工作正常 但我需要仅按日期选择最新的提案 这是我遇到的问题 这是我到目前为止所拥有的 SELECT TOP 100 PER
  • 查找SQL记录中的并发用户数

    我有以下结构的表 UserID StartedOn EndedOn 1 2009 7 12T14 01 2009 7 12T15 01 2 2009 7 12T14 30 2009 7 12T14 45 3 2009 7 12T14 47
  • 开发和生产 SQL Server 之间使用不同的排序规则会出现哪些问题?

    盘问 无法更新 sys columns 还有其他方法吗 https stackoverflow com questions 4018347 unable to update sys columns any other approach含糊地
  • ROUTINE_NAME 和 SPECIFIC_NAME 之间有什么区别?

    在 INFORMATION SCHEMA ROUTINES 视图中 存在 ROUTINE NAME 和 SPECIFIC NAME 按照MSDN http msdn microsoft com en us library ms188757
  • SQL Server 数据归档解决方案

    我正在寻找一种解决方案来存档数据库中存在的数据 我的数据库是 SQL Server 2008 大约有 250 个表 我搜索网络并找到以下链接 http www dbazine com sql sql articles charran13 h
  • 访问查询——一个字段是否包含另一字段的值

    我正在尝试使用查询将表范围缩小到仅字段 全名 包含字段 名字 中的值的行 例如 如果某行的 全名 中包含 Blake Johnson 名字 中包含 John 则该行将被包含在内 但如果 全名 有 Garry Sways 并且 名字 有 Sw
  • 为什么实体框架 6 在插入后不只选择scope_identity()?

    当您使用 EF 6 1 保存实体时 将生成并执行以下 SQL 代码 exec sp executesql N INSERT dbo Customers Name FirstName VALUES 0 1 SELECT CustomerId
  • 如何在 SQL 中编写 where 子句来按一天中的时间过滤 DATETIME 列?

    我有带有 DATETIME 列时间戳的数据 我想将其过滤到 DATETIME 介于上午 9 30 到下午 5 30 之间的任意一天的记录集 最好的方法是什么 更新 更改是因为我需要精确到分钟 而不仅仅是小时 对于那个很抱歉 您始终可以将其编
  • SQL Server:比较两个表中的列

    我最近完成了从某些应用程序的旧版本到当前版本的迁移 在迁移数据库时遇到了一些问题 我需要一个可以帮助我比较两个表中的列的查询 我的意思不是行中的数据 我需要比较列本身来弄清楚我错过了表结构的哪些变化 看一下红门 SQL 比较 http ww

随机推荐