SAP LUW 和DB LUW

来源:互联网 发布:7z解压缩软件 编辑:程序博客网 时间:2024/06/05 20:40

讲述了SAP LUW和 DB LUW,不过说的不太明了。

一、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 才真正更新数据,否则将回滚。

三、SAP 事务

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

原创粉丝点击