IMS에서 연속 파일 및 인쇄 파일 사용
연속 파일은 IMS/VS에서 IMS™ 메시지 큐로 구현되어야 합니다. 이는 IMS BMP에 대해 메시지 큐, OS/VS 파일, VSAM 파일 또는 GSAM 파일로 구현될 수 있습니다. 연속 파일은 z/OS® 일괄처리에 대해 OS/VS 파일, VSAM 파일 또는 GSAM 파일로 구현될 수 있습니다. 다음에서는 GSAM 파일 또는 메시지 큐에 대해 연속 파일 사용을 다룹니다.
연속 파일을 GSAM 파일로 사용
- GSAM 파일에 DBD가 필요합니다.
- GSAM 파일에 IMS PSB의 PCB가 필요합니다. IMS 런타임 PSB 및 EGL PSB 정의에서 이 PCB를 정의해야 합니다. 프로그램에서 PSB 레코드 파트를 기반으로 하는 레코드 변수를 선언해야 합니다.
- GSAM 파일은 DL/I 호출을 통해 읽거나 씁니다. 생성된 COBOL 프로그램은 사용자가 요청하는 I/O 문을 기반으로 자동으로 이를 처리합니다.
- GSAM 파일은 DL/I 데이터베이스와 동일한 방식으로 체크포인트되고 다시 시작됩니다. 그러나 GSAM 파일을 복구하려면 기본 체크포인트 대신 기호 체크포인트 사용 및 다시 시작이 필요합니다.
생성 중에 자원 연관 파트를 사용하여 연속 파일 또는 인쇄 파일을 GSAM 파일로 지정하고 GSAM 및 PCB 이름의 파일 유형을 지정합니다.
- 자원 이름
- 샘플 런타임 JCL에서 사용되는 1 - 44자의 데이터 세트 이름을 표시합니다. 레코드 정의의 파일 이름은 샘플 런타임 JCL에서 DD 이름으로 사용됩니다.
- 파일 유형
- 파일 유형으로 GSAM을 지정하여 연속 파일 또는 프린터 출력을 GSAM 파일과 연관시키십시오.
- PCB 이름
- GSAM 파일과 연관된 연속 파일에 대해 PCB 이름을 지정합니다. 이를 지정하지 않는 경우 기본값은 EGL PSB의 첫 번째 GSAM PCB입니다.
연속 파일을 메시지 큐로 사용
IMS/VS에서 실행되는 온라인 프로그램은 연속 파일을 IMS 메시지 큐로 구현합니다. IMS BMP 프로그램으로 실행되는 프로그램은 연속 파일을 메시지 큐로 구현할 수도 있습니다. 출력 파일에 대해 close 외에도 add 및 get next I/O 문을 사용할 수 있습니다. IMS/VS 또는 IMS BMP를 대상 런타임 환경으로 선택하는 경우 메시지 큐와 연관되도록 연속 파일 또는 인쇄 파일을 정의할 수 있습니다. 모든 연속 파일 및 인쇄 파일을 IMS/VS의 메시지 큐와 연관시켜야 합니다. 하나의 입력 파일만 메시지 큐와 연관시킬 수 있습니다.
- 자원 이름
프린터 또는 연속 파일 데이터에 대해 1 - 8자의 대상 ID를 표시해야 합니다. 이름은 IMS 시스템 정의에서 정의된 IMS 논리적 터미널 또는 트랜잭션 코드의 ID와 일치해야 합니다.
파일 이름은 메시지 큐의 기본 자원 이름입니다. 자원 연관 파트에서 이 기본값을 대체할 수 있습니다.
사용자가 선택하는 PCB가 수정 가능한 대체 또는 익스프레스 대체 PCB인 경우 프로그램에서 파일에 대해 record.resourceAssociation 값을 설정하거나 프린터에 대해 converseVar.printerAssociation 값을 설정하여 런타임 시 기본 메시지 큐 이름을 대체할 수 있습니다.record.resourceAssociation은 로컬 변수로 처리됩니다. 한 프로그램에서 레코드에 대해 record.resourceAssociation을 설정하면 다른 프로그램에서 record.resourceAssociation에 영향을 미치지 않습니다. add 문은 해당 프로그램의 record.resourceAssociation 설정에 의해 식별되는 메시지 큐에 씁니다.
- 메시지 큐 유형
- 단일 세그먼트 메시지 큐 또는 다중 세그먼트 메시지 큐를
지정할 수 있습니다.
- 단일 세그먼트 메시지 큐(SMSGQ)
- 단일 세그먼트 메시지 큐에 대해 연속 파일에서 추가하거나 읽는(get next 사용) 각 레코드는 전체 메시지입니다. 생성된 COBOL 프로그램은 단일 세그먼트 메시지 큐에 추가되는 레코드 간에 IMS PURG 호출을 실행합니다. 생성된 COBOL 프로그램은 각 get next 문에 대해 IMS get unique를 실행합니다.
- 다중 세그먼트 메시지 큐(MMSGQ)
다중 세그먼트 메시지 큐의 경우 연속 파일에 대한 일련의 추가는 단일 메시지의 세그먼트에 대한 add 문과 같이 취급됩니다. close 문을 실행하거나 커미트 지점에 도달할 때까지 메시지가 종료되지 않습니다. 생성된 COBOL 프로그램은 close 문에 대해 IMS PURG 호출을 실행합니다. 그런 다음 다른 메시지의 세그먼트 추가를 시작하고 닫을 수 있습니다. 다중 세그먼트 메시지 큐는 인쇄 파일에 올바르지 않습니다.
MMSGQ 연속 파일에 대해 get next 문을 실행하는 경우 생성된 프로그램은 IMS get unique 호출을 실행하여 메시지의 첫 번째 세그먼트를 가져옵니다. 추가 get next 문의 결과로 GN 호출이 메시지의 나머지 세그먼트를 가져오게 됩니다. 메시지의 모든 세그먼트 끝에서 생성된 COBOL 프로그램이 noRecordFound 레코드 상태를 설정합니다. 스캔을 계속하면 생성된 프로그램은 일련의 GU(get unique) 호출을 시작하며 다음으로 GN(get next) 호출을 실행합니다. 메시지를 더 이상 찾을 수 없는 경우 생성된 프로그램이 endOfFile 상태를 리턴합니다.
- PCB 이름
또한 메시지 큐와 연관된 연속 파일의 PCB 이름을 지정해야 합니다. 연속 입력 파일의 PCB 이름으로 I/O PCB에 지정된 이름을 지정해야 합니다. I/O PCB는 입력에 사용되는 유일한 메시지 큐입니다. 연속 입력 파일을 사용하는 경우 기본 일괄처리 또는 호출된 일괄처리 프로그램을 사용해야 합니다. 생성된 프로그램은 기본 textUI 프로그램에 대해 모든 I/O PCB 로직을 처리합니다.
연속 출력 파일의 PCB 이름을 지정할 수 있습니다. PCB 이름은 대체 PCB 레코드에 지정된 이름이어야 합니다. 기본 PCB 이름은 PSB의 첫 번째 대체 PCB 이름입니다. 다음 시스템 함수 중 하나를 사용하여 I/O PCB에 출력을 전송할 수 있습니다.- vgLib.VGTDLI()
- dliLib.AIBTDLI()
- dliLib.EGLTDLI()
메시지 큐와 함께 사용할 레코드 정의
연속 레코드를 정의하여 메시지 큐와 연관시키는 경우 프로그램 데이터만 정의해야 합니다. 생성된 COBOL 프로그램은 add 문에 대해 IMS 메시지 헤더(길이, ZZ, 트랜잭션 코드)를 추가하고 get next 문에 대해 이를 제거합니다.
연속 파일 I/O 문의 결과 확인
- get next 문에 대해 레코드 상태는 DL/I 상태 코드를 기반으로 설정됩니다. 생성된 프로그램이 I/O PCB에 대해 GU 호출을 실행하는 경우 sysVar.sessionID 및 sysVar.userID 필드가 I/O PCB의 사용자 ID 필드에서 업데이트됩니다. 이는 다중 세그먼트 메시지 큐(MMSGQ)로 정의된 연속 파일에 대한 첫 번째 get next 문과 단일 세그먼트 메시지 큐(SMSGQ)에 대한 각 get next 문에서 발생합니다. EGL sysVar.transactionID 필드는 I/O PCB에 대해 GU 호출이 발생하게 하는 각 get next 문 후의 IMS 메시지 헤더에 있는 트랜잭션 이름에서 업데이트됩니다.
- add 또는 close 문의 경우 레코드 상태는 DL/I 상태 코드를 기반으로 업데이트됩니다.
| 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 이외의 비공백 | 하드 |
인쇄 파일을 메시지 큐로 사용
IMS/VS의 경우 인쇄 파일을 메시지 큐와 연관시켜야 합니다. IMS BMP의 경우 인쇄 파일을 메시지 큐와 연관시킬 수 있습니다. SMSGQ가 파일 이름이 "printer"인 자원 연관에 대해 올바른 유일한 파일 유형임을 제외하고 연속 파일을 메시지 큐와 연관시키는 동일한 방법으로 인쇄 파일을 메시지 큐와 연관시킵니다. IMS 시스템 정의에서 런타임 환경에서 논리적 터미널로 사용하는 메시지 큐 이름을 정의해야 합니다. converseVar.printerAssociation을 사용하여 런타임 시 프린터 정의를 변경할 수 있습니다. 예를 들어, 각 사용자가 일반적으로 사용하는 프린터 ID 및 사용자 ID의 테이블을 정의할 수 있습니다. converseVar.printerAssociation을 설정하여 프린터 출력을 프로그램 사용자와 가까운 프린터로 라우팅할 수 있습니다.