SAP锁总结(锁对象、数据库锁、程序锁)

T-CODE—SE11

1、创建锁对象

  • 模式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模式的不可以。

勾选主键作为锁定固定行,不勾选直接锁整个表

在激活之后,会产生两个function module,一个用来对对象进行锁定,另一个是释放对象。二者的名字都很有规律。 

DEQUEUE_<lock object的名字>  【示例:DEQUEUE_EZQMT007A】

ENQUEUE_<lock object的名字>  【示例:ENQUEUE_EZQMT007A】

ABAP 解锁/锁定账号

BAPI_USER_LOCK 用户锁定
BAPI_USER_UNLOCK 用户解锁
记得加用户名参数,批量修改就套个LOOP
不要直接更新标准表

ABAP 防止程序重复执行

CALL FUNCTION 'ENQUEUE_ESRDIRE'
    EXPORTING
      name           = sy-repid
      _scope         = '1'
    EXCEPTIONS
      foreign_lock   = 1
      system_failure = 2
      OTHERS         = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
"说明已经有程序在运行了。
  ENDIF.

SAP 程序锁(非数据库锁),ABAP程序在同一时间只允许一人操作

ENQUEUE_ES_PROG 和 DEQUEUE_ES_PROG,这两个function 是SAP系统存在的,下面简绍一下参数:
CALL FUNCTION 'ENQUEUE_ES_PROG'
      EXPORTING
        MODE_TRDIR     = 'E'                                "锁条目模式:默认是E锁又叫独占锁,可选‘S’锁又叫共享锁,‘X’锁又叫专用锁
        NAME           = 'Z_PROGLOCK_MODEL'    "需要锁定的程序名
        X_NAME         = ' '                                        "默认为空,可选
        _SCOPE         = '2'                                     "表示锁定范围值,默认为‘2’,表示在update module内有效;其它参数有‘1’,表                                                                                 示程序内有效;‘3’表示全部
        _WAIT          = ' '                                         "表示如果对象已经被锁定,是否等待后再尝试加锁,最大的等待时间有系统参                                                                                       数 ENQUE/DELAY_MAX控制
        _COLLECT       = ' '                 "参数表示是否收集后进行统一提交,COLLECT 是一种缓存与批处理方法,即如果指                      定了Collect,加锁信息会放到Lock Container 中,Lock Container实际上是一个 funciton Group控制的内存区域,如果程序中加了很多锁,锁信息会先放到内存中,这样可以减少对SAP锁管理系统访问,若使Lock Container中的锁生效,需执行FLUSH_ENQUEUE 这个Funciton,将锁信息更新到锁管理系统中,此时加锁操作生效,使用函数RESET_ENQUEUE可以清除Lock Container中的锁信息
        EXCEPTIONS
        FOREIGN_LOCK   = 1
        SYSTEM_FAILURE = 2
        OTHERS         = 3.
解除锁DEQUEUE_ES_PROG 的参数与上面的加锁的参数类似。
CALL FUNCTION 'ENQUEUE_ES_PROG'
      EXPORTING
        MODE_TRDIR     = 'E'
        NAME           = 'Z_PROGLOCK_MODEL'
        X_NAME         = ' '
        _SCOPE         = '2'
        _WAIT          = ' '
        _COLLECT       = ' '
      EXCEPTIONS
        FOREIGN_LOCK   = 1
        SYSTEM_FAILURE = 2
        OTHERS         = 3.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值