2014-12-18 3 views
0

아래의 시나리오에서 문제가 있습니다.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의 기록 잠금 상황을 극복했는지 알려주세요. 제게 알려주세요.

감사합니다, 수리의

+0

'... NOMAX의 WAITRCD 시간으로 컴파일 됨'- 왜요? * NOMAX가 필요합니까? 그렇지 않다면 왜 그냥 바꾸지 않으시겠습니까? – user2338816

+0

실수로 인해 영원히 지속될 수 있다는 것을 깨달았습니다. WAITRCD()가 자물쇠와 관련이 없다고 말하면서 주석을 추가하겠습니다. 잠금 장치에 ** 반응 **하는 데 걸리는 시간을 제한하는 데 도움이됩니다. WAITRCD()가 만기되면 잠금은 변경되지 않고 계속됩니다. – user2338816

+0

WAITRCD가 수행하는 유일한 작업은 다른 작업이 레코드 잠금 뒤에 걸리지 않도록하는 것입니다. 레코드 잠금을 지우려면 작업을 취소해야합니다. – jmarkmurphy

답변

3

이 처리하는 올바른 방법은 프로그램 A가 확약 제어를 사용하는 것입니다. 그런 다음 롤백이 자동으로 수행되거나 취소 핸들러가 롤백을 트리거 할 수 있습니다.

이것이 옵션이 아니라고 가정합니다.

취소 처리기가 몇 초 동안 지연되는 작업 (취소 처리기/원래 작업 시간 종료)을 제출 한 다음 해당 레코드를 삭제하도록하십시오.

1

WAITRCD = * NOMAX로 파일을 컴파일하지 마십시오. 작업이 잠금을 기다려야 할 경우, OVRDBF를 사용하여 대기 시간을 조정하십시오. 인터랙티브 한 작업을 기다리는 일괄 처리 작업과 시간 초과로 누군가가 자신의 데스크톱에서 레코드를 열어두고 있기 때문에 기다리고 있다고 생각합니다. 대화식 프로그램은 업데이트 준비가 끝날 때까지 레코드를 잠그지 않아야합니다. 이렇게하면 처음에는이 문제를 예방할 수 있습니다.