SAP_锁知识点

文章目录


####一、概览
  SAP LUW要求数据库对象的锁定在SAP LUW结束释放,并且该数据库锁要求对所有SAP程序可见。 SAP提供了一个逻辑数据锁定机制,该机制基于系统特定的锁定服务应用服务器中的中心锁定表(即将加锁的信息记入数据库表)。一个ABAP程序在访问数据之前,将希望锁定的数据表关键字发送给该表,因此所有的程序在访问一个数据库表之前必须首先判断该表是否已经被锁定了。
  SAP锁定与数据库物理锁定是不同的,它是一种业务逻辑上的锁定。它不会在物理表上进行加锁,而是将关键字传递给加锁函数,加锁函数会在特定表中加锁信息登记。
  SAP LUW在结束时(提交或回滚),SAP锁定将会隐式解除。
####二、SE11创建自定义锁
  自定义锁对象必须用EZ或者EY开头,生成的锁对象里只包含一个PRIMARY TABLE,可以包含若干个SECONDARY TABLE,同时会自动生成两个函数来进行锁管理,分别为ENQUEUE_“LOCK OBJECT”、DENQUEUE_“LOCK OBJECT”,其中"LOCK OBJECT"是锁对象的名称。
####三、锁模式
这里写图片描述
这里写图片描述
三种锁模式:1、S共享;2、E专用累积;3、X专用不累积
区别如下表:

允许第二次加锁模式允许第二次加锁模式允许第二次加锁模式
第一次枷锁模式SEX
S是(是)否(是)否(否)
E否(是)否(是)否(否)
X否(否)否(否)否(否)

括号内为同一程序(即同一事务内)内,括号外为非同一程序内
S共享:本身不需要更改数据,但是希望显示的数据不被别人更改。
E专用累积:当更改数据的时候设置为此模式。
X专用不累积:和E类似,但是不允许累加,完全独占。
1、如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,其他用户不能再对这个锁对象加E、X模式的锁,但是可以加S模式的锁;
2、如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,其他用户不能再对这个锁对象加E、X、S模式的任意一种锁;
3、如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,其他用户不能再对这个锁对象加E、X、S模式的任意一种锁;
4、如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,在这个程序,你还可以再对这个锁对象加S模式的锁,如果没有别的用户对其加S模式的锁,那么你还可以对其加E模式的锁,X模式的不可以;
5、如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,在这个程序,你还可以再对这个锁对象加E、S模式的锁,X模式的不可以;
6、如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,在这个程序,你不可以再对这个锁对象加E、X、S模式的锁。

####四、SM12查看锁
####五、通用加锁和解锁函数
1、ENQUEUE_E_TABLE/DEQUEUE_E_TABLE,表加锁解锁;
2、ENQUEUE_ESFUNCTION/DEQUEUE_ESFUNCTION,函数加锁解锁;
3、ENQUEUE_ES_PROG/DEQUEUE_ES_PROG,程序加锁解锁,用于控制同一个程序不能并发执行;
4、DEQUEUE_ALL,释放同一个程序中创建的所有锁。
####六、读锁
函数ENQUE_READ2
ENQUE_READ2

CALL FUNCTION ‘ENQUE_READ2’
EXPORTING
gclient = sy-mandt
gname = ’ ’
guname = ‘*’
TABLES
enq = lt_enq_read.

*We will search entry for table level lock for our table
LOOP AT lt_enq_read INTO lw_enq_read
WHERE gname EQ ‘RSTABLE’
AND ( garg CS ‘EKKO’ OR garg CS ‘ZCG110’ OR garg CS ‘ZCG109’ ).
MOVE-CORRESPONDING lw_enq_read TO lw_enq_del.
APPEND lw_enq_del TO lt_enq_del.
ENDLOOP.
####七、删除锁
函数ENQUE_DELETE
*Delete table level lock entry for our table
CALL FUNCTION ‘ENQUE_DELETE’
EXPORTING
check_upd_requests = 1
IMPORTING
subrc = lv_subrc
TABLES
enq = lt_enq_del.

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值