안녕하세요
Lock Object에 대하여 문의드립니다.
몇년째 써오던 프로그램에서 이상한 부분을 발견해서 문의드립니다.
문제가 생긴 부분은 Lock Object에 의해 락이 걸려 프로그렘에 문제가 되어 확인하다가 발견하였습니다..
일단 저는 Lock object를 생성하고 사용할떄는 ENQUEUE... 와 DEQUEUE를 한 세트(?)로 사용한다고 알고 있었습니다.
1) ENQUEUE_EZ_TABLE... 락설정
~ 실행 로직 ~
2) DEQUEUE_EZ_TABLE... 락해제
근데 DEQUEUE가 없는 부분을 발견했습니다.. 로그를 보니 그동안에도 락이걸려서 오류처럼 종종 문제가 생기고 있었더라라구요
사용자들은 다시 처리하면 또 되고하니까.. 자주 문의가 안왔던것 같습니다.
현재 로직상 대략 아래와 같이 F_A 서브의 F_B 폼 안에서 Lock object가 걸리는 구조입니다.
[문의]
1. Lock Object에 설정/해제 한세트로 구성을 안하는 경우가 있나요?
2. 그런 경우가 있다면 이유가 있나요?
3. 위와 같이 되어있는 경우 별도로 DEQUEUE 부분이 없다면 언제 락이 해제되나요?
1) F_B를 벗어날때
2) F_A까지 실행하고 벗어날때
3) 해제 안됌 --> 사용중이긴하니.. 해제가 될거라곤 생각하는데 자동적으로 락이풀리는건지 모르겠습니다.
읽어주셔서 감사합니다. 도움 요청드립니다.
댓글 3
-
이우상
2021.03.04 04:41
-
아좀더
2021.03.05 23:20
빠른 답변 주셔서 감사합니다!
실수로 빠트린거였으면 좋겠네요ㅠ 여태까지 계속 오류 발생했던 부분이라 (매우매우 빈번하게 타는 함수라..) 오류가 났다 안났다 하니
네트워크 문제로 치부하고 있었거든요
이걸로 해소됐으면 좋겠네요 ㅎㅎㅎ
감사합니다 !
-
아좀더
2021.03.13 02:35
이우상님//
한가지만 더 문의드립니다!
어떤 테이블의 락 오브젝트인 경우 플랜트, 년도, 월 기준으로 아래와 같이 락을 걸면
CALL FUNCTION 'ENQUEUE_EZ_TABLE'
EXPORTING
mode_table = 'X'
mandt = sy-mandt
zyear = lv_year "년도
zmonth = lv_month "월
werks = i_werks "플랜트이 시점에 같은년도,월에 다른 플랜트가 저 테이블에 작업은 가능한건가요??
반대로 락해제의 경우도
같은년도,월의 1000플랜트가 락을 해제해도 2000플랜트는 락이 걸린상태가 유지되는 건지
궁금합니다!!
1. Lock Object에 설정/해제 한세트로 구성을 안하는 경우가 있나요?
-> 실수로 빠트렸겠지요.
2. 그런 경우가 있다면 이유가 있나요?
-> 실수에요
3. 위와 같이 되어있는 경우 별도로 DEQUEUE 부분이 없다면 언제 락이 해제되나요?
-> 트랜잭션이 종료되는 시점에 지동으로 릴리즈 되는 것으로 알고 있어요.
한번 테스트 해보셔요