-
7. Lock ObjectSAP/개념정리 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