SAP 锁机制认识
SAP 锁机制认识
一、SAP为什么要设置锁:
1,保持数据的一致性
如果几个用户要访问同样的资源,需要找到一种同步访问的方法去保持数据的一致性。比如说,在航班预订系统中,需要检查还有没有空座位,当检查的时候,你不想别人修改重要的数据(空座位的数量)。
2,仅仅用Database锁是不够的
数据库管理系统物理锁定了要修改的行记录,其他用户要等到数据库锁释放才能访问这个记录。
在SAP系统中,当一个新屏幕显示的时候会释放掉Database锁,因为屏幕的改变会触发一个隐式的DB COMMIT 。如果数据是从好几个屏幕收集来的话,而且在这段时间内这些数据会分别被锁定,仅仅用Database锁就不够了。
SAP系统在应用服务器层面有一个全局的LOCK TABLE,可以用来设置逻辑锁来锁定相关的表条目,并有ENQUEUE工作进程来管理这些锁。SAP锁是一种逻辑意义上的锁,有可能你锁定的表条目在DATABASE上根本就不存在。
二、锁对象和其对应的Function Module
在SE11里创建锁对象,自定义的锁对象都必须以EZ或者EY开头来命名。一个锁对象里只包含一个PRIMARY TABLE,可以包含若干个SECONDARY TABLE,锁的模式有三种:E,S,X。LOCK PARAMETERS里填写你要根据哪些字段来锁定表条目。
模式E:当更改数据的时候设置为此模式。
模式S:本身不需要更改数据,但是希望显示的数据不被别人更改。
模式X:和E类似,但是不允许累加,完全独占。
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,其他用户不能再对这个锁对象加E、X、S模式的任意一种锁;
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,其他用户不能再对这个锁对象加E、X、S模式的任意一种锁;
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,其他用户不能再对这个锁对象加E、X模式的锁,但是可以加S模式的锁;
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,在这个程序,你还可以再对这个锁对象加E、 S模式的锁,X模式的不可以。
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,在这个程序,你不可以再对这个锁对象加E、X、S模式的锁。
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,在这个程序,你还可以再对这个锁对象加S模式的锁,如果没有别的用户对其加S模式的锁,那么你还可以对其加E模式的锁。X模式的不可以。
当激活锁对象的时候,系统会自动创建两个FM,ENQUEUE_<锁对象名>和DEQUEUE_<锁对象名>,分别用来锁定和解锁。
三、锁机制的实际案例解析
问题描述:
物料非限制库存明明还有1000 PC,发料过账时却提示短缺1000 PC 。
首先笔者想到的是检查MMBE和MD04
没有发现被销售订单或预留占用
检查SM12
发现前一天有一笔移动操作该物料1000 PC 并未成功,一直处于锁定状态清除该笔锁定,问题解决 。
SM12查询方法
- 在锁参数栏位输入物料号,前后打通配符星号 *
- 集团默认为当前Client
- 用户名置空(并不知道是谁在锁定)
SM12中的记录不能随便删除,应先确认该笔操作是否有人正在处理,正常情况下只是逻辑上的临时锁定,操作完成之后会自动释放,如果别人正在操作时被强制删除,可能造成错误或数据丢失。
SM12查到锁定信息之后,还可以做如下参考:
继续执行SM13查看该用户是否有正待更新的相关操作,及执行AL08查看该用户当前活动情况。
https://mp.weixin.qq.com/s/Cxzh_PeGUjHWYTpUyhSzHg
文章来自于网络,如果侵犯了您的权益,请联系站长删除!