300x250
728x90

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이다.

ZSCARR_GJ

 

 

 

#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 잡혀있는 것을 볼 수 있다(빨간 상자

 

만약 프로그램종료하게 되면 다음과 같이 락이 해제되는 걸 볼 수 있다.

 

 

끝.

 

도움이 되셨으면 하단에 있는 광고 한번씩 눌러주세유!!

728x90