SAP 官网提到:
If the name, argument, and lock mode of the elementary lock are identical, and if a lock is not exclusive and non-cumulative, it can be set more than once (a cumulation). The cumulation counter is incremented by one with each successive cumulation, and reduced by one each time a lock is released. The lock is released when the counter reaches zero.
如果传入加锁函数的输入参数的锁的名称、上锁参数和锁定模式相同,并且如果上锁模式既不是排他性的也不是累积性的
,那么它可以被多次设置。多次设置这种锁的行为称之为累积。每次连续累积时,锁的累积计数器会增加一次,并在释放锁定时递减一次。当计数器达到零时,锁会被释放。
在SAP系统中,事务码SM12用于管理和监视锁定信息。锁定是一种机制,用于控制并发访问数据库中的数据,以确保数据的一致性和完整性。当一个事务获取了对某个数据对象的锁定时,其他事务就不能修改或访问该数据对象,从而避免了数据冲突和不一致性。
其中上图的 Counter 1 和 Counter 2,分别代表 dialog owner
和 update owner
持有的 lock enter 对应的 cumulation counter 计数器,如 SAP 官网 记录所示:
选择 Goto-Details
能看到对应的 Lock Object 名称:
注意上图的 Date 字段,并不是上锁的准确时间,而是 SAP LUW (Logical Unit of Work) 的起始时间。SAP Lock 在该 LUW 里创建,时间晚于 LUW 的起始时间。
SAP LUW(Logical Unit of Work)是 SAP(Systems, Applications, and Products)系统中的一个概念,它是数据库事务的一部分,涵盖了一个业务过程中的所有步骤。它在开始时打开一个数据库事务,在完成后提交该事务。
SAP LUW 的主要特性包括:
-
一致性:所有的数据库更新都应该在一个 LUW 中保持一致。也就是说,如果所有操作都成功,则所有更改都应该被保存。如果有任何一个操作失败,则应该撤销所有更改。
-
原子性:LUW 应该被视为一个不可分割的单元。这意味着,要么所有的操作都成功,要么所有的操作都失败。
-
隔离性:每个 LUW 都应该被隔离开来,使得它不会被其他 LUW 中的操作所影响。
-
持久性:一旦一个 LUW 被成功提交,它的结果应该是永久的,即使在系统故障的情况下也是如此。