首页 > 其他分享 >关于 SAP Lock Owner 问题的讨论

关于 SAP Lock Owner 问题的讨论

时间:2023-08-14 17:26:17浏览次数:38  
标签:FUNCTION Lock WORK 更新 COMMIT Owner SCOPE SAP 所有者

在 SAP 事务开始时,始终会创建两个所有者(Owner)并可以请求锁定。

一把锁可以有一个或两个所有者,分别是对话所有者和更新所有者。 可以在 _SCOPE 参数中指定所有者的个数。默认为 2 即 2 个所有者:

要找出当前持有锁的用户,请使用 Function Module ENQUEUE_....

这会将当前持有锁的用户名放入 SY-MSGV1。

  • _SCOPE = 1: 只有 dialog owner 才拥有锁。因此锁的生命周期只存在于 dialog transaction 内。

DEQUEUE 调用或事务结束(而不是 COMMIT WORK 或 ROLLBACK WORK)会取消锁定。

  • _SCOPE = 2: 该锁仅属于更新所有者 (owner_2),因此如果调用 CALL FUNCTION 'XXX' IN UPDATE TASK 和 COMMIT WORK,则该锁将由更新任务继承。 当更新事务完成时,锁被释放。也可以在使用 ROLLBACK WORK 将锁定转移到更新之前释放锁定。

注意:除非已调用 CALL FUNCTION '...'IN UPDATE TASK,否则 COMMIT WORK 无效。

  • _SCOPE = 3: 该锁属于两个所有者(owner_1 和owner_2)。 换句话说,它结合了两者的行为。 当两个所有者中的最后一个释放该锁时,该锁才将被取消。

ABAP Enqueue Function Module 默认的行为是 _scope = 2.

通过一张图加深理解:

在此示例中,锁对象 A(开发人员之前在 ABAP 字典中创建的)在事务期间通过函数调用 CALL FUNCTION 'ENQUEUE_A' 被锁定。 通过将 _SCOPE 参数设置为 1,锁 A 不会传递到更新进程(它仅属于对话框所有者 E_1)。 该锁由函数调用 DEQUEUE_A 释放,或者最迟在对话事务结束时释放。

随后,请求属于 E_2(更新所有者)(_SCOPE=2)的锁 B 和拥有两个所有者(_SCOPE=3)的锁 C。 当调用 CALL FUNCTION '...' IN UPDATE TASK 时,会生成更新请求。 COMMIT WORK 调用更新过程,锁 B 和 C 的锁和更新所有者继承该过程。 更新结束时,这些锁将被释放。 、、

然而,来自对话所有者的锁C可能随后存在(取决于事务编程)。

如果设置了 _SCOPE=2 的锁,并且在 CALL FUNCTION '...' IN UPDATE TASK 之前调用 COMMIT WORK,则直到此时该锁仍保持为对话锁(在事务 SM12 的界面中显示为黑色)。 此时,还不可能将锁转移到更新工作进程。

仅当调用 CALL FUNCTION '...' IN UPDATE TASK 并执行 COMMIT WORK 时,锁才会稍后传递给更新进程。 然后,在锁管理的详细视图中将其标记为具有备份标志的锁。

标签:FUNCTION,Lock,WORK,更新,COMMIT,Owner,SCOPE,SAP,所有者
From: https://www.cnblogs.com/sap-jerry/p/17629206.html

相关文章

  • SAP ABAP Lock 的 Collision Check 机制介绍
    SAPABAP系统使用CollisionCheck机制来检查锁请求是否与现有锁冲突。如果发生冲突,对话事务的用户会收到一条消息,指示所请求的对象当前已被不同的用户锁定。注意:对于非对话工作进程(在批量输入中),稍后会再次发出锁定请求。SAP官方文档中对collisioncheck机制的描述:There......
  • 什么是 SAP Lock 机制中的 Lock Table
    SAPABAP系统里,当我们调用SAPLockObject生成的EnqueueFunctionModule对一条数据库表记录上锁时,就会在SAPLockTable中生成一条记录。SAPLock体系中的LockTable位于中央实例的主存(共享内存)中。中央实例中的所有WorkProcess都可以访问锁表。外部应用程序服务......
  • SAP Infinite Transaction with Update 的一个具体例子
    在计算机科学中,事务是一组操作的集合,这些操作要么全部成功执行,要么全部回滚,以确保数据的一致性和完整性。某些企业管理软件的业务事务,被实现为InfiniteTransaction,以节省事务开始时的初始化时间。这种设计离不开乐观锁,因为乐观锁在更改实际发生之前不会转换为排他锁(E锁,全......
  • SAP ABAP 系统 SM51 事务码的作用
    副标题:SAPABAP系统中事务码SM51的作用:深入探究系统进程与资源管理SM51是SAP系统中的一个重要事务码,用于监控和管理系统中运行的后台工作进程和应用服务器资源。在本文中,我将详细解释SM51的功能,探讨其作用,并通过案例说明其在实际场景中的应用。SM51事务码的功能SM51事务......
  • SAP Commerce Cloud 中的 SimpleResponsiveBannerComponent
    SAPCommerceCloud(以下简称SAPCC)是一款综合性的电子商务解决方案,旨在帮助企业建立和管理现代化的电子商务平台。SimpleResponsiveBannerComponent是SAPCC中的一个核心组件,专门用于管理和展示响应式横幅广告。它允许商户轻松地在其电子商务平台上添加、配置和管理各种横幅......
  • EBS: Error:Txn Failed WIP_WORK_ORDER_LOCKED (JOBNAME=XXXXX)
    Error:TxnFailedWIP_WORK_ORDER_LOCKED(JOBNAME=XXXXX)whileWIPCompletionfromOracleWMS. (DocID2624324.1)LastupdatedonMAY15,2023APPLIESTO:OracleWorkinProcess-Version12.2.7andlaterInformationinthisdocumentappliestoanyplatform.......
  • 关于 SAP UI5 框架代码中的 Metadata.createClass
    这段代码定义了一个名为Metadata.createClass的函数,用于在SAPUI5框架中创建类并添加元数据信息。我将逐行解释这段代码的含义和作用。/***@since1.3.1*@private*/Metadata.createClass=function(fnBaseClass,sClassName,oClassInfo,FNMetaImpl){这是一个......
  • SAP Fiori Elements 应用里标准模板 XML Fragment 加载的逻辑和 XMLPreprocessor 的作
    触发时间点是XMLPreprocessor的insertFragment方法:上图的调试器上下文里,我们看到了XMLPreprocessor.js的实现,它是SAPUI5框架中一个重要的文件,它主要负责处理XML视图的预处理工作。对于SAPUI5中的视图创建,可以使用JavaScript、JSON、XML等多种方式。其中,XML......
  • 问题解答:关于 SAP UI5 控制器(Controller) JavaScript 编码里单引号和双引号的用法澄
    笔者这篇教程文末,有朋友提问:SAPUI5应用开发教程之十-什么是SAPUI5应用的描述符文件manifest.json问题1:在index.html文件中body标签添加了代码:<divdata-sap-ui-componentdata-name="sap.ui5.walkthrough"data-id="container"data-settings='{"id":"wa......
  • SAP UI5 XML 视图里解析 Extension Point 的触发点
    解析到XML视图里的ExtensionPoint定义后,开始实例化过程:Extensionpoint的工作原理是在原有的应用中预定义一些扩展点,然后开发者可以在这些扩展点插入自定义的组件或代码,以实现新的功能。这种机制的优点是可以保持原有应用的稳定性,同时也方便进行扩展和维护。具体来说,SAPU......