GSAM 및 IMS 메시지 큐 액세스

GSAM 및 IMS™ 메시지 큐는 EGL을 통한 직렬 파일 액세스의 두 가지 예입니다.

직렬 파일은 EGL이 작동하는 가장 오래되고 가장 다용도로 사용되는 파일 유형 중 하나입니다. 직렬 파일에서 순서대로 한 번에 하나의 레코드에 액세스합니다. EGL에는 직렬 파일을 구현하는 세 가지 방법이 있습니다.
VSAM
Virtual Storage Access Method입니다. 자세한 정보는 VSAM 파일 액세스의 내용을 참조하십시오.
GSAM
Generalized Sequential Access Method의 약자입니다. IMS 또는 z/OS 일괄처리 환경은 일괄처리에 이 액세스 방법을 사용합니다.
IMS 메시지 큐
WebSphere® MQ(이전의 MQSeries®) 메시지 큐와 혼동하지 마십시오.

생성 시 ResourceAssociation 파트를 사용하여 직렬 레코드(SerialRecord 스테레오타입을 운반하는 레코드 정의)를 특정 파일과 연관시키십시오. 이 프로세스는 EGL이 VSAM, GSAM 또는 IMS 메시지 큐 액세스를 위해 해당 레코드를 사용할지 여부를 판별합니다. 자세한 정보는 EGL 생성 안내서를 참조하십시오.

GSAM 파일로서의 직렬 파일

IMS BMP 또는 z/OS 일괄처리 환경에서 실행되는 EGL 프로그램은 직렬 파일 GSAM(Generalized Sequential Access Method) 파일을 구현할 수 있습니다. 이러한 시스템에서는 매우 기본적인 유형의 데이터베이스 기능이 제공됩니다. GSAM 파일처럼 구현하는 직렬 파일에 대해 add, get nextclose I/O 문을 사용할 수 있습니다.

다음과 같은 특성이 GSAM 직렬 파일 처리에 적용됩니다.
  • GSAM 파일에는 데이터베이스 드라이버(DBD)가 필요합니다.
  • GSAM 파일은 IMS PSB에서 PCB가 필요합니다. IMS 런타임 PSB와 EGL PSB 정의에서 이 PCB를 정의해야 합니다. 사용자 프로그램에서 PSB 레코드 파트를 기반으로 하는 레코드 변수를 선언해야 합니다.
  • GSAM 파일은 DL/I 호출을 통해 읽혀지거나 쓰여집니다. 생성된 COBOL 프로그램은 사용자가 요청하는 I/O 문에 따라 이를 자동으로 처리합니다.
  • GSAM 파일은 DL/I 데이터베이스와 동일한 방식으로 체크포인트가 지정되고 다시 시작됩니다. 그러나 GSAM 파일을 복구하려면 기본 체크포인트 대신 상징적인 체크포인트와 다시 시작을 사용해야 합니다.
EGL은 GSAM을 위한 레코드 검색 인수 또는 정의되지 않은 길이의 레코드를 지원하지 않습니다.

IMS 메시지 큐로서의 직렬 파일

IMS/VS에서 실행되는 프로그램은 직렬 파일을 IMS 메시지 큐처럼 구현합니다. IMS BMP 프로그램처럼 실행되는 프로그램도 직렬 파일을 메시지 큐처럼 구현할 수 있습니다. 출력 파일에 대해 addget next I/O 문과 close를 사용할 수 있습니다. 대상 런타임 환경으로 IMS/VS 또는 IMS BMP를 선택하는 경우, 직렬 파일 또는 인쇄 파일이 메시지 큐와 연관되도록 정의할 수 있습니다. 모든 직렬 파일 및 인쇄 파일을 IMS/VS용 메시지 큐와 연관시켜야 합니다. 단일 입력 파일만 메시지 큐와 연관시킬 수 있습니다.

직렬 레코드를 메시지 큐와 연관시킬 때 프로그램 데이터를 정의하십시오. 생성된 COBOL 프로그램은 add 문을 위해 IMS 메시지 헤더(길이, ZZ 및 트랜잭션 코드)를 추가하고 get next 문을 위해 제거합니다.

직렬 파일 I/O 문의 결과 확인

직렬 파일을 메시지 큐 또는 GSAM 파일과 연관시키는 경우, 생성된 프로그램은 I/O 조작을 구현하는 DL/I 호출을 실행합니다. DL/I 호출이 완료될 때 Rational® COBOL Runtime은 다음 기능을 수행합니다.
  • get next 문의 경우 레코드 상태는 DL/I 상태 코드를 기반으로 설정됩니다. sysVar.sessionIDsysVar.userID 필드는 생성된 프로그램이 I/O PCB에 대해 GU 호출을 실행할 때 I/O PCB의 사용자 ID 필드로부터 업데이트됩니다. 이는 다음 위치에서 발생합니다.
    • 다중 세그먼트 메시지 큐(MMSGQ)로 정의된 직렬 파일을 위한 첫 번째 get next
    • 단일 세그먼트 메시지 큐(SMSGQ)를 위한 각 get next
    EGL sysVar.transactionID 필드는 I/O PCB에 대한 GU 호출을 생성하는 각 get next 문 이후에 IMS 메시지 헤더의 트랜잭션 이름으로부터 업데이트됩니다.
  • add 또는 close 문의 경우 레코드 상태는 DL/I 상태 코드를 기반으로 업데이트됩니다.

메시지 큐 또는 GSAM과 관련된 DL/I 호출 후에는 dliVar 필드가 업데이트되지 않습니다. 이러한 필드는 DL/I 세그먼트 레코드에 액세스하는 함수를 위해서만 업데이트됩니다. 따라서 IMS 환경에서 파일이 메시지 큐 또는 GSAM 데이터베이스로 변경될 때 CICS® 임시 데이터 큐 또는 OS/VS 직렬 파일에 대해 쓰여지는 프로그램을 일관성 있게 실행할 수 있습니다. I/O 오류 값을 확인하여 직렬 파일에서 endOfFile, noRecordFound 또는 기타 오류가 발생했는지 확인하십시오. PCB에서 자세한 정보가 필요한 경우 IO_PCBRecord 또는 ALT_PCBRecord의 필드 이름을 사용하십시오.

myPSB라는 PSB 변수가 myAltPCB라는 ALT_PCBRecord를 선언하고 사용자가 자원 연관에서 PCB 이름으로 myAltPCB를 사용한 상황을 가정하십시오. add 문 이후 DL/I 상태 코드를 참조하려면 myPSB.myAltPCB.statusCode를 사용하십시오.

EGL I/O 오류 코드 IMS 메시지 큐 상태 코드 심각도
endOfFile QC 소프트
noRecordFound QD 소프트
ioError 비공백 상태 코드 하드 또는 소프트
hardIOError QC, QD, CE, CF, CG, CI, CJ, CK, CL 이외의 비공백 하드
EGL I/O 오류 코드 GSAM 상태 코드 심각도
endOfFile GB 소프트
ioError 비공백 상태 코드 하드 또는 소프트
hardIOError GB 이외의 비공백 하드