Lock Obejct 확인 T-CODE
락이 잡혀있는지 없는지 확인하는 방법은
T-CODE : SM12
이다
Lock Obejct 사용하는 이유?
# 주로 데이터를 변경할 때, 일관성을 맞추기 위해서 사용한다.
# 사용자가 A 데이터를 변경할 때?
- 다른 사용자가 똑같은 데이터를 변경하려고 하면 데이터 일관성이 어긋나기 때문에 사용자가 A 데이터를 수정할 때에 다른 사용자가 변경을 못하게 하기 위해서 Lock Object을 사용하는 것이다.
Lock Object 만들기 전, 체크
# 어느 테이블에 잠금을 설정할 건지
# 어느 테이블에 연관된 다른 테이블들이 있는지 체크해야 한다. ( FK 확인 )
# 테이블 "전체"를 잠금 할 것인지 or 데이터 중에 "하나의 데이터"를 잠금 할 것인지 체크
# 실행하기 전, 데이터를 선택하기 전 Lock을 먼저 잡는 게 좋다.
Lock Object는 Message A or Commit or 트랜잭션 종료를 하게 되면 자동으로 락이 해지되기 때문에 참고해야 한다.
시나리오
# 회사코드에 따라서 해당 테이블 잠금 설정 해준다.
여기서 사용하는 테이블은
SCARR 복사, BUKRS(회사코드) 필드 추가한 ZSCARR_GJ Table이다.
#1. Lock Object 만들기
1. T-CODE : SE11로 들어가 보자.
2. Lock Object 생성해 보자.
# Lock Object는 무조건 "E"로 시작해야 한다. ( EZ or EY )
3. RFC 허용( 체크 / 미체크 )
# RFC 허용 : 다른 시스템에서 Function Module 호출할 수 있게 해주는 기능
4. 잠금 할 테이블을 설정해 보자.
5. 연관된 테이블도 같이 잠금을 하려면 "테이블 추가" 버튼을 클릭해서 연관된 테이블을 넣어주면 된다.
# 여기서는 ZSCARR_GJ Table만 잠금 설정 할 것이니 넘어가겠다.
6. Lock Mode( 잠금모드 )에 대해서
E( Exclusive ): 이미 잡은 락은 상태에서 동일한 트랜잭션 내에 락을 또 요청할 수 있다.
X( eXclusive ) : 이미 잡은 락을 한번 더 락을 못 잡게 한다.
S( Shared ) : 여려 명의 사용자가 동시에 데이터를 읽을 수 있지만, 한 사용자가 데이터를 변경하게 되면 S모드 -> E모드로 승격되는데 이때 다른 사람이 락을 잡고 있으면 승격이 안된다.
O( Optimistic ) : 여려 명의 사용자가 동시에 O모드 락을 걸 수 있고 동시에 데이터를 읽을 수 있다. O모드 -> E모드로 승격이 되고, 자신 말고 다른 사람들의 락이 다 풀린다.
7. 잠금 매개변수 설정
# 잠금 매개변수를 통해서 회사코드에 해당하는 데이터를 잠금 할 것인지, 회사코드와 항공사에 해당하는 데이터를 잠금 할 것 인지 설정하는 공간이다.
# 우리의 시나리오는 회사코드에 해당하는 데이터를 잠금 하는 것이기 때문에 CARRID 체크박스를 없애주자.
8. Lock Obejct Function Module 확인
# 다음과 같이 자동으로 생성되어 있는 걸 볼 수 있다.
#2. Lock Object 로직 설정
( AT_SELECTION_SCREEN )
#1. 실행(F8) 버튼을 클릭 후 락을 걸기 위해서 다음과 같이 준비해 보자.
# 'ONLI' : 실행(F8) 버튼을 눌렀을 때 타는 USER COMMAND다.
#2. Lock Object에 자동으로 생성했던 Function Module 불러오자. ( ENQUEUE_* )
#3. 이제 프로그램을 종료시키거나 저장하거나 등등.. 락을 해제시키는 로직을 설정해 보자.
# 프로그램이 종료되면 자동으로 락이 해제되긴 하지만, 프로그램이 종료가 안 되고 계속 데이터를 변경해야 하는 상황이면 다음과 같이 100 스크린 종료를 시키거나 저장을 한 후 Lock 해제를 시켜줘야 한다.
# 여기서는 두 개의 MODULE에 락 해제 시켜주는 로직을 설정할 것이다.
#4. 우선 (MODULE CANCEL_0100 AT EXIT-COMMAND)부터 설정해 보자. ( DEQUEUE_* )
# 다음과 같이 락을 잡아주었을 때와 똑같이 BURKS의 값을 넣어줘야 한다.
#5. 위에서 선언한 거랑 똑같이 선언해 주면 된다. ( MODULE EXIT_0100 INPUT )
이제 실행을 시켜보자.
실행
프로그램 실행
T-CODE : SM12
# 회사코드 : 2000에 값을 주었을 때 다음과 같이 Lock 잡혀있는 것을 볼 수 있다(빨간 상자)
만약 프로그램을 종료하게 되면 다음과 같이 락이 해제되는 걸 볼 수 있다.
끝.
'.ABAP > ..모든 것' 카테고리의 다른 글
SAP GUI 한글(폰트) 깨짐 (2) | 2023.11.02 |
---|---|
SAP Self Join 정리 (1) | 2023.10.31 |
SAP Web Dynpro( 웹딘 프로 ) Host 등록 방법 (1) | 2023.10.16 |
SAP 텍스트 색상 변경( INTENSIFIED ) (0) | 2023.10.11 |
SAP 72자 오류 해결( The ABAP program lines are wider than the internal table ) (2) | 2023.10.05 |