테이블을 업데이트하는 트랜잭션을 실행하였을 경우 잠금 엔트리가 생기고 트랜잭션이 끝나면
잠금 엔트리가 없어지는 걸로 알고 있읍니다. 하지만 배치잡을 통해서 트랜잭션을 수행했을 경우
간혹 잠금엔트리가 없어지지 않아 다음 트랜잭션을 수행할때 에러를 발생하는 경우가 있읍니다.
어떤 경우에 잠금 엔트리가 없어지지 않나요?
단순하게 시스템 부하나 메모리 부족이나 이런 간단한 대답보다 기술적인 자세한 답을 해 주셨으면 합니다.
* e-abap님에 의해서 게시물 이동되었습니다 (2007-03-23 19:55)
테이블을 업데이트 할 경우 테이블을 잠그고 푸는 과정을 하게 되죠..이 때 cbo 같은 경우는 lock object를 생성하여 처리해여 줍니다.
하지만 lock object가 해제될 경우는 여러 케이스가 있는데요. 온라인 프로그램에서 스크린이 바뀌는 경우등이 대표적이 예라고 보시면됩니다.
이경우는 lock object를 생성하여 테이블을 수정전 경우 ENQUEUE, 수정이 끝나고 락을 푸는게 DEQUEUE 인데요.
그 부분을 프로그램에 기술해보심이 어떨지 생각됩니다. lock object는 se11에서 잠김오브젝트를 하나 생성하시면 되구요.
CALL FUNCTION 'ENQUEUE_EZ_ZPM043T'
EXPORTING
MODE_ZPM043T = 'X'
MANDT = SY-MANDT
ZYEAR = ZPM043S-ZYEAR
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
이런식으로 기술하시면 됩니다. 핼프를 조금 뒤져보시면 될거 같습니다.