通过示例解释锁升级 (LOCK PROMOTION) 的概念

db2databasebig data analytics更新于 2026/2/7 22:22:17

DB2 锁升级 (LOCK PROMOTION) 是指在特定资源上获取更严格锁的过程。DB2 对尝试访问同一 DB2 资源的并发进程使用锁升级 (LOCK PROMOTION)。基本上,锁有三种类型。

共享锁 (S)

并发进程可以对资源(DB2 表、行、页等)放置共享锁,但不能更新数据。为了更新数据,并发进程必须将其锁提升为 UPDATE 锁。

更新锁 (U)

并发进程可以读取数据,但不能更新数据。更新锁表示进程已准备好更新资源,但为了进行实际更新,任何一个进程都可以将其锁提升为排他锁。

排他锁 (X)

一次只有一个进程可以对资源持有排他锁。锁拥有者可以读取和更新资源。其他并发进程无法获取该资源的任何锁,也无法访问该资源。

我们将通过以下示例来理解这一点。

如果有两个 COBOL-DB2 程序——PROG A 和 PROG B,它们正在读取 DB2 表 ORDERS 中的同一行。这两个程序都将在该 DB2 表行所在的页面上获取共享锁。现在,PROG A 想要更新此行,那么它将获取该页面上的更新锁,这被称为锁提升 (LOCK PROMOTION),因为锁从共享锁 (SHARED LOCK) 提升为更新锁 (UPDATE LOCK)。

此外,如果 PROG A 想要更新 ORDERS 表,它将等待 PROG B 释放 ORDERS 表上的共享锁。一旦 PROG B 释放其共享锁,PROG A 就会将其更新锁提升为排他锁,以更新该表。在 PROG A 持有 ORDERS DB2 表中的排他锁之前,任何其他进程或程序都无法获取此表上的任何锁(共享锁、更新锁或排他锁)。


相关文章