ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 7. Lock Object
    SAP/개념정리 2025. 6. 27. 13:14

     

     

     

    Lock Object

    - SAP 시스템에서 여러 사용자가 동시에 같은 데이터를 수정하지 못하게 막아주는 기능

    - ABAP Dictionary에서 정의

    - 데이터 무결성, 동시성 문제 예방 목적

    - ENQUEUE_, DEQUEUE_ 함수로 제어

     

     

    * Lock 메커니즘은 다음 두가지 주요 기능을 제공

    •  프로그램이 데이터를 읽고 변경한 후 에 다른 프로그램에 완료하였다고 전한다.
    • 프로그램이 다른 프로그램에 의해 변경 중인 상태의 데이터를 읽는 것을 방지한다.

     

    Lock Object를 생성하면 자동으로 아래 두 함수가 생성된다.

    • ENQUEUE_<LockObjectName>잠금 걸기
    • DEQUEUE_<LockObjectName>잠금 해제

    - 생성된 함수는 수정할 수 없으며, 소속된 Function Group도 변경할 수 없다.

       Lock Object가 변경되어 활성화될 때마다 함수도 재활성화되므로 직접 소스를 변경할 필요가 없다.


    ENQUEUE 함수의 파라미터

    Initial Value 

    - X_<field>로 시작하는 파라미터

    - 예를 들어, X_EMP_NO = 'X'가 설정되면 EMP_NO의 초깃값과 정확히 같은 값이 들어와야 Lock Object가 설정된다.

       EMP_NO의 초깃값은 테이블의 필드에서 initial Value 옵션을 체크하면 된다.

     

     

    Passing Lock

    파라미터 설명 기본값
    _SCOPE 잠금 유지 범위 지정 '1' (트랜잭션 종료 시 해제)
    _WAIT 잠금 대기 여부 지정 ' ' (잠금 중이면 오류 반환)
    _COLLECT 잠금 요청 일괄 처리 여부 ' ' (즉시 처리)

     

    1. _SCOPE – 잠금 유지 범위

    - 잠금이 언제 해제될지를 지정

      의미
    '1' 트랜잭션 끝(Commit 또는 Rollback) 시 잠금 자동 해제
    '2' 명시적인 DEQUEUE 함수 호출 전까지 잠금 유지
    '3' UPDATE 함수 모듈 전용 (Special processing scope)

    * 대부분은 '1'을 사용하며, 예외적으로 여러 트랜잭션에 걸쳐 작업할 경우 '2'를 사용

     

    2. _WAIT – 잠금 대기 설정

    - 잠금 대상이 이미 다른 세션에 의해 잠겨 있는 경우, 잠금이 해제될 때까지 기다릴지 여부를 결정

      의미
    'X' 잠금 가능할 때까지 대기함
    ' ' 잠겨 있으면 즉시 에러 반환 (표준 동작)

     

    3. _COLLECT – 잠금 일괄 처리 여부

    - 여러 잠금 요청을 하나의 요청으로 묶어서 처리할지 여부를 결정

    의미
    'X' 같은 키에 대한 잠금 요청을 병합 처리 (중복 방지)
    ' ' 각각의 잠금 요청을 개별 처리

     


    Lock 절차

    1. 프로그램에서 ENQUEUE 함수 호출 

        - ABAP 프로그램이 특정 키 값에 대해 잠금을 요청

    2. Lock 서버가 중앙 Lock Table 확인

        - SAP의 Enqueue Server가 중앙 Lock Table을 확인함

    3. Lock Table에 기록

        - 요청한 데이터(테이블명 + 키 필드값 등)에 대해 다른 사용자가 잠금 중이 아니라면 Lock Table에 해당 조건을 등록함

    4. 충돌 여부 판단

        - 이미 해당 키값에 대한 Lock이 존재하면 → foreign_lock 예외 반환

    5. Lock 성공 → 작업 실행

        - 잠금이 성공하면 해당 사용자가 데이터에 대해 안전하게 작업 가능

    6. DEQUEUE 함수나 COMMIT WORK로 잠금 해제

        - 작업 완료 후 Lock을 해제하여 Lock Table에서 해당 레코드 제거

     

    * Lock Table

    • SAP 시스템 내에 존재하는 중앙 메모리 구조
    • 현재 시스템에서 잠금이 걸려 있는 데이터의 정보를 저장
    • SAP는 다중 사용자 환경이므로, 이 테이블을 기준으로 동시 수정 방지를 관리함
    • 클러스터 시스템에서는 하나의 Enqueue Server가 Lock Table을 중앙에서 관리함

    * Lock Table을 모니터링할 수 있는 T-CODE:SM12

     

    Lock Mode

    - SAP의 ENQUEUE 함수나 Lock Object에서 설정되며, 잠금의 강도와 허용되는 동시 작업의 범위를 결정한다.

     

    Lock Mode 종류

    Lock Mode 이름 설명
    E Exclusive Lock (배타 잠금) - 가장 일반적인 잠금- 같은 키에 대해 다른 누구도 읽기/쓰기를 못함
    S Shared Lock (공유 잠금) - 여러 사용자가 동시에 읽기만 가능- 누군가 쓰기(lock E or X) 하려고 하면 거부됨
    X Exclusive Not Cumulative Lock - E와 유사하지만, 같은 사용자라도 중복으로 잠글 수 없음- 한 번만 잠금 요청 가능
    O Optimistic Lock - SAP에서 거의 사용되지 않음 (특수한 용도)

     

     

    ENQUEUE_READ 함수

    - 데이터가 잠겨 있는 상태인지 체크할 수 있는 함수

    - Locked 되어 있는 테이블의 데이터 리스트를 반환한다.

     

    ENQUEUE_READ 함수의 파라미터

    GCLINET 클라이언트명
    GNAME 오브젝트 이름
    * 테이블 이름, 프로그램 이름
    GARG 각 테이블의 키값을 반환
    GUNAME sy-uname을 반환
    LOCAL 사용하지 않음
    NUMBER Lock 수
    SUBRC 시스템 변수 sy-subrc 반환
    ENG Locked된 오브젝트의 상세한 정보 반환

     

     

     

     

     

    'SAP > 개념정리' 카테고리의 다른 글

    10. Module Pool Program  (0) 2025.07.17
    8. Search Help  (0) 2025.06.30
    5. ABAP 인터널 테이블  (0) 2025.06.22
    4. ABAP 서브루틴, 함수  (0) 2025.06.19
    3. ABAP 조건문, 반복문  (0) 2025.06.19
Designed by Tistory.