DB2锁机制详细解释

总感觉DB2的锁机制比较复杂,不能很好透彻的理解锁机制。 能否以实际的SQL语句的形式模拟出各种锁出现的场景? 谢谢。
模拟的锁如:表锁, IN/IS/IX/SIX/S/X/U/Z,行锁,S/U/X/NS/NW。
参与24

14同行回答

leo_wynleo_wyn商业智能工程师Security
你可以看看我blog中的文章, 希望对你有帮助: http://www.db2china.net/home/space.php?uid=1167&do=blog&id=3956显示全部
你可以看看我blog中的文章, 希望对你有帮助:
http://www.db2china.net/home/space.php?uid=1167&do=blog&id=3956收起
系统集成 · 2015-04-13
浏览1068
shadowflareshadowflare软件开发工程师交通银行
回复 14# 苏州易博创云 严格来说有问题,只不过中文文章中几乎没有提及而已。你可以看http://www.itpub.net/thread-1914632-1-1.html这贴,是讨论oracle隔离级别实现中的问题,特别是18L的那个pdf。这是里面的一张图片,oracle的隔离级别是倒数第二个Snapshot,ANSI SQL的SERIALIZ...显示全部
回复 14# 苏州易博创云

严格来说有问题,只不过中文文章中几乎没有提及而已。
你可以看http://www.itpub.net/thread-1914632-1-1.html这贴,是讨论oracle隔离级别实现中的问题,特别是18L的那个pdf。

QQ截图20150417204404.jpg


这是里面的一张图片,oracle的隔离级别是倒数第二个Snapshot,ANSI SQL的SERIALIZABLE是最后一项。可以看到Snapshot会出现Write Skew这种反常,而ANSI SQL的SERIALIZABLE不会。收起
银行 · 2015-04-17
浏览1438
苏州易博创云苏州易博创云CTO苏州易博创云网络科技有限公司
回复 12# shadowflare    oracle完全按照事务一致性的模式去设计的,所以undo对于这一点是非常关键的,正因为undo所以oracle才有正真意义上的row lock。显示全部
回复 12# shadowflare


   oracle完全按照事务一致性的模式去设计的,所以undo对于这一点是非常关键的,正因为undo所以oracle才有正真意义上的row lock。收起
IT咨询服务 · 2015-04-17
浏览1426
欧阳峰欧阳峰其它Freelancer
oracle默认的cs隔离级别是不能看到别人未提交的事物的,要是能看到别人还未提交的数据那么就不叫读一致了,恰恰相反那就叫读不一致了显示全部
oracle默认的cs隔离级别是不能看到别人未提交的事物的,要是能看到别人还未提交的数据那么就不叫读一致了,恰恰相反那就叫读不一致了收起
IT其它 · 2015-04-16
浏览1407
shadowflareshadowflare软件开发工程师交通银行
回复 9# 欧阳峰 不是说读不到未提交数据就满足了一致性的,你看一下我回复中的链接。显示全部
回复 9# 欧阳峰
不是说读不到未提交数据就满足了一致性的,你看一下我回复中的链接。收起
银行 · 2015-04-16
浏览1402
shadowflareshadowflare软件开发工程师交通银行
回复 9# 欧阳峰 读before image这个想法不错,只是不要用到写操作里面。显示全部
回复 9# 欧阳峰

读before image这个想法不错,只是不要用到写操作里面。收起
银行 · 2015-04-16
浏览1699
  • 请教一下: 写操作时读before image,oracle 11G里面这样做了吗 ? 什么样的场景下oracle会采用这个机制 ?
    2016-03-23
欧阳峰欧阳峰其它Freelancer
这一点上oracle做的比较灵活显示全部
这一点上oracle做的比较灵活收起
IT其它 · 2015-04-16
浏览1616
欧阳峰欧阳峰其它Freelancer
oracle是通过undo保证读一致性的,当有人去更改每一行的时候,通过undo把更改之前的前印像数据提供给另外一个人查询,如果undo表空间不够了会返回ora-01555快照太老的错误告诉他前印象被覆盖了...显示全部
oracle是通过undo保证读一致性的,当有人去更改每一行的时候,通过undo把更改之前的前印像数据提供给另外一个人查询,如果undo表空间不够了会返回ora-01555快照太老的错误告诉他前印象被覆盖了收起
IT其它 · 2015-04-16
浏览1698
shadowflareshadowflare软件开发工程师交通银行
回复 7# 欧阳峰 还是不太一样,DB2的cur_commit特性主要在默认隔离级别CS下发挥作用,实现读写互不阻塞的功能。在更高一级的RS下作用很小,到了最高的RR级别就无效了。而ORACLE从undo空间读before image的设计在任何隔离级别下都可用。而且DB2的cur_commit是只适用于读操作的,...显示全部
回复 7# 欧阳峰

还是不太一样,DB2的cur_commit特性主要在默认隔离级别CS下发挥作用,实现读写互不阻塞的功能。在更高一级的RS下作用很小,到了最高的RR级别就无效了。而ORACLE从undo空间读before image的设计在任何隔离级别下都可用。
而且DB2的cur_commit是只适用于读操作的,写操作定位目标行时没用。所以DB2中会出现两个事务更新同一张表中不同记录(filter字段上无索引)时互相阻塞的现象。ORACLE因为对写操作也会读取before image,故无此现象。
至于DB2为什么不设计成ORACLE那种方式,应该不是技术上的问题,主要是严格遵守ANSI-SQL的需要,并发性再提升就该出现一致性问题了。(严格来说ORACLE的隔离级别都没有满足ANSI-SQL标准的要求,想了解ORACLE的实现方式到底有何问题,可以参考我发的这篇帖子: http://www.itpub.net/thread-1914632-1-1.html )收起
银行 · 2015-04-15
浏览1980
  • 能否举例说明一下: DB2中会出现两个事务更新同一张表中不同记录(filter字段上无索引)时互相阻塞的发生的场景 ? 感谢
    2016-03-23
  • 写一个最简单的带where条件update语句就能看到这种现象。
    2016-04-16
  • 举例: 两个最简单的带where条件的update语句更新同一张表的不同的行,同时执行 , 这种阻塞是否一定发生呢 ? 这两个都在运行中的事务对对方有影响 ?
    2016-04-20
  • 先执行结束的不提交,后执行的一定被阻塞(前提无索引)。
    2016-04-25
  • Thank you
    2017-03-10
欧阳峰欧阳峰其它Freelancer
9.7之后的这个相当于oracle里面的undo 表空间的意思了显示全部
9.7之后的这个相当于oracle里面的undo 表空间的意思了收起
IT其它 · 2015-04-15
浏览1612

提问者

dbalisimmy
项目经理大话西游

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2015-04-13
  • 关注会员:1 人
  • 问题浏览:11216
  • 最近回答:2015-04-17
  • X社区推广