首页 > 其他分享 >关于 SAP ABAP 里的锁类型 Lock Type

关于 SAP ABAP 里的锁类型 Lock Type

时间:2023-08-17 19:23:27浏览次数:35  
标签:请求 Lock Object 用户 ABAP SAP

在 SAP 帮助文档里有关于 ABAP lock 支持的全部类型和说明,总共支持四种类型的锁:S, E, X 和 O.

注意 E 锁和 X 锁的区别是,E 锁 可以在同一个事务里多次被请求,但 X 锁即使在同一个事务里,也只能被请求一次。

我在 SAP CRM 系统里看到 One Order 页面点击 Edit 按钮时,背后使用的 Lock Object 实际是 E_CRM_ORDER, 这个 object 的 Lock mode 设置的是 Read Lock 即 Share Lock,共享锁:

但是我在 WebClient UI 上点击了 Edit 按钮后,在 SM12 事务码里,看到的 mode 却是 E:排他锁。

在 SE11 里查看 Enqueue Function Module 名称:ENQUEUE_E_CRM_ORDER

设置断点,运行时单步调试,发现传入的参数是 V:Only conflict check exclusive lock, as with 'E'

mode 参数传入的 V:

在 ABAP 中,Lock 机制被设计为一个独立的服务,它使用一种叫做 Lock Object 的对象来对需要锁定的数据表和字段进行描述。一个 Lock Object 可以包含一个或者多个数据表,这些数据表之间通过外键关系连接在一起。然后,我们可以通过调用特定的函数模块来对这个 Lock Object 进行操作,比如 ENQUEUE_<lock object>(请求设置锁)和 DEQUEUE_<lock object>(请求释放锁)。

在 ABAP Lock 机制中,Conflict Check 是用来检测和处理锁冲突的过程。当一个用户(或者一个事务)试图对一个已经被其他用户锁定的数据进行锁定时,就会发生锁冲突。ABAP Lock 服务在收到锁请求后,会首先检查这个请求的 Lock Mode,然后根据已经存在的锁和请求的 Lock Mode 来决定是否允许这个锁请求。

以一个简单的例子来说明这个过程。假设我们有一个 Lock Object ZLOCKOBJ,它描述了一个数据表 ZTABLE。用户 A 首先通过调用 ENQUEUE_ZLOCKOBJ 来对 ZTABLE 中的某一行数据设置一个 Exclusive Lock,这个请求被成功执行,ZTABLE 中的这一行数据被锁定。然后用户 B 也想对 ZTABLE 中的这一行数据设置一个 Exclusive Lock,他也通过调用 ENQUEUE_ZLOCKOBJ 来发送锁请求。这时,ABAP Lock 服务在进行 Conflict Check 时,会发现 ZTABLE 中的这一行数据已经被用户 A 独占锁定,因此,用户 B 的锁请求会被拒绝,用户 B 会收到一个锁冲突的消息。

ABAP Lock 服务提供了多种 Lock Mode,比如 Exclusive Lock(独占锁),Shared Lock(共享锁)等,这些不同的 Lock Mode 会影响 Conflict Check 的结果。例如,如果用户 A 设置了一个 Shared Lock,那么用户 B 的 Shared Lock 请求就不会被拒绝,因为 Shared Lock 允许多个用户同时读取同一份数据,但是不允许修改。

ABAP Lock 机制的设计和实现使得我们可以在 SAP 系统中更有效地管理和控制并发操作,保证数据的一致性和完整性。同时,ABAP Lock 机制也提供了一套详细的错误处理和恢复机制,让我们可以更好地处理并发操作中可能出现的各种问题和错误。

标签:请求,Lock,Object,用户,ABAP,SAP
From: https://www.cnblogs.com/sap-jerry/p/17638627.html

相关文章

  • 关于 SAP ABAP Enqueue Function Module 的输入参数 _wait
    我们查看ABAP系统根据LockObject自动生成的EnqueueFunctionModule,可以发现它有一个名叫_wait的输入参数,默认值为space:该参数决定了发生锁冲突时的锁行为。开发人员有以下选择:初始值:如果由于存在竞争锁而导致锁定尝试失败,则会触发异常FOREIGN_LOCK。X:如果由......
  • 忘记LockSupport怎么用了?那我们举个有趣的小例子,永远记住它!
    概述LockSupport是一个非常方便实用的线程阻塞工具,它可以在线程内任意位置让线程阻塞。和Thread.suspend()相比,它弥补了由于resume()在前发生,导致线程无法继续执行的情况。和Object.wait()方法相比,它不需要先获得某个对象的锁,也不会抛出InterruptedException异常。park()可以阻塞......
  • VM cannot power on due to locked on ESXI hosts
    Checkiftherearesome.lckfilesexistsinVMfolderIfyes,sshtoESXihostandnavigatetothevmfolder,thenusefollowingcommandfindouttheVMlockedonwhichESXihostsforfilein$(ls-a);doecho${file};vmfsfilelockinfo-p${file}|grep-i......
  • mysql数据库DeadLock处理分析
    1.问题复现数据库新建一个test表,里面包含id,和name字段然后分别开两个窗口,分别开启事务,然后updatename字段,不提交,然后查看一下三个表,看是否出现锁表情况innodb_trx        ##当前运行的所有事务innodb_locks     ##当前出现的锁innodb_lock_waits......
  • SDL 线程创建(SDL_LockMutex / SDL_UnlockMutex、SDL_CondWait / SDL_CondSignal)
     SDL_mutex*s_lock=NULL;SDL_cond*s_cond=NULL;intthread_work(void*arg){ SDL_LockMutex(s_lock); printf("[thread_work]in.\n"); Sleep(5000); printf("[thread_work]好了,知道了,我刚刚去玩了5秒,我直接SDL_CondWait把锁给你我自己睡觉去了。你拿到锁......
  • ABAP-调用MB52取数
    1FIELD-SYMBOLS:<fs_datas1>TYPEANYTABLE.2DATA:los_dataTYPEREFTOdata.34cl_salv_bs_runtime_info=>set(display=''metadata=''data='X').56"SUMBIT程序名WITH条件7SUBMITrm07mlbsWITHm......
  • IPQ5018|Unlocking Affordable WiFi 6: The Ultimate Solution
    IPQ5018|UnlockingAffordableWiFi6:TheUltimateSolutionIntheeraoflightning-fastconnectivitydemands,findingtheperfectsynergybetweenperformance,efficiency,andcost-effectivenessisparamount.IntroducingtheDR5018-aWiFi6solutionthat......
  • 什么是 SAP ABAP Lock Mode 的 cumulative 特性
    SAP官网提到:Ifthename,argument,andlockmodeoftheelementarylockareidentical,andifalockisnotexclusiveandnon-cumulative,itcanbesetmorethanonce(acumulation).Thecumulationcounterisincrementedbyonewitheachsuccessivecumulat......
  • 什么是 SAP CDS view 的 join on demand 技术
    SAPCDSview里借助pathexpression技术,我们可以实现joinondemand的场景。如下图所示:Joinondemand是SAPCDS(CoreDataServices)视图的一个重要特性,它允许您在CDS视图中实现延迟连接,从而优化查询性能。通过在需要时执行连接操作,而不是在每次查询时都执行连接,可以减......
  • 关于 SAP ABAP 锁机制的一些疑问和解答
    Locktable的位置LockTable位于EnqueueServer的主内存(共享内存)中。如果enqueue服务器作为enqueue工作进程安装,则该实例的所有工作进程都可以访问锁表。外部应用服务器在enqueue服务器上的入队过程中执行其锁定操作。二者的通信,通过相关调度程序(dispatcher)和消息......