什么是 SAP ABAP 系统中的 Optimistic Locks

发布时间 2023-08-14 17:02:57作者: JerryWang_汪子熙

在业务应用程序中,虽然很多订单数据以更改模式(change mode)显示,但该数据被更改的可能性并不高。

如果不同用户同时访问数据,则锁定过程必须保证数据更改的一致性。

SAP 引入了锁概念(“enqueue”),用于 ABAP 程序中的锁定。当数据更改的可能性很高时,使用 pessimistic locking(悲观锁)有效。

但考虑到在任何给定的时间点,数据只能在多个并行对话框之一中显示为可更改状态。

在这种情况下,引入除了 pessimistic locking 之外的另一种锁机制就显得有必要了。

Optimistic Locks(乐观锁) 允许在所有并行对话框中将界面切换成可编辑状态。

然而,业务应用程序必须意识到,在用户自己的更改生效之前,最初显示的数据可能已经发生了更改。

锁定过程必须能够检测到这种情况,以便业务应用程序有可能采取冲突解决策略。

除了锁模式 S、E 和 X 之外,还存在乐观锁的锁模式 O。

如果用户以更改模式显示数据,则设置 Optimistic Locks(模式 O)。

同一对象上的乐观锁不会发生冲突。

如果用户想要保存(更改的)数据,则必须将乐观锁转换为排它锁(模式E)。

该转换是使用锁定模式 R 实现的。如果有人之前在对象上设置了非乐观锁,或者另一个 O 锁已被提升,则转换会失败。

如果升级成功,则删除该对象上的其他乐观锁,并且该锁表现为 E 锁。

乐观锁与其他锁的区别在于,竞争的乐观锁首先是相互兼容的,并不相互排斥。 如果发生锁冲突,则稍后才会验证。 对于锁所有者来说,锁冲突表现为锁的外部更改(当前锁用户可注意到),从而使乐观锁失效。