GSAM 및 IMS 메시지 큐 액세스
GSAM 및 IMS™ 메시지 큐는 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 next 및 close I/O 문을 사용할 수 있습니다.
- GSAM 파일에는 데이터베이스 드라이버(DBD)가 필요합니다.
- GSAM 파일은 IMS PSB에서 PCB가 필요합니다. IMS 런타임 PSB와 EGL PSB 정의에서 이 PCB를 정의해야 합니다. 사용자 프로그램에서 PSB 레코드 파트를 기반으로 하는 레코드 변수를 선언해야 합니다.
- GSAM 파일은 DL/I 호출을 통해 읽혀지거나 쓰여집니다. 생성된 COBOL 프로그램은 사용자가 요청하는 I/O 문에 따라 이를 자동으로 처리합니다.
- GSAM 파일은 DL/I 데이터베이스와 동일한 방식으로 체크포인트가 지정되고 다시 시작됩니다. 그러나 GSAM 파일을 복구하려면 기본 체크포인트 대신 상징적인 체크포인트와 다시 시작을 사용해야 합니다.
IMS 메시지 큐로서의 직렬 파일
IMS/VS에서 실행되는 프로그램은 직렬 파일을 IMS 메시지 큐처럼 구현합니다. IMS BMP 프로그램처럼 실행되는 프로그램도 직렬 파일을 메시지 큐처럼 구현할 수 있습니다. 출력 파일에 대해 add 및 get next I/O 문과 close를 사용할 수 있습니다. 대상 런타임 환경으로 IMS/VS 또는 IMS BMP를 선택하는 경우, 직렬 파일 또는 인쇄 파일이 메시지 큐와 연관되도록 정의할 수 있습니다. 모든 직렬 파일 및 인쇄 파일을 IMS/VS용 메시지 큐와 연관시켜야 합니다. 단일 입력 파일만 메시지 큐와 연관시킬 수 있습니다.
직렬 레코드를 메시지 큐와 연관시킬 때 프로그램 데이터를 정의하십시오. 생성된 COBOL 프로그램은 add 문을 위해 IMS 메시지 헤더(길이, ZZ 및 트랜잭션 코드)를 추가하고 get next 문을 위해 제거합니다.
직렬 파일 I/O 문의 결과 확인
- get next 문의 경우 레코드 상태는 DL/I 상태 코드를 기반으로
설정됩니다. sysVar.sessionID 및 sysVar.userID 필드는
생성된 프로그램이 I/O PCB에 대해 GU 호출을 실행할 때 I/O PCB의 사용자 ID 필드로부터 업데이트됩니다. 이는 다음 위치에서 발생합니다.
- 다중 세그먼트 메시지 큐(MMSGQ)로 정의된 직렬 파일을 위한 첫 번째 get next 문
- 단일 세그먼트 메시지 큐(SMSGQ)를 위한 각 get next 문
- 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 이외의 비공백 | 하드 |