SAP LUW 和DB LUW

本文详细介绍了LUW的概念及其在SAP系统中的应用,包括DBLUW和SAPLUW的区别,以及如何通过SAPLUW确保跨多个对话屏幕的业务操作一致性。此外,还探讨了SAP事务的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LUW是Logical Unit of Work,也就是逻辑工作单元。将系统中连续的变化放做一个逻辑单元里,可以全部执行,也可以全部不执行。

一、DB LUW

DB LUW是确保数据库一致性的机制,是数据库级别的,和底层DBMS有关,和SAP系统无关。如下图,从一致性状态A到B,中间有一系列的数据库操作,一个BD luw以数据库提交commit结束,这些操作要么全都执行,要么全都不执行。当全部执行成功,则数据库进入一致性状态B,如果在此DB luw中发生错误,则将从DB luw开始的所有操作进行回滚,数据库还是在A状态。 
image  
这是在数据库级别实现的,和SAP系统无关。

在SAP系统中,DB luw commit and rollback 可以被显式或隐式的触发。显式触发如在程序中调用FM DB_Commit,使用abap commit work语句等;隐式触发database commit有:1、一个dialog结束,进入下一屏幕,2、调用FM,进入另一个工作进程,3、从另一个工作进程返回;隐式触发database rollback有:1、runtime error,2、error message。

不然是commit还是rollback,结束了一个DB luw,也即是开始了一个新的DB luw。

 

二、SAP LUW

我们知道sap系统中一个业务操作会有多个对话屏幕,只到save操作成功,才算完成了一个业务。那么仅使用DB luw是不能保证SAP 系统数据一致性的。如下图,如果只是最后屏幕300保存时的DB luw发生错误,那么在数据库级一致性机制作用下只能回滚这一个db luw使数据库处于g状态,而前几个db luw在屏幕结束时已经提交,进行的数据库更新会全部生效,从业务层面上讲,这是不合理的,因为这个业务并没有保存成功,我们需要回滚到A或a状态。SAP luw就是sap在DB luw基础上保证数据库一致性的一种机制。 
image

 

一个SAP luw 可以跨多个对话屏幕,对多个DB luw进行捆绑,这样只到SAP luw中最后一个db luw结束,SAP系统才做整体修改。这种捆绑技术使SAP luw中的DB luw并不是真正的数据库更新,所以在SAP luw结束时,要么全都提交,要么对其中的所有数据库操作进行回滚。 
在abap开发中可以使用FM for update 或 perform ..on commit来启用SAP luw,只到遇到commit和rollback,SAP luw 结束。 
如使用call function …in update task,并不是立即执行,而是将其置于一个更新工作进程中,开启新的SAP luw,遇到commit work 才真正更新数据,否则将回滚。


假设MAIN PROGRAM(调用程序)为MAIN,其所在的为SAP LUW 1。

使用CALL FUNCTION 'AAA'的时候,MAIN被打断,在同一个internal session执行FM 'AAA',当FM执行完毕之后,继续执行MAIN。因此整个过程是在同一个SAP LUW内进行的。

使用SUBMIT AAA AND RETURN或者CALL TRANSACTION TCODE的时候,MAIN被打断,新开一个internal session(SAP LUW 2),AAA或者TCODE在新的internal session中执行,执行完之后,新开的internal session终止,MAIN继续执行,因此整个过程有两个SAP LUW。

当使用CALL TRANSACTION <tcode>的时候,有点特别的东西要注意.如果MAIN程序和调用的TCODE程序中都含有POC或者CFIUT,因为它们分属不同的 SAP LUW,因此在两个程序中都必须有各自的COMMIT WORK.该情况也适用于SUBMIT <program> AND RETURN。

使用SUBMIT AAA的时候,MAIN终止,SAP LUW 1结束,但是还是在同一个internal session,AAA被加载,新的SAP LUW 2产生。

使用LEAVE TO TRANSACTION TCODE的时候,效果跟使用SUBMIT AAA看起来差不多,但是是有本质区别的。当前external session所在的所有的internal session先被删除,再产生一个新的internal session,TCODE加载到新的internal session中执行。所以虽然都是两个SAP LUW,但是过程不太一样。


三、SAP 事务

SAP 事务是指SAP应用程序, 可以使用事务码来开始一个sap 事务,它可以包含一个或多个sap luw,可以使用call transaction或submit 插入一个sap luw,也可以通过CALL FUNCTION... STARTING NEW TASK 使sap luw并行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值