sap锁机制简单理解

来源:互联网 发布:c语言计算马德隆常数 编辑:程序博客网 时间:2024/06/10 19:37

       由于工作的需要,最近在研究业务系统数据并发控制问题,曾经写过abap程序,记得sap里有个锁对象,可以对表记录进行锁定操作,于是进行了相关了解,并在此基础上设计了基于MC的锁机制(有时间再献上基于MC的锁机制,供大家批判)。如果觉得下文所述,似曾相识,说明大家对sap所对象的理解已经超越我。

       sap为了同步同时多个用户操作同一数据,防止数据出现不一致性而采用了锁机制。一般 sap会在操作数据前设置锁,防止第二个用户进行修改操作,当操作结束后系统会自动释放锁(当然程序也可以调用解锁函数去解锁)。

       1SAP锁的类型

       1Exclusive lock

       The locked data can be read or processed by one user only. A request for another exclusive lock or for a shared lock is rejected.

       2Shared lock

       Several users can read the same data at the same time, but as soon as a user edits the data, a second user can no longer access this data. Requests for further shared locks are accepted, even if they are issued by different users, but exclusive locks are rejected.

       3Exclusive but not cumulative lock

       Exclusive locks can be requested by the same transaction more than once and handled successively, but an exclusive but not cumulative lock can only be requested once by a given transaction. All other lock requests are rejected.

 

       2TCODE、相关表、多表锁

       1TCODE:可以通过se11来查看和创建锁对象,锁对象创建完毕之后,统会自动创建两个FMENQUEUE_<锁对象名>DEQUEUE_<锁对象名>,分别用来锁定和解锁。

       2)相关表:

      DD25L:组合标题(方式,MC目标,锁定目标)(纪录了锁主表)

      DD25T:

      DD26S:视图的基本表和外来码关系(纪录了所有和锁相关的表)

      DD27S:合计(视图,MC对象,锁定对象)字段;

      3)多表锁

      SE11里创建锁对象,自定义的锁对象都必须以EZ或者EY开头来命名。一个锁对象里只包含一个PRIMARY TABLE,可以包含若干个SECONDARY TABLE。如多表锁:EMEKKOE,主表:EKKO-->E 专用累积,从表:EKPO-->E 专用累积。

 

       3、锁的生命周期

       通常程序一运行就要对特殊记录进行ENQUEUE处理,程序运行完毕之后进行DEQUEUE处理(不显示处理的话,关闭该session的时候,sap会自动DEQUEUE,此处sapN!)。

 

       4、锁的作用范围

       sap锁仅对特定程序起作用,假设A程序改table1的第1条记录,B程序也改table1的第1条记录,A程序一运行就对table1的第1条记录加锁,B程序则未加锁,则B程序仍可以改table1的第1条记录内容。