쌓고 쌓다

Lock Object 사용할때 _COLLECT 파라미터 주의사항 본문

SAP/ABAP

Lock Object 사용할때 _COLLECT 파라미터 주의사항

승민아 2026. 4. 29. 23:07
반응형

인트로

Lock Object를 사용해보려고

혼자 영화관 좌석 예약 프로그램을 만들어보다..

 

다음과 같은 이상현상을 발견했다.

 

첫번째 박스에는

THEATER_ID : 영화관 지점 코드

SEAT_ROW : 좌석 행 번호

SEAAT_COL : 좌석 열 번호

 

이렇게 입력 받은 좌석을 LOCK을 거는 코드이다.

 

이때 모든 좌석을 한번에 락을 걸고자 _COLLECT 파라미터를 사용했다.

 

_COLLECT에 모인 락 요청들은

'FLUSH_ENQUEUE' 펑션을 통해 한번에 락을 요청할 수 있다.

 

이때, 락 거는데 문제가 있다면 SY-SUBRC = 1을 반환한다.

 

그래서

두번째 박스에서는 락 에러 발생시

락 실패를 알리고 RETURN 하는 코드를 작성했다.

 

_COLLECT 사용시

위와 같이 작성하면 문제가 발생한다..

 

아.. 우선

_COLLECT는 

메모리에 락 요청들을 모았다가

이 요청들을 묶어서 한번에 요청하겠다는 파라미터이다.

 

락을 순차적으로 걸다가 문제가 발생시

기존에 걸었던 락들도 하나하나 풀기 번거로울거 같아서

한번에 묶어서 처리하고자 _COLLECT를 사용했다.

 

문제 상황

락을 한번에 걸다 문제가 발생했을때

RETURN을 해버리면

 

기존에 문제가 되는 락 데이터가 메모리에 그대로 남아있다.

 

그래서

 

정상적으로 락을 걸 수 있는 데이터를 가지고

락을 요청하더라도

 

기존의 락을 걸 수 없는 데이터가 메모리에 남아있기에

성공적인 락 결과를 받을 수 없다.

 

 

 

위처럼

락 실패시

'RESET_ENQUEUE' 펑션을 사용해서

 메모리에 남겨둔 락 요청 모음들을 비워주자.

 

요청한 락들을 푸는

‘DEQUEUE_ALL’ 이라는 펑션도 있는데

이건 폭탄과도 같다고한다.(재미나이 피셜)

 

모든 락을 풀어버린다고하는데 어떤 기준으로 풀어버리는지 모르겠다.

그래서 상세하게 찝어서 DEQUEUE 날려주기.

반응형