SAP LUW 和DB LUW

 转自:http://cyzhang811.spaces.live.com/blog/cns!38F91C71C3B250A!455.entry

SAP LUW 和DB LUW

 

曾经引用过一篇文章:http://cyzhang811.spaces.live.com/blog/cns!38F91C71C3B250A!191.entry
讲述了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并行。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值