【发布时间】:2009-11-25 02:47:57
【问题描述】:
谁能给出一个使用有意共享锁的数据库事务的简单示例?如果是这样,则使用有意的排他锁。
【问题讨论】:
-
没有。只是我不明白如何实现这个概念。我清楚地了解共享锁和排他锁,但看不到“有意”锁的必要性。举个例子会有帮助。
标签: sql oracle transactions
谁能给出一个使用有意共享锁的数据库事务的简单示例?如果是这样,则使用有意的排他锁。
【问题讨论】:
标签: sql oracle transactions
需要意向锁是因为锁管理器不了解被锁定实体的物理结构。如果一个事务 S 锁定了一条记录,比如 R1,而另一个事务请求页面上的 X 锁定,比如 P1,如果 R1 实际上位于 P1 上会发生什么?锁管理器不应该在 R1 被释放之前接受 P1 请求,但要这样做,它必须了解 R1 包含在 P1 中。
由于锁管理器显然无法知道被锁对象的结构细节,所以引入了意图锁。第一个事务将在 P1 上放置一个 IS 锁,然后在 R1 上放置一个 S 锁。当第二个事务在 P1 上请求 X-lock 时,它会与第一个事务放置的 IS-lock 冲突。
【讨论】: