ABOUT ME

통계와 개발에 대한 일기로 통개학을 운영합니다. 조그마한 도움이 되기를 바랍니다.

Today
Yesterday
Total
  • [ABAP] Lock Object
    SAP/ABAP 2025. 3. 25. 11:13

     

     

    Naming Convention

     

    E_[Lock Obeject] : E_로 시작해야 합니다.

     

     

     

    생성

     

    SE11에서 Lock Object 생성 및 관리를 할 수 있으며, 생성 후에는 자동으로 ENQUEUE와 DEQUEUE 함수가 생성됩니다.

     

    Lock을 걸을 Table 이름과 Mode를 설정
    Lock을 걸을 단위를 선택, 모든 Key를 다 선택하면 1행씩 Lock을 걸 수 있습니다.

     

     

     

    Mode

     

    • S Lock : Shared / Read Lock
      읽는 도중 자료가 변경되는 것을 막기 위한 Lock. 실제로 S 모드 락이 걸린 경우 수정이 불가능합니다.

    • O Lock : Optimistic
      O Mode로 여러 수정이 접근 가능 하지만 실제 수정될 수 있는 접근은 선착순 하나뿐입니다.

    • E Lock : Exclusive cumulative / Write Lock(Default Lock)
      한 개의 Program에서 같은 Data에 대해 중복적으로 누적 Lock이 가능, 다른 Program에서는 접근 불가능하게 합니다.

    • X Lock : eXclusive noncumulative
      동일한 프로그램에서도 같은 Data에 대해 중복 Lock이 불가능하게 합니다.

     

    접근 가능한 Lock : 적용된 Lock

     

     

     


     

     

     

    Code 안에서 Lock을 실행하고 해제하는 방법

     

    1. ENQUEUE_<LOCK NAME> : Lock 활성화 함수

     

    * ENQUEUE
      CALL FUNCTION 'ENQUEUE_ESTAD_LOCK'
        EXPORTING
    *     MODE_SPFLI     = 'E'
          mandt          = p_mandt
          werks          = p_werks
          matnr          = p_matnr
    *     X_CARRID       = ' '
    *     X_CONNID       = ' '
    *     _SCOPE         = '2'
    *     _WAIT          = ' '
    *     _COLLECT       = ' '
        EXCEPTIONS
          foreign_lock   = 1
          system_failure = 2
          OTHERS         = 3.
    
      CASE sy-subrc.
        WHEN 0.
          sy-subrc = 1.  "Lock 성공
        WHEN 1.
          sy-subrc = 2.  "다른 사람이 Lock을 잡음
        WHEN OTHERS.
          sy-subrc = 3.  "시스템 장애
      ENDCASE.

     

    • _WAIT : Lock 실패 시 기다렸다가 재시도(얼마나 기다릴지는 모름)
    • COLLECT : 함수를 호출할 때마다 Lock을 잡는 것이 아닌, 함수를 여러 번 사용한 경우 FLUSH_ENQUEUE를 사용할 때, Lock을 한번에 수행하려고 함.
    • X_<Parameter> : Initial 값을 무시하지 않고 조건에 넣음
    • _SCOPE
      • 1 : 1 0 → 유저가 Lock을 설정하고 UPD w/p에게 Unlock 권한을 념겨주지 않음.
      • 2 : 0 1 → 유저가 Lock을 설정하고 UPD w/p에게 Lock과 Unlock 권한을 넘겨, DB update가 완료된 후 자동으로 Unlock을 진행함.
      • 3 : 1 1 → 유저가 Lock을 하고 UPD w/p도 별도의 Lock과 Unlock을 진행. update 도중에 유저나 UPD w/p의 Lock이 해제되어도 안전하며, UPD 동작 이후에도 Lock을 해제하지 않고 다음 업무를 이어갈 수 있음.

     

     

    2. DEQUEUE_<LOCK NAME> : Unlock 함수

     

    * DEQUEUE
    
      CALL FUNCTION 'DEQUEUE_ESTAD_LOCK'
        EXPORTING
    *     MODE_SPFLI       = 'E'
          mandt          = p_mandt
          werks          = p_werks
          matnr          = p_matnr
    *     X_CARRID         = ' '
    *     X_CONNID         = ' '
    *     _SCOPE = '3'
    *     _SYNCHRON        = ' '
    *     _COLLECT         = ' '
        .
    • Lock 해제

     

     

     

    참고로 DEQUEUE를 하지 않으면, LUW(SAP에서의 작업 단위)가 끝나면 자동으로 LOCK이 해제 되며, Lock을 강제로 종료하고 싶은 경우에는 SM12에서 검색을 통해 실행중인 Lock을 찾고 해제할 수 있다. 이때, 다른 사람의 작업을 끊지않게 조심해야한다.

     

     

     

Designed by Tistory.