아래의 시나리오에서 문제가 있습니다.iSeries - 동일한 작업/세션으로 레코드 잠금
프로그램 A의 MYFILE 파일에 레코드 잠금이 있습니다. 나중 세션이 MYFILE의 레코드 잠금으로 갑자기 연결 해제되고 핸들러 취소 루틴을 실행합니다. 취소 처리 프로그램 루틴 (프로그램 B)에서는 MYFILE 파일이 NOMAX의 WAITRCD 시간으로 컴파일되므로 MYFILE에 잠긴 레코드를 삭제하려고 시도하고 세션이 중지됩니다. 이제 아무도 다른 세션의 업데이트 작업에 대한 계정에 액세스 할 수 없습니다.
프로그램 흐름은 아래와 같이 주어진다 :
.... .... 프로그램 A (기록 잠금) .... 프로그램 X (처리기 취소) -> OVRDBF WAITRCD (3)를 첨가 .... 프로그램 B (세션 고정) -> 위의 OVRDBF를 추가 한 후 세션이 고정되지 않았습니다. 프로그램 C (세션 고정이 발생 함) -> 여전히 대체가 있고 기본 활성 그룹이 확약 제어 및 트리거 없음
시나리오는 다음과 같습니다. 같은 작업에 의한 레코드 잠금/s 쇠사슬.
나는이 문제를 해결하기 위해 솔루션 아래 시도 :
에서이 처리 프로그램 (프로그램 B)를 취소, 나는 3 ~ 5 초 WAITRCD와 OVRDBF했다. 나중에 위의 단계를 실행하고 처리기 프로그램을 취소 할 때 잠긴 된 레코드를 삭제하려면 지쳐서 3-5 초 후 다음 단계 처리를 계속하고 잠긴 된 레코드에 대한 오류 메시지를 썼습니다. 화면이 멈추지 않았습니다. 나중에 다른 프로그램 C를 실행하여 MYFILE에서 잠긴 레코드를 삭제하려고했습니다. 그러나 이제 세션이 다시 중단됩니다.
호출 스택을 점검했으며 모든 프로그램이 기본 활성 그룹 아래에 있으며 확약 제어 및 트리거가 없습니다. 어떤 생각, 왜 프로그램 C가 아니라 프로그램 B의 기록 잠금 상황을 극복했는지 알려주세요. 제게 알려주세요.
감사합니다, 수리의
'... NOMAX의 WAITRCD 시간으로 컴파일 됨'- 왜요? * NOMAX가 필요합니까? 그렇지 않다면 왜 그냥 바꾸지 않으시겠습니까? – user2338816
실수로 인해 영원히 지속될 수 있다는 것을 깨달았습니다. WAITRCD()가 자물쇠와 관련이 없다고 말하면서 주석을 추가하겠습니다. 잠금 장치에 ** 반응 **하는 데 걸리는 시간을 제한하는 데 도움이됩니다. WAITRCD()가 만기되면 잠금은 변경되지 않고 계속됩니다. – user2338816
WAITRCD가 수행하는 유일한 작업은 다른 작업이 레코드 잠금 뒤에 걸리지 않도록하는 것입니다. 레코드 잠금을 지우려면 작업을 취소해야합니다. – jmarkmurphy