加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 是否可以创建具有只读访问权限的死锁?

发布时间:2020-12-12 06:31:53 所属栏目:MsSql教程 来源:网络整理
导读:我有一个VB6应用程序通过ADO访问MSSQL2000服务器上的单个表.我正在使用只读访问权限(adOpenStatic,adLockReadOnly)网络中还有其他应用程序可以对表进行更改. 由于某种原因,我收到的错误是我的应用程序被选为死锁受害者. 我真的很困惑:当我从一张桌子上读书时
我有一个VB6应用程序通过ADO访问MSSQL2000服务器上的单个表.我正在使用只读访问权限(adOpenStatic,adLockReadOnly)网络中还有其他应用程序可以对表进行更改.

由于某种原因,我收到的错误是我的应用程序被选为死锁受害者.

我真的很困惑:当我从一张桌子上读书时,为什么会出现僵局?我期待超时,因为其他应用程序的编写,但不是死锁……

有人可以对此有所了解吗?

更新:2009-06-15我仍然对这个问题的解决方案感兴趣.所以我提供了更多信息:

>如果我选择adOpenForwardOnly或adOpenStatic,则没有任何区别
>如果光标位置是客户端或服务器,则没有区别.

解决方法

由于存在非聚集索引,单个SELECT语句可能会针对单个UPDATE或DELETE语句进行死锁,请考虑以下情况:

读者(您的应用程序)首先获取非聚集索引上的共享锁以执行查找,然后尝试在页面上获取共享锁,以便返回数据本身.

编写器(其他应用程序)首先在包含数据的数据库页面上获得一个exlusive锁,然后尝试获取索引的独占锁以更新索引.

您可以在Microsoft知识库文章Q169960(http://support.microsoft.com/kb/q169960/)中找到有关此(和其他)类型的死锁的更多信息

此外,您可能希望了解一下如何获取死锁跟踪信息(跟踪标志1222) – 这将在发生死锁时确切报告哪些SQL语句与哪些对象发生冲突.这是一篇相当不错的文章 – http://blogs.msdn.com/bartd/archive/2006/09/09/747119.aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读