SHARE 模式下的 LOCK table 不会阻塞客户端

LOCK table in SHARE mode does not block client

基于 https://www-01.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.sqlref/src/tpc/db2z_sql_locktable.dita 上的文档 SHARE MODE 锁阻止其他进程在 table.

上执行除只读操作以外的任何操作

我们尝试了以下方法: 进程 1(P1):在共享模式下锁定 table T1。 P2:在共享模式下锁定 table T1。

我们预计 P2 将被阻止以等待释放锁,因为 P1 已先获取锁。相反,该语句对 P2 成功。

这与文档中的说法不冲突吗?

我们有两个相同的程序 P1 和 P2,并且希望确保一次只有其中一个有机会在 table 中插入记录。我们希望每个进程:

1.Lock table 处于共享模式

2.Insert 条记录

3.Commit

还有其他方法可以实现吗?

此致,

亚什

两个 SHARE 锁是兼容的,即只要两个 programs/transactions 都只尝试读取它们就可以继续。一旦 P1 在 table T1 上获得了 EXCLUSIVE 锁,其他事务将无法进行。此外,如果 P1 在 T1 上有 SHARE 锁,那么 P2 在请求 EXCLUSIVE 锁时需要等待。

一般来说,我会尽量避免使用 LOCK TABLE。您是否有其他选项来同步两个程序的工作?