SAP ABAP 乐观锁升级成排他锁的一些可能场景讨论

简介: SAP ABAP 乐观锁升级成排他锁的一些可能场景讨论

Check to verify that the optimistic lock can be set, that is, there is no external exclusive lock.

当同一条记录有其他的 exclusive lock 时,无法再上 O 锁。

The lock does not protect against external changes to data, but it does help to identify them.


O 锁不能保证当前访问的数据被其他进程或者用户修改,但能够有助于检测出这种 external change 的情况。


O 锁的升级情况:


  1. 检查读取数据和乐观锁的一致性。


  1. 检查并验证乐观锁到排他锁的转换,不会与现有锁发生冲突。


  1. 将当前外部持有的所有乐观锁设置为无效(即所谓的 invalidation 操作),将此更改传播到乐观锁的外部所有者。


  1. 当前的乐观锁转换为排它锁。


  1. 修改当前数据,此后这修改对所有人可见。


  1. 锁被释放。


其中上述步骤1~4必须是原子操作。

8e2b723dbdb8423a4ed877f822377cc1.png


可能出现的锁冲突场景


1、如果资源已经被用户 A 加上了 E 锁,则其他用户对同一资源试图加 O 锁的请求会失败。


结果是,其他用户无法切换到 Change 模式。


2、用户 A 已经成功加上了 O 锁,即切换到了 change mode,但是当用户 A 试图保存修改的数据时,另一个用户持有的 O 锁已经提前升级成了 E 锁。


In conflicts, an optimistic lock (lock mode O) behaves like a shared lock (type S hared), which means it conflicts with type E or type X locks.


当冲突发生时,O 锁的行为和共享锁一致。


如果存在属于其他所有者的 E 锁,则无法设置乐观锁。 至于这个 E 锁是其他用户直接分配的,还是通过传统的O 锁升级而成的,并不重要。


现有的乐观锁还可以防止其他所有者直接上 E 或 X 锁。


下图显示了无法设置乐观锁的情况,因为对象上已经设置了排他锁。

00c7c26940e9c57d5c0645d0f195e42b.png

属于不同所有者的乐观锁彼此兼容。 第一个尝试将乐观锁转换为排他锁的所有者可以成功完成此操作(前提是未设置其他普通共享锁)。 其他乐观锁变得无效(从锁表中删除)。 果您尝试更改它们,则无法设置排他锁。


下图是一个例子:

事务 1 将乐观锁转换为 E 锁。 这使得事务2(锁定同一个对象)的O锁无效。 这意味着事务2无法转换O锁,冲突必须由程序员解决。

004d6d046c83a9ffa015196662faa7bd.png

相关文章
|
1月前
|
存储 安全 数据库
什么是 SAP ABAP 数据库表的 Display Maintenance Allowed with Restrictions
什么是 SAP ABAP 数据库表的 Display Maintenance Allowed with Restrictions
|
1月前
|
安全 API 数据库
SAP ABAP OData 中 Function import 的概念介绍
SAP ABAP OData 中 Function import 的概念介绍
|
1月前
|
SQL 负载均衡 监控
SAP ABAP DBSQL_SQL_ERROR 错误
SAP ABAP DBSQL_SQL_ERROR 错误
|
1月前
|
前端开发 数据库 开发者
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
|
1月前
|
SQL 监控 Oracle
SAP ABAP 系统错误 Return value of the database layer SQL dbsl rc 99
SAP ABAP 系统错误 Return value of the database layer SQL dbsl rc 99
|
1月前
|
存储 前端开发 Linux
在 SAP ABAP 系统里访问 FTP 服务器
在 SAP ABAP 系统里访问 FTP 服务器
|
1月前
|
存储 前端开发 应用服务中间件
使用 SAP ABAP 执行 FTP 操作
使用 SAP ABAP 执行 FTP 操作
|
1月前
|
BI 网络安全
如何使用 ABAPGit 在 SAP ABAP 系统安装 abap2xlsx 工具试读版
如何使用 ABAPGit 在 SAP ABAP 系统安装 abap2xlsx 工具试读版
|
1月前
|
监控 安全 应用服务中间件
SAP ABAP STRUST 事务码里的错误消息 - Local PSE does not match database original
SAP ABAP STRUST 事务码里的错误消息 - Local PSE does not match database original