Upload
leque
View
237
Download
6
Embed Size (px)
Citation preview
OpenFrame
유틸리티 참조 안내서
OpenFrame/Batch for VOS3 2.0
Copyright © 2009 TmaxSoft Co., Ltd. All Rights Reserved.
Copyright Notice
Copyright © 2009 TmaxSoft Co., Ltd. All Rights Reserved.
대한민국 경기도 성남시 분당구 서현동 263 분당스퀘어(AK프라자) 12층 우)463-824
Restricted Rights Legend
All TmaxSoft Software (Tmax OpenFrame®) and documents are protected by copyright laws and the Protection
Act of Computer Programs, and international convention. TmaxSoft software and documents are made available
under the terms of the TmaxSoft License Agreement and may only be used or copied in accordance with the terms
of this agreement. No part of this document may be transmitted, copied, deployed, or reproduced in any form or
by any means, electronic, mechanical, or optical, without the prior written consent of TmaxSoft Co., Ltd.
이 소프트웨어(Tmax OpenFrame®) 사용설명서의 내용과 프로그램은 저작권법, 컴퓨터프로그램보호법 및 국제
조약에 의해서 보호받고 있습니다. 사용설명서의 내용과 여기에 설명된 프로그램은 TmaxSoft Co., Ltd.와의 사용
권 계약 하에서만 사용이 가능하며, 사용권 계약을 준수하는 경우에만 사용 또는 복제할 수 있습니다. 이 사용설명
서의 전부 또는 일부분을 Tmaxsoft의 사전 서면 동의 없이 전자, 기계, 녹음 등의 수단을 사용하여 전송, 복제, 배
포, 2차적 저작물작성 등의 행위를 하여서는 안 됩니다.
Trademarks
Tmax® and Tmax OpenFrame®are registered trademarks of TmaxSoft Co., Ltd. Other products, titles or services
may be registered trademarks of their respective companies.
Tmax®와 Tmax OpenFrame®은 TmaxSoft Co., Ltd.의 등록 상표입니다. 기타 모든 제품들과 회사 이름은 각각 해
당 소유주의 상표로서 참조용으로만 사용됩니다.
Open Source Software Notice
This product includes open source software developed and/or licensed by "OpenSSL", "RSA Data Security, Inc.",
"Apache Foundation", and "Jean-loup Gailly and Mark Adler". Information about the aforementioned and the related
open source software can be found in the "${INSTALL_PATH}/license/oss_licenses" directory.
본 제품은 “OpenSSL”, “RSA Data Security, Inc.”, “Apache Foundation” 및 “Jean-loup Gailly와 Mark Adler”에 의
해 개발 또는 라이선스된 오픈 소스 소프트웨어를 포함합니다. 관련 상세 정보는 제품의 디렉터리 “${IN
STALL_PATH}/license/oss_licenses”에 기재된 사항을 참고해 주십시오.
안내서 정보
안내서 제목: OpenFrame 유틸리티 참조 안내서
발행일: 2009-11-30
소프트웨어 버전: OpenFrame/Base v5.1, Batch for VOS3 v2.0
안내서 버전: v2.1.2
내용 목차
안내서에 대하여 .......................................................................................................................... vii
제1장 개요 ................................................................................................................................. 1
1.1. 유틸리티 소개 .............................................................................................................. 1
제2장 데이터 셋 유틸리티 ............................................................................................................ 3
2.1. JSCVSUT .................................................................................................................... 3
2.2. JSDEDIT ................................................................................................................... 63
2.3. JSDPCPY .................................................................................................................. 69
2.4. JSDPRNT .................................................................................................................. 77
2.5. JSDSCPY .................................................................................................................. 83
2.6. JSDUPDT .................................................................................................................. 89
2.7. JSFCTLG .................................................................................................................. 96
2.8. JSFDCDP .................................................................................................................. 99
2.9. JSFILST .................................................................................................................. 105
2.10. JSFMOVE .............................................................................................................. 109
제3장 기타 유틸리티 ............................................................................................................... 119
3.1. DSDIFF ................................................................................................................... 119
3.2. EZTPA00 ................................................................................................................. 120
3.3. FTP ......................................................................................................................... 123
3.4. JDJDUMMY ............................................................................................................. 126
3.5. PGMRTS00 ............................................................................................................. 127
3.6. SDSF ...................................................................................................................... 130
색인 .......................................................................................................................................... 133
OpenFrame iii
그림 목차
[그림 2.1] PDS 데이터 셋 복사 ................................................................................................... 72
[그림 2.2] 데이터 셋 병합 ........................................................................................................... 73
[그림 2.3] 특정 멤버 복사 ........................................................................................................... 74
[그림 2.4] INDD 문을 사용하여 INPUT 처리 ................................................................................ 75
[그림 2.5] COPY 문의 서브 명령어로 INDD를 사용하는 경우 ........................................................ 76
[그림 2.6] 1번째 입력 레코드 필드 복사 ...................................................................................... 88
[그림 2.7] 2번째 입력 레코드 필드 복사 ...................................................................................... 88
[그림 3.1] EZTAP00 동작 ......................................................................................................... 121
[그림 3.2] PGMRTS00 동작 구조 .............................................................................................. 128
OpenFrame v
안내서에 대하여
안내서의 대상
본 안내서는 리호스팅 솔루션인 Tmax OpenFrame®(이하 OpenFrame)/Batch 시스템을 사용하는 사용자
를 대상으로 기술한다.
안내서의 전제 조건본 안내서를 정확히 사용하려면 OpenFrame/Batch 의 개념을 이해하고 있어야 한다. OpenFrame/Batch
에 대한 이해를 돕기 위해 OpenFrame 안내서 중 “Batch 안내서”를 먼저 숙지할 것을 권장한다.
안내서의 제한 조건본 안내서에서는 유틸리티에서 현재 지원하지 않는 기능, 옵션, 파라미터에 대해 별도로 표기하였으며 이
에 대한 설명은 생략한다.
안내서에 대하여 vii
안내서 구성
유틸리티 참조 안내서는 총 3개의 장으로 구성되어 있다.
각 장의 주요 내용은 다음과 같다.
● 제1장: 개요
각 장에서 설명할 유틸리티의 전반적인 개요에 대해 기술한다.
● 제2장: 데이터 셋 유틸리티
데이터 셋 유틸리티 프로그램을 사용하여 여러가지 데이터 셋 관련 작업을 처리하기 위한 방법에 대해
기술한다.
● 제3장: 기타 유틸리티
사용자의 편의를 위해 제공되는 데이터 셋 유틸리티 외의 유틸리티를 사용하는 방법에 대해 기술한다.
viii OpenFrame 유틸리티 참조 안내서
안내서 규약
의미표기
프로그램 소스 코드의 파일명, 디렉터리<AaBbCc123>
Ctrl과 C를 동시에 누름<Ctrl>+C
GUI의 버튼 또는 메뉴 이름[Button]
강조진하게
다른 관련 안내서 또는 안내서 내의 다른 장 및 절 언급" "(따옴표)
화면 UI에서 입력 항목에 대한 설명'입력항목'
메일 계정, 웹 사이트, 다른 장 및 절 참고하이퍼링크
메뉴의 진행 순서>
하위 디렉터리 또는 파일 있음+----
하위 디렉터리 또는 파일 없음|----
참조 또는 주의사항참고
그림 이름[그림 1.1]
표 이름[표 1.1]
명령어, 명령어 수행 후 화면에 출력된 결과물, 예제코드AaBbCc123
필수 인수 값{ }
옵션 인수 값[ ]
선택 인수 값|
안내서에 대하여 ix
시스템 사용 환경
요구 사항
IBM AIX 5.xPlatform
HP-UX 11.xx
Solaris 9 (SunOS 5.9)
Linux IA64 2.6.x
최소 120MB 하드디스크 공간Hardware
256MB 이상 메모리 공간
1GB 이상 하드디스크와 512MB 이상 메모리 공간 권장
Tibero 3.0Database
Oracle 9i 또는 10g
COBOL2002Compiler
x OpenFrame 유틸리티 참조 안내서
관련 안내서
설명안내서
OpenFrame/Base를 구성하는 전반적인 기능에 대해 기술한 안내서이다.OpenFrame
Base 안내서
OpenFrame 시스템의 VOS3 JCL의 문법 지원 사항과 상세 내용에 대해서 기
술한 안내서이다.
OpenFrame
JCL 문법 안내서
OpenFrame 데이터 셋에 대한 소개와 데이터 셋 종류 및 카탈로그 방법 등에
대해 기술한 안내서이다.
OpenFrame
데이터 셋 안내서
Mainframe 환경의 리소스를 OpenFrame 환경으로 마이그레이션 할 때 필요
한 정보와 전환절차 또는 주의사항 등에 대해 기술된 안내서이다.
OpenFrame
마이그레이션 안내서
OpenFrame 시스템을 운용하는데 사용하는 다양한 툴 프로그램에 대해 기술
된 안내서이다.
OpenFrame
툴 참조 안내서
참고 문헌
안내서제품
VOS3 시스템 유틸리티/독립 유틸리티 해설 문법서 6190-3-224-C0Mainframe
VOS3 데이터 셋 유틸리티 해설 문법서 6190-3-225-D0
VOS3 VSAM 유틸리티 해설 문법서 6190-3-223-E0
CA-EasyTrieve Plus Reference Guide 6.4
Communications Server IP User's Guide and Commands
안내서에 대하여 xi
연락처
Korea
TmaxSoft Co., Ltd
263 BundangSquare (AK Plaza) 12th floor, Seohyeon-dong, Bundang-gu,
Seongnam-si, Gyeonggi-do, 463-824
South Korea
Tel: +82-31-8018-1000
Fax: +82-31-8018-1115
Email: [email protected]
Web (Korean): http://www.tmax.co.kr
기술지원: http://technet.tmaxsoft.com
USA
TmaxSoft, Inc.
560 Sylvan Avenue Englewood Cliffs, NJ 07632
U.S.A
Tel: +1-201-567-8266
Fax: +1-201-567-7339
Email: [email protected]
Web (English): http://www.tmaxsoft.com
Japan
TmaxSoft Japan Co., Ltd.
5F Sanko Bldg, 3-12-16 Mita, Minato-Ku, Tokyo, 108-0073
Japan
Tel: +81-3-5765-2550
Fax: +81-3-5765-2567
Email: [email protected]
Web (Japanese): http://www.tmaxsoft.co.jp
xii OpenFrame 유틸리티 참조 안내서
China
TmaxSoft China Co., Ltd.
Beijing Silver Tower, RM 1508, 2# North Rd Dong San Huan,
Chaoyang District, Beijing, China, 100027
China
Tel: +86-10-6410-6145~8
Fax: +86-10-6410-6144
Email: [email protected]
Web (Chinese): http://www.tmaxsoft.com.cn
안내서에 대하여 xiii
제1장 개요
본 장에서는 OpenFrame에서 제공하는 유틸리티에 대해 소개한다.
1.1. 유틸리티 소개OpenFrame 유틸리티 프로그램은 OpenFrame 엔진과 함께 제공되는 사용자 편의를 위한 프로그램으로
JCL을 통해 Batch JOB으로 실행된다.
유틸리티 프로그램은 다음과 같이 분류된다.
● 데이터 셋 유틸리티
● 소트 유틸리티
● 기타 유틸리티
각 유틸리티에 대한 설명은 해당 절에서 자세하게 기술한다.
참고
소트 유틸리티에 대해서는 OpenFrame 안내서 중 "SORT 유틸리티 참조 안내서"를 참고한다.
제1장 개요 1
제2장 데이터 셋 유틸리티
본 장에서는 데이터 셋 유틸리티에 대해 기술한다.
2.1. JSCVSUTJSCVSUT는 OpenFrame의 VSAM과 Non-VSAM 데이터 셋 및 카탈로그 정보를 생성하고 관리하기 위한
유틸리티 프로그램이다.
SYSIN DD에 입력된 각 명령은 각각의 명령이 의미하는 작업을 수행하기 위한 명령어와 이를 위한 각종
옵션 또는 파라미터들로 구성된다. JSCVSUT는 실행할 명령들을 SYSIN DD에서 읽어 들여 동작한다.
OpenFrame의 JSCVSUT 프로그램은 기존 Mainframe의 JSCVSUT 명령을 그대로 사용하여 OpenFrame
의 VSAM 데이터 셋과 Non-VSAM 데이터 셋 그리고 카탈로그를 대상으로 동작한다. 사용자 입장에서
Mainframe의 JSCVSUT와 동일한 작업을 수행한다.
JSCVSUT는 2가지 종류의 명령어로 분류된다.
● 기능 명령어
실제로 사용자가 수행하려는 특정 작업을 나타내는 명령어이다.
설명명령어
이미 정의되어 있는 데이터 셋 또는 카탈로그 자체의 속성을 변경한다.ALTER
특정 데이터 셋에 대한 보조 인덱스를 생성한다.BLDINDEX
데이터 셋의 카탈로그 정보와 VTOC 정보를 비교한다.CHECKCAT
다음과 같은 데이터 셋 오브젝트(또는 카탈로그 엔트리)를 정의하기 위해 사용한다.DEFINE
- ALIAS
- ALTERNATEINDEX
- CLUSTER
- GENERATIONDATAGROUP
- NONVSAM
- PATH
- USERCATALOG|MASTERCATALOG
VSAM과 Non-VSAM 데이터 셋 및 카탈로그를 제거한다.DELETE
제2장 데이터 셋 유틸리티 3
설명명령어
카탈로그와 VSAM 데이터 셋을 이식 가능한 데이터 셋으로 반출하거나 백업 데이터
셋을 생성한다.
EXPORT
CHECKCAT 명령에 사용되는 데이터 셋의 카탈로그 정보 및 VTOC 정보를 추출한다.EXTRACT
EXPORT 명령으로 생성된 이식 가능한 카탈로그와 VSAM 데이터 셋을 반입하거나
백업된 상태의 데이터 셋을 원래의 상태로 복원한다.
IMPORT
카탈로그에 등록된 VSAM과 Non-VSAM 데이터 셋에 대한 정보를 보여준다.LISTCAT
볼륨에 등록된 VSAM과 Non-VSAM 데이터 셋에 대한 정보를 보여준다.LISTENT
카탈로그 상태에 대한 정보를 보여준다.LISTST
VSAM과 Non-VSAM 데이터 셋에 저장되어 있는 레코드를 출력하여 보여준다.PRINT
VSAM과 Non-VSAM 데이터 셋의 내용을 복사한다.REPRO
카탈로그를 분할 또는 병합한다.SPLITMRG
카탈로그에 등록된 VSAM과 Non-VSAM 데이터 셋을 검색한다.SRCHCAT
VSAM 데이터 셋의 비정상 종료(close)로 인해 잘못된 데이터 셋 정보로 카탈로그 되
어 있는지 확인하고 올바르게 수정한다. 또한 레코드 수 등의 정보도 정확하게 반영되
어 있는지 확인한다.
VERIFY
VSAM 데이터 셋을 종료할 때 해당 데이터 셋의 마지막 위치와 레코드 수 등의 통계
정보가 카탈로그에 저장된다. 정상적으로 종료되지 않은 경우 카탈로그 정보와 실제
데이터 셋의 상태 정보가 일치하지 않을 수 있으므로, VERIFY 명령으로 이러한 불일
치를 올바르게 변경할 수 있다.
● 보조 명령어
JSCVSUT 명령어들의 실행을 제어하기 위한 보조 성격의 명령어이다.
설명명령어
실행된 명령의 컨디션 코드 값(LASTCC 또는 MAXCC)에 따라 다음에 실행할 명령을
분기하기 위해 사용한다.
IF-THEN-ELSE
아무 동작도 발생시키지 않는 문법적 용도의 명령이다.Null
IF-THEN-ELSE 명령의 THEN이나 ELSE 다음에 특별한 작업을 수행하지 않는다는
것을 명시적으로 나타내기 위해서 사용한다.
MAXCC나 LASTCC의 값을 특정한 값으로 강제 설정하기 위해 사용한다.SET
프로그램 실행 중 CANCEL 명령어를 만나면 JSCVSUT의 실행이 중지되고, CANCEL
명령 이후의 나머지 명령들은 처리되지 않는다.
CANCEL
JSCVSUT가 실행되는 동안에 적용되는 옵션 및 파라미터 값을 지정한다. 현재는 지
원하지 않는다.
PARM
4 OpenFrame 유틸리티 참조 안내서
JSCVSUT을 이용하여 코딩할 때 공통적으로 적용되는 규약은 다음과 같다.
● 하이픈(-)
하나의 명령을 여러 라인에 걸쳐서 작성할 경우, 라인의 맨 뒤에 하이픈(-)을 입력하고 그 다음 라인에
계속 이어서 명령의 나머지 부분을 코딩한다.
하이픈(-)은 키워드나 파라미터 값의 중간에 코딩할 수 없으며 일반적으로 키워드나 파라미터 값의 경
계가 되는 부분에 라인이 계속 이어진다는 의미로 사용한다.
하이픈(-)을 사용하여 코딩하는 예는 다음과 같다.
LISTCAT ENT( -
TEST.CLUS1 -
TEST.KSDS1 -
TEST.RRDS1 -
TEST.SDS1
주의
여러 라인에 걸쳐서 작성된 명령어의 맨 마지막 라인에는 하이픈(-)을 코딩하지 않도록 주의한다.
● 주석
주석은 JSCVSUT 명령 사이에 입력할 수 있다. 단, 키워드나 파라미터 값의 중간에는 주석이 올 수 없
다. 또한, 주석의 시작 문자 '/*'는 라인의 1번째 컬럼에 기술할 수 없다.
주석에 특별한 기능은 없지만 하나의 명령으로 간주되기 때문에 명령 중간에 주석을 추가하는 경우에
는 해당 라인의 맨 뒤에 하이픈(-)을 입력해야 한다.
주석은 공백이나 콤마(,)와 같이 JSCVSUT 문법에서 필드를 구분하는 역할도 하므로 ‘/*’와 ‘*/’ 사이에
입력한다.
다음은 주석을 올바르게 기술한 예이다.
/* This is JSCVSUT Comment */
/* This is multi line Comment comment continued from above line */
LISTCAT ENT( /* Comment 1 */ -
TEST.KSDS1 /* Comment 3 */ -
TEST.SDS1 /* Comment 4 */ ) /* Comment 5 */
주의
IF-THEN-ELSE 문의 중간에 주석을 사용하는 경우에는 주석에 의해서 IF-THEN-ELSE 구조가 의도
하지 않은 위치에서 끝나지 않도록 주의해야 한다.
제2장 데이터 셋 유틸리티 5
DD 설정
OpenFrame의 JSCVSUT는 JCL을 통해 Batch 작업으로 실행하는 방식과 UNIX 시스템의 명령어 라인에
서 직접 실행하는 인터랙티브 방식을 모두 지원한다.
JCL을 통한 JOB 실행(using JCL as JOB)
JCL을 통해서 JOB의 한 STEP으로서 JSCVSUT를 실행하는 경우 JSCVSUT는 다음과 같은 DD 문을 사
용한다.
설명항목
JSCVSUT가 실행할 명령을 기술한다.SYSIN DD
데이터 셋의 레코드 길이는 72 칼럼을 넘을 수 없으며, 명령이 길어질 경우 하이픈(-)
을 사용한다.
JSCVSUT 실행 결과와 실행 중 발생한 주의를 필요로 하는 정보성 메시지, 경고 메시
지 그리고 에러 메시지 등을 저장할 데이터 셋을 기술한다.
SYSPRINT DD
또는
SYSPRINT DD를 기술하지 않거나 지정 데이터 셋의 할당, 열기에 실패한 경우
JSCVSUT는 아무런 명령도 수행하지 않고 종료되며 컨디션 코드 16을 반환한다.
SYSOUT DD
JSCVSUT 명령 중에서 일부는 JCL에 기술된 DD를 통해 명령의 대상이 되는 ddname
이나 entryname을 간접적으로 지정할 수 있다. 이 경우 JSCVSUT는 데이터 셋을 동
추가적인 DD
적으로 할당하지 않고 JOB의 실행을 제어하는 tjclrun에 의해 JOB 레벨에서 미리 할
당된 데이터 셋을 승계받아 사용한다.
일반적으로 명령어의 대상이 되는 데이터 셋을 지정하는 파라미터는 JCL에 기술된
ddname을 이용하여 FILE(ddname) 형태의 파라미터 이름을 갖는다.
JSCVSUT에서 동적 할당을 이용하여 데이터 셋을 지정하는 파라미터는
DATASET(entryname) 형태의 파라미터 이름을 갖는다.
다음은 앞에서 설명한 추가적인 DD에 대한 예로, REPRO BLDINDEX PRINT의 파라미터를 이용하여 JCL
에서 할당된 데이터 셋을 승계받아서 동작하도록 한다.
INFILE(ddname), OUTFILE(ddname)
다음은 REPRO BLDINDEX PRINT의 파라미터로, JSCVSUT에서 동적으로 데이터 셋을 할당하여 동작하
는 예이다.
INDATASET(entryname), OUTDATASET(entryname)
6 OpenFrame 유틸리티 참조 안내서
JCL을 통해서 JOB의 한 STEP으로 JSCVSUT를 실행시키기 위해서는 JSCVSUT를 호출하는 JOB STEP
에 앞에서 설명한 DD를 기술하고 EXEC PGM에 JSCVSUT를 지정한 후 해당 JCL을 전송(submit)한다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//REPRO EXEC PGM=JSCVSUT
//INDD DD DSN=VSAM.KSDS1,DISP=(OLD,KEEP)
//OUTDD DD DSN=VSAM.KSDS2,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
REPRO INFILE(INDD) -
OUTFILE(OUTDD) -
SKIP(50000) COUNT(10000)
/*
//
명령어 라인에서 실행(using from Command line)
UNIX 시스템의 명령어 라인에서 JSCVSUT를 직접 실행한다. 이 경우 SYSIN DD 및 SYSPRINT DD 대신
에 표준 입출력 스트림 (stdin/stdout/stderr)을 사용하여 작동한다. 즉, stdin으로부터 JSCVSUT 명령어를
읽어 들여 명령어 단위로 실행하고, stdout/stderr로는 작업의 결과 및 에러 메시지를 출력하는 인터랙티브
한 인터프리터 방식이다.
UNIX 시스템의 명령어 라인에 다음과 같은 명령을 실행하면 JSCVSUT는 DEFINE.TEST.CLUS1.CMD라
는 VSAM 데이터 셋을 제거하고 다시 정의하는 동작을 한다.
$ JSCVSUT < DEFINE.TEST.CLUS1.CMD
TEST.CLUS1.CMD는 일반적인 UNIX 텍스트 파일로 아래와 같은 내용을 담고 있다. DE
FINE.TEST.CLUS1.CMD 파일은 JSCVSUT UNIX 명령어 라인에서 stdin 리다이렉션을 보여준다.
DELETE TEST.CLUS1 CLUSTER
DEFINE CLUSTER -
(NAME(TEST.CLUS1) -
VOLUMES(100000) -
INDEXED -
KEYS(07 0) -
CYL (70 10) -
RECORDSIZE(200 200)) -
DATA (NAME(TEST.CLUS1.DATA) -
CONTROLINTERVALSIZE(4096) ) -
INDEX (NAME(TEST.CLUS1.INDEX) -
CONTROLINTERVALSIZE(4096) )
제2장 데이터 셋 유틸리티 7
제약 사항(Limitation)
DD(ddname)를 통해 할당된 데이터 셋을 승계하여 사용하기 위해서는 OpenFrame/Batch 환경, 특히 tjclrun
을 필요로 한다. 따라서 JCL을 통해 JOB STEP으로 JSCVSUT를 실행하는 경우에 가능했던 ddname을
사용한 데이터 셋의 지정이 UNIX 시스템의 명령어 라인에서는 불가능하다.
UNIX 명령어를 실행하는 경우 JSCVSUT 명령의 대상이 되는 데이터 셋을 지정하기 위해서는 항상
DATASET(entryname) 형태로 지정하여 사용해야 한다.
기능 명령어
ALTER
DEFINE 문으로 카탈로그에 이미 등록되어 있는 데이터 셋과 카탈로그 엔트리의 정보 일부를 변경할 수
있다.
ALTER 명령어 구문은 다음과 같다.
참고
PDS 멤버에 대한 ALTER 문은 지원하고 있지 않다.
ALTER entryname
[NEWNAME(entryname)]
[EMPTY|NOEMPTY]
[LIMIT(limit)]
[NULLIFY(
[OWNER]
[RETENTION]
)
[OWNER(ownerid)]
[SCRATCH|NOSCRATCH]
[TO(date)|FOR(days)]
[CATALOG(catname)]
설명항목
속성을 변경하고자 하는 기존 데이터 셋이나 카탈로그 엔트리의 entryname을 지정한
다.
entryname
변경하고자 하는 엔트리명의 새로운 이름을 지정한다. (약어: NEWNM)NEWNAME
PDS 멤버에 대한 ALTER 구문은 지원하고 있지 않다.(entryname)
세대 데이터 그룹에 존재하는 세대 데이터 셋의 수가 제한값을 초과했을 때, 기존에
존재하는 세대 데이터 셋을 어떻게 삭제할지를 결정한다.
EMPTY|
NOEMPTY
8 OpenFrame 유틸리티 참조 안내서
설명항목
- EMPTY: 기존의 모든 세대 데이터 셋을 삭제한다. (약어: EMP)
- NOEMPTY: 기존의 세대 테이터 셋 중 가장 오래된 데이터 셋을 삭제한다. (약어:
NEMP)
OpenFrame에서는 NOEMPTY 기능만 지원하고 있다.
세대 데이터 그룹에 존재할 수 있는 최대 세대 수를 지정한다. (약어: LIM)LIMIT(limit)
이 값은 1~255 범위 내에서만 지정할 수 있다.
LIMIT으로 지정한 값보다 실제 세대 데이터 그룹에 존재하는 세대 데이터 셋이 많은
경우, 데이터 셋의 수가 LIMIT에 지정한 값이 될 때까지, 가장 오래된 데이터 셋부터
삭제한다.
무효 대상을 결정한다. (약어: NULL)NULLIFY
- OWNER: 소유자 식별명을 무효로 한다.
- RETENTION: TO 또는 FOR 파라미터로 지정된 만기 일자를 무효로 한다. (약어:
RETN)
변경될 엔트리의 소유자를 지정한다.OWNER
세대 데이터 셋이 삭제될 때 VTOC에 등록된 데이터 셋 정보도 모두 삭제할지를 결정
한다.
SCRATCH|
NOSCRATCH
- SCRATCH: VTOC에 등록된 세대 데이터 셋의 정보도 삭제한다. (약어: SCR)
- NOSCRATCH: VTOC에 등록된 세대 데이터 셋의 정보를 삭제하지 않는다. 하지만
카탈로그에 등록된 정보는 삭제되었기 때문에, 카탈로그를 통한 데이터 셋으로의 접
근은 할 수 없다. (약어: NSCR)
OpenFrame에서는 SCRATCH 기능만 지원하고 있다. GDS가 카탈로그로부터 등록
을 해제하면 볼륨에 있는 데이터 셋도 함께 삭제한다.
수정하려는 엔트리에 대한 보존 기간을 지정한다.TO(date)|
- TO: 보존 기간을 [yy]yyddd 형식으로 지정한다.FOR(days)
- FROM: 보존 일수를 0~9999 범위 내에서 지정한다. 9999를 지정하면 영구 보존된
다.
entryname으로 지정된 카탈로그 엔트리를 찾을 때 사용할 카탈로그를 명시적으로 지
정한다. 지정하지 않는 경우에는 카탈로그 검색 순서에 따라 결정된다. (약어: CAT)
CATALOG
(catname)
제2장 데이터 셋 유틸리티 9
카탈로그 엔트리 타입과 카탈로그 엔트리에 해당하는 사용자 데이터 셋에 데이터가 적재되어 있는지 여
부에 따라서 변경 가능한 속성과 변경 불가능한 속성이 있다.
다음은 OpenFrame JSCVSUT의 ALTER 명령이 지원하는 각 카탈로그 엔트리 타입에 따른 변경 가능한
속성을 요약한 표이다. ‘O’로 표시되어 있는 곳이 변경 가능한 속성이다.
GDGNON-
VSAM
UCAT
IN
DEX
UCAT
DATA
PATHCLUS
TER
IN
DEX
CLUS
TER
DATA
CLUS
TER
AIX
IN
DEX
AIX
DATA
AIX엔트리 타입
변경가능 속성
-O--O------NEWNAME
O----------EMPTY
O----------NOEMPTY
O----------LIMIT
OO--O------NULLIFY
OO--O------OWNER
OO--O------RETENTION
O----------SCRATCH
O----------NOSCRATCH
OO--O------TO
OO--O------FOR
참고
본 안내서에서 다루지 않은 파라미터에 대해서는 Hitachi의 "VOS3 VSAM Utility"를 참고한다.
변경하고자 하는 카탈로그 엔트리에 새로운 속성값을 지정하기 위해서는 각 파라미터 외에도 변경할 대
상이 되는 카탈로그 엔트리를 지정하기 위한 파라미터가 필요하다.
다음은 TESTCAT이라는 사용자 카탈로그에 등록된 TEST.GDG1란 이름의 GDG의 최대 세대 수를 255
로, 만료일자를 2006년의 300번째 날짜로 속성을 변경하는 예이다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//ALTGDG EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
ALTER TEST.GDG1 -
LIMIT(255) -
TO(2006300) -
CATALOG(TESTCAT)
10 OpenFrame 유틸리티 참조 안내서
/*
//
BLDINDEX
BLDINDEX 명령을 사용하여 기존에 존재하는 데이터 셋에 대한 보조 인덱스를 구성한다. BLDINDEX 명
령은 내부적으로 보조 인덱스 클러스터에 하나의 보조키와 다수개의 기본키로 구성되는 레코드를 적재하
는 역할을 담당한다.
BLDINDEX는 BIX라는 약어를 사용할 수 있다.
BLDINDEX 명령어 구문은 다음과 같다.
BLDINDEX {INFILE(ddname)|INDATASET(entryname)}
{OUTFILE(ddname)|OUTDATASET(entryname)}
[CATALOG(catname)]
설명항목
보조 인덱스를 구성하는 데 사용할 베이스 클러스터를 지정한다.INFILE(ddname)|
- INFILE: JSCVSUT 호출 전에 실행환경에 의해서 미리 할당된 데이터 셋을
사용하는 경우에는 ddname을 사용한다. (약어: IFILE)
INDATASET(entryname)
- INDATASET: JSCVSUT 자체적으로 데이터 셋을 할당하는 경우에는 entry
name을 사용한다. (약어: IDS)
BLDINDEX 결과로 구성되는 보조 인덱스 클러스터를 지정한다. BLDINDEX
전에 보조 인덱스는 미리 DEFINE되어야 한다.
OUTFILE(ddname)|
OUTDATASET(entry
name) - OUTFILE: JSCVSUT 호출 전에 실행환경에 의해서 미리 할당된 데이터 셋
을 사용하는 경우에는 ddname을 사용한다. (약어: ODS)
- OUTDATASET: JSCVSUT 자체적으로 데이터 셋을 할당하는 경우에는
entryname을 사용한다. (약어: ODS)
entryname으로 지정된 카탈로그 엔트리를 찾을 때 사용할 카탈로그를 명시
적으로 지정한다. 지정하지 않는 경우에는 카탈로그 검색 순서에 따라 결정
된다. (약어: CAT)
CATALOG(catname)
다음은 VSAM.KSDS1의 보조 인덱스인 VSAM.AIX1을 구성하는 예이다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//BLDAIX EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//BASE DD DSN=VSAM.KSDS1,DISP=OLD
//AIX DD DSN=VSAM.AIX1,DISP=OLD
제2장 데이터 셋 유틸리티 11
//SYSIN DD *
BLDINDEX INFILE(BASE) -
OUTFILE(AIX)
/*
//
CHECKCAT
CHEKCCAT 명령을 사용하여 카탈로그 정보를 VTOC 정보와 비교한다.
다음은 CHECKCAT 명령의 2가지 기능이다.
● VSAM 데이터 셋 및 Non-VSAM 데이터 셋의 비교
EXTRACT 명령으로 추출한 데이터 셋의 카탈로그 정보와 VTOC 정보를 비교한다.
비교한 정보를 토대로 불일치한 데이터 셋에 대하여 복구하기 위한 VSAM 유틸리티 명령어를 생성하고
지정된 데이터 셋에 출력한다.
● VSAM 데이터 셋의 비교
EXTRACT 명령으로 추출한 데이터 셋의 카탈로그 정보와 VTOC 정보를 비교한다.
VSAM 데이터 셋 및 Non-VSAM 데이터 셋의 비교를 위한 CHECKCAT 명령어 구문은 다음과 같다.
CHECKCAT CATFILE(ddname)
VOLFILE(ddname)
CMDFILE1(ddname)
CMDFILE2(ddname)
CMDFILE3(ddname)
CMDFILE4(ddname)
[IGNORE|NOIGNORE]
[LIMIT(limit)]
[LIST|NOLIST]
설명항목
EXTRACT 명령으로 추출한 카탈로그 정보를 포함하고 있는 Non-VSAM 데이터
셋의 ddname을 지정한다. (약어: CFILE)
CATFILE(ddname)
EXTRACT 명령으로 추출한 VTOC 정보를 포함하고 있는 Non-VSAM 데이터 셋
의 ddname을 지정한다. (약어: VFILE)
VOLFILE(ddname)
VSAM 데이터 셋에 대한 DEFINE 관련 명령어가 출력되는 Non-VSAM 데이터
셋의 ddname을 지정한다. 출력 데이터 셋은 80Byte 고정장 블록 형식이어야 한
다. (약어: CMD1)
CMDFILE1(ddname)
12 OpenFrame 유틸리티 참조 안내서
설명항목
VSAM 데이터 셋에 대한 DELETE 관련 명령어가 출력되는 Non-VSAM 데이터
셋의 ddname을 지정한다. 출력 데이터 셋은 80Byte 고정장 블록 형식이어야 한
다. (약어: CMD2)
CMDFILE2(ddname)
Non-VSAM 데이터 셋에 대한 DEFINE 관련 명령어가 출력되는 Non-VSAM 데
이터 셋의 ddname을 지정한다. 출력 데이터 셋은 80Byte 고정장 블록 형식이어
야 한다. (약어: CMD3)
CMDFILE3(ddname)
Non-VSAM 데이터 셋에 대한 DELETE 관련 명령어가 출력되는 Non-VSAM 데
이터 셋의 ddname을 지정한다. 출력 데이터 셋은 80Byte 고정장 블록 형식이어
야 한다. (약어: CMD4)
CMDFILE4(ddname)
카탈로그에 등록된 데이터 셋 중에 VOLFILE 파라미터로 지정한 볼륨에 해당하
는 엔트리만을 비교할지를 결정한다.
IGNORE|
NOIGNORE
- IGNORE: VOLFILE 파라미터에 지정한 볼륨에 해당하는 엔트리만 비교한다.
(약어: IGN)
- NOIGNORE: 카탈로그에 등록되어 있는 모든 엔트리에 대하여 비교한다. (약
어: NIGN)
기본값은 NOIGNORE이다.
CHECKCAT의 CMDFILE 데이터 셋에 생성되는 DEFINE GENERATIONDATA
GROUP 구문의 최대 세대 수를 지정한다. 이 파라미터를 생략하면 기본값인 255
가 지정된다. (약어: LIM)
LIMIT(limit)
비교한 결과값의 출력 방식을 결정한다.LIST|
- LIST: 모든 엔트리에 대한 결과를 출력한다.NOLIST
- NOLIST: 불일치 엔트리에 대한 결과만 출력한다. (약어: NLIST)
기본값은 NOLIST이다.
VSAM 데이터 셋의 비교를 위한 CHECKCAT 명령어 구문은 다음과 같다.
CHECKCAT CATALOG(catname)
FILE(ddname[ ddname...])
[IGNORE|NOIGNORE]
[LIST|NOLIST]
설명항목
비교 대상 VSAM 데이터 셋 엔트리를 포함하고 있는 카탈로그를 지정한다. (약어:
CAT)
CATALOG(cat
name)
비교 대상 VSAM 데이터 셋 엔트리를 포함하고 있는 볼륨의 ddname을 지정한다.FILE(ddname)
제2장 데이터 셋 유틸리티 13
설명항목
카탈로그에 등록된 데이터 셋 중에 VOLFILE 파라미터로 지정한 볼륨에 해당하는 엔
트리만을 비교할지를 결정한다.
IGNORE|
NOIGNORE
- IGNORE: VOLFILE 파라미터에 지정한 볼륨에 해당하는 엔트리만 비교한다. (약어:
IGN)
- NOIGNORE: 카탈로그에 등록되어 있는 모든 엔트리에 대하여 비교한다. (약어:
NIGN)
기본값은 NOIGNORE이다.
비교한 결과값의 출력 방식을 결정한다.LIST|
- LIST: 모든 엔트리에 대한 결과를 출력한다.NOLIST
- NOLIST: 불일치 엔트리에 대한 결과만 출력한다. (약어: NLIST)
기본값은 NOLIST이다.
다음은 CHECKCAT 명령어로 USER.CAT1 사용자 카탈로그에 등록되어 있는 VSAM 데이터 셋 엔트리와
볼륨 일렬 번호가 100000과 200000인 볼륨에 들어있는 VSAM 데이터 셋 엔트리를 비교하는 예이다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//CHECKCAT EXEC PGM=JSCVSUT
//VOLIN1 DD VOL=SER=100000,DISP=OLD
//VOLIN2 DD VOL=SER=200000,DISP=OLD
//SYSPRINT DD SYSOUT=A
//SYSIN DD *
CHECKCAT -
CATALOG(USER.CAT1) -
FILE(VOLIN1 VOLIN2) -
LIST
/*
//
DEFINE
DEFINE 명령에서 공통적으로 사용 가능한 파라미터는 다음과 같다.
DEFINE NAME(entryname)
{CYLINDERS(primary[ secondary])|
RECORDS(primary[ secondary)|
TRACKS(primary[ secondary)}
{VOLUMES(volser[ volser...]|
DEVICETYPE(devtype)})
14 OpenFrame 유틸리티 참조 안내서
[CONTROLINTERVALSIZE(size)]
[OWNER(ownerid)]
[RECORDSIZE(average maximum)]
[TO(date)|FOR(days)])
[DATA (...)]
[INDEX (...)]
[CATALOG(catname)]
참고
DEFINE 명령별로 지정 가능한 실제 파라미터의 종류는 각각의 DEFINE 명령 절에서 설명한다. 본
절에서는 공통적으로 사용하는 파라미터에 관해 설명한다.
DEFINE의 약어로 DEF를 사용할 수 있다.
DEFINE 구문에서 공통적으로 지정할 수 있는 파라미터는 다음과 같다.
설명항목
DEFINE 명령으로 생성 또는 정의하려는 카탈로그 객체의 이름을 지정한다.NAME(entryname)
VSAM 클러스터(CLUSTER, ALTERNATEINDEX, USERCATALOG)를 생성할
때 해당 데이터 셋에 할당할 저장소의 용량을 지정한다.
CYLINDERS|
RECORDS|
CYLINDERS, TRACKS는 저장 매체의 종류에 종속적인 단위로 할당을 할 때 사
용된다. 나머지는 저장 매체의 종류에 비종속적인 단위로 할당할 때 사용된다.
기본(primary) 할당과 추가(secondary) 할당으로 지정한다.
TRACKS
(primary[ secondary])
기본 할당은 데이터 셋을 생성할 때 처음 할당되는 것을 의미하고 추가 할당은
이후 데이터 셋에 데이터가 계속 저장되어 저장소를 추가적으로 할당하는 경우
를 의미한다.
(약어: CYL | REC | TRK)
VOLUMES, DEVICETYPE 중 원하는 항목을 지정한다.VOLUMES(volser[
volser...])|- VOLUMES: 데이터 셋을 생성하는 경우 데이터 셋을 저장할 볼륨의 볼륨 일련
번호를 지정한다. (약어: VOL)DEVICETYPE(dev
type)- DEVICETYPE: 엔트리가 존재하는 볼륨의 장치 타입을 지정한다. 단, OpenFrame
에서는 이 옵션을 지원하고 있지 않다. (약어: DEVT)
VSAM 클러스터(CLUSTER, ALTERNATEINDEX, USERCATALOG)의 컨트롤
인터벌 크기를 지정한다.
CONTROLINTERVAL
SIZE(size)
컨트롤 인터벌은 Non-VSAM의 BLKSIZE에 해당하는 개념으로 VSAM은 실제로
디스크에 I/O하는 경우 컨트롤 인터벌 단위로 동작한다.
제2장 데이터 셋 유틸리티 15
설명항목
CONTROLINTERVALSIZE는 512Byte에서 8KByte 사이에서 512Byte의 배수단
위로 지정해야 하고, 8KByte에서 32KByte 사이의 값인 경우는 2KByte의 배수
단위로 지정해야 한다. 그렇지 않은 경우 내부적으로 해당 범위에 따라서 지정된
값보다 작지 않은 가장 가까운 512Byte나 2 KByte의 배수단위의 값으로 결정된
다. CONTROLINTERVALSIZE를 지정하지 않으면 VSAM이 임의의 적당한 값으
로 결정한다.
(약어: CISZ 또는 CNVSZ)
데이터 셋의 소유자를 지정한다.OWNER(ownerid)
CLUSTER, ALTERNATEINDEX, USERCATALOG를 생성할 때 해당 데이터 셋
에 저장될 레코드의 크기를 average와 maximum으로 지정한다. 두 값을 동일하
게 지정하면 고정 길이 레코드 (Fixed Length Record)를 의미한다.
RECORDSIZE
(average maximum)
USERCATALOG에 지정된 이 파라미터는 무시된다. USERCATALOG는 VSAM
이 처리하는 데이터 셋이기 때문에 VSAM은 USERCATALOG의 RECORDSIZE
파라미터로 항상 (4096 32600)을 사용한다.
CLUSTER에 대해서는 이 파라미터가 생략된 경우 SPANNED 파라미터가 지정
되어 있으면 (4096 32600)이 기본값으로 사용되고 그렇지 않은 경우 (4089 4089)
가 기본값으로 사용된다.
ALTERNATEINDEX에 대해서 이 파라미터가 생략된 경우는 항상 (4089 32600)
이 기본값으로 사용된다.
ALTERNATEINDEX는 일반적으로 많은 수의 NONUNIQUE KEY가 존재하는 점
을 고려해서 VSAM 내부적으로 SPANNED가 지정된 KSDS처럼 처리된다. AL
TERNATEINDEX에는 SPANNED 파라미터는 무시된다.
(약어: RECSZ)
데이터 셋 및 카탈로그 엔트리를 생성할 때 해당 객체의 만료일자를 지정한다.TO(date)|
- TO: 만료일자를 지정한다.FOR(days)
- FOR: 유효일수를 지정한다. 생성일로부터 유효일수를 더한 날짜가 만료일자
가 된다.
CLUSTER, ALTERNATEINDEX, USERCATALOG와 같이 데이터 컴포넌트와
인덱스 컴포넌트를 가질 수 있는 VSAM 클러스터를 생성하는 경우 데이터 컴포
DATA(parameters)
INDEX(parameters)넌트와 인덱스 컴포넌트 각각에 대해서 별도로 위에서 설명한 파라미터(일부 해
당하는 파라미터)를 따로 지정할 수 있다.
예를 들어 저장소 할당 크기를 나타내는 CYLINDERS 파라미터는 DEFINE
CLUSTER할 때 CLUSTER의 서브 파라미터로서 지정해도 되고 DATA나 INDEX
16 OpenFrame 유틸리티 참조 안내서
설명항목
컴포넌트의 서브 파라미터로서 지정해도 된다. 이렇게 별도로 지정한 경우 컴포
넌트 별로 따로 적용하는 것이 가능하다면 컴포넌트 별로 다른 값이 적용된다.
DEFINE 명령으로 정의하는 카탈로그 엔트리가 등록될 카탈로그 이름을 지정한
다. 생략하면 해당 JOB의 STEPCAT이나 JOBCAT에 지정된 카탈로그 또는 카
CATALOG(catname)
탈로그 엔트리 이름의 일부를 ALIAS로 사용하는 USERCATALOG가 있는 경우
해당 USERCATALOG에 등록된다. 마지막까지 등록할 카탈로그가 결정되지 않
으면 마스터 카탈로그에 등록한다. (약어: CAT)
자세한 사항은 "OpenFrame 데이터 셋 안내서"의 "제4장 통합 카탈로그"에서 카
탈로그 검색 순서를 참고한다.
DEFINE ALIAS
Non-VSAM 데이터 셋이나 사용자 카탈로그의 별칭으로 사용할 ALIAS를 카탈로그에 생성한다.
ALIAS에 해당하는 카탈로그 엔트리 역시 원래의 데이터 셋 이름과 별칭만을 포함하고 있다. 별도의 사용
자 데이터를 저장하기 위한 데이터 셋은 존재하지 않는다.
참고
사용자 카탈로그를 제외한 VSAM 데이터 셋에 대한 ALIAS는 생성할 수 없다.
DEFINE ALIAS 명령어 구문은 다음과 같다.
DEFINE ALIAS (NAME(aliasname)
RELATE(entryname))
[CATALOG(catname)]
설명항목
생성할 ALIAS 이름을 지정한다. ALIAS 이름은 등록될 카탈로그 내에서 유일해
야 한다.
NAME(aliasname)
ALIAS가 가리키는 실제 엔트리의 entryname을 지정한다. (약어: REL)RELATE(entryname)
생성할 ALIAS를 등록할 카탈로그 지정한다. (약어: CAT)CATALOG(catname)
사용자 카탈로그에 대한 ALIAS를 생성하는 경우 마스터 카탈로그를 지정한다.
다음은 TEST.NVSAM1의 ALIAS로 TEST.ALIAS1을 생성하고 TESTCAT 카탈로그에 등록하는 예이다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//DEFALI EXEC PGM=JSCVSUT
제2장 데이터 셋 유틸리티 17
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE ALIAS(NAME(TEST.ALIAS1) -
RELATE(TEST.NVSAM1)) -
CATALOG(TESTCAT)
/*
//
DEFINE ALTERNATEINDEX
DEFINE ALTERNATEINDEX(이하 AIX) 명령을 이용하여 특정 데이터 셋(BASE CLUSTER)에 대한 별도
의 인덱스 방법을 제공하는 AIX 데이터 셋을 정의한다.
VSAM은 베이스 클러스터에 레코드가 추가되거나 삭제 또는 변경되는 경우, 이와 연관된 AIX들에 대해서
자동적으로 변경을 수행하여 AIX가 지속적으로 올바르게 베이스 클러스터에 대한 별도의 인덱스를 수행
할 수 있도록 한다.
내부구조상 AIX 데이터 셋도 하나의 KSDS 클러스터 구조를 갖는 데이터 셋이므로 DEFINE AIX에 사용되
는 대부분의 파라미터는 DEFINE CLUSTER의 파라미터와 동일하다.
ALTERNATEINDEX 명령어의 약어로 AIX를 사용한다.
DEFINE ALTERNATEINDEX 명령어 구문은 다음과 같다.
DEFINE ALTERNATEINDEX (NAME(entryname)
RELATE(entryname) {CYLINDERS(primary[ secondary])|
RECORDS(primary[ secondary])|
TRACKS(primary[ secondary])}
{VOLUMES(volser[ volser...])|
DEVICETYPE(devtype)}
[CONTROLINTERVALSIZE(size)]
[ERASE|NOERASE]
[KEYS(length offset|64 0)]
[OWNER(ownerid)]
[RECORDSIZE(average maximum| 4086 32600)]
[TO(date)|FOR(days)]
[UNIQUEKEY|NONUNIQUEKEY]
[UPGRADE|NOUPGRADE])
[DATA ({CYLINDERS(primary[ secondary])|
RECORDS(primary[ secondary])|
TRACKS(primary[ secondary])}
[{VOLUMES(volser[ volser...])|
DEVICETYPE(devtype)}]
[CONTROLINTERVALSIZE(size)]
[ERASE|NOERASE]
[KEYS(length offset)]
[NAME(entryname)]
18 OpenFrame 유틸리티 참조 안내서
[OWNER(ownerid)]
[RECORDSIZE(average maximum)]
[UNIQUEKEY|NONUNIQUEKEY])]
[INDEX ({CYLINDERS(primary[ secondary])|
RECORDS(primary[ secondary])|
TRACKS(primary[ secondary])}
[{VOLUMES(volser[ volser...])|
DEVICETYPE(devtype)}]
[CONTROLINTERVALSIZE(size)]
[NAME(entryname)]
[OWNER(ownerid)])]
[CATALOG(catname)]
DEFINE AIX 명령에 지정할 수 있는 주요 파라미터는 다음과 같다.
설명항목
현재 정의하는 AIX와 연관된 베이스 클러스터 데이터 셋 이름을 지정한다. (약
어: REL)
RELATE(entryname)
베이스 클러스터로 사용할 데이터 셋은 VSAM 데이터 셋 중에서 KSDS와 ESDS
구조의 데이터 셋만 가능하다.
AIX를 정의하기 위해서는 미리 베이스 클러스터로 사용할 데이터 셋을 DEFINE
CLUSTER 명령을 이용해서 만들어야 한다.
베이스 클러스터 데이터 레코드 내에서 AIX로 사용할 키 필드를 입력한다.KEYS(length offset)
생략할 경우 length와 offset 기본값은 다음과 같다.
- length: 64
- offset: 0
AIX 데이터 셋 클러스터 자체의 레코드 크기를 지정한다. (약어: RECSZ)RECORDSIZE
생략할 경우 average와 maximum의 기본값은 다음과 같다.(average maximum)
- average: 4,086
- maximum: 32,600
정의하려는 AIX의 키 값이 데이터 셋 전체에서 유일한지 여부를 지정한다.UNIQUEKEY|
베이스 클러스터인 KSDS 데이터 셋은 항상 UNIQUEKEY만 지정할 수 있지만
AIX를 만드는 경우는 NONUNIQUEKEY도 지정할 수 있다.
NONUNIQUEKEY
NONUNIQUEKEY가 지정되면 하나의 보조키와 여러 개의 기본키로 이루어진
레코드가 AIX 데이터 셋 클러스터 자체의 레코드로 저장된다.
기본값은 NONUNIQUEKEY이다.
제2장 데이터 셋 유틸리티 19
설명항목
(약어: UNQK | NUNQK)
정의하려는 AIX 클러스터의 베이스 클러스터가 변경된 경우 AIX 클러스터의 내
용을 동시에 변경하여 항상 AIX 클러스터의 내용이 베이스 클러스터에 대해 올
바른 보조 인덱스를 유지한다.
UPGRADE|
NOUPGRADE
기본값은 UPGRADE이다.
(약어: UPG | NUPG)
엔트리 타입이 CLUSTER이거나 AIX인 데이터 셋을 카탈로그로부터 삭제할 때
컴포넌트도 함께 삭제할지를 결정한다.
ERASE|
NOERASE
- ERASE: 엔트리를 삭제할 때 그에 따른 컴포넌트도 함께 삭제한다. (약어: ERAS)
- NOERASE: 엔트리만 삭제하고 그에 따른 컴포넌트는 삭제하지 않는다. (약어:
NERAS)
OpenFrame에서는 엔트리를 삭제할 때 컴포넌트도 같이 삭제하고 있다. 따라서
NOERASE 옵션을 지정해도 ERASE 옵션과 동일하게 동작한다.
다음은 VSAM.KSDS1에 대해 보조 인덱스 VSAM.AIX1을 생성하는 예이다.
보조 인덱스 VSAM.AIX1 레코드의 오프셋 44에서 시작되는 7 Byte 부분을 보조키로 한다. 보조키는 유일
하지 않으며 베이스 클러스터가 변경될 때 자동적으로 업그레이드된다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//DEFAIX EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE AIX (NAME(VSAM.AIX1) -
RELATE(VSAM.KSDS1) -
UPGRADE -
KEYS(7 44) -
VOL(VOL100))
/*
//
DEFINE CLUSTER
DEFINE CLUSTER 명령을 사용해서 VSAM 데이터 셋을 정의하며, 필수적인 속성과 부가적인 속성들을
함께 지정할 수 있다.
CLUSTER 명령어의 약어로 CL을 사용할 수 있다.
DEFINE CLUSTER 명령어 구문은 다음과 같다.
20 OpenFrame 유틸리티 참조 안내서
DEFINE CLUSTER (NAME(entryname)
{CYLINDERS(primary[ secondary])|
RECORDS(primary[ secondary])|
TRACKS(primary[ secondary])}
{VOLUMES(volser[ volser...])|
DEVICETYPE(devtype)}
[CONTROLINTERVALSIZE(size)]
[ERASE|NOERASE]
[INDEXED|NONINDEXED|NUMBERED]
[KEYS(length offset| 64 0]
[OWNER(ownerid)]
[RECORDSIZE(average maximum)]
[SPANNED|NONSPANNED]
[TO(date)|FOR(days)]
[DATA({CYLINDERS(primary[ secondary])|
RECORDS(primary[ secondary])|
TRACKS(primary[ secondary])}
[{VOLUMES(volser[ volser...])|
DEVICETYPE(devtype)}]
[CONTROLINTERVALSIZE(size)]
[ERASE|NOERASE]
[KEYS(length offset)]
[NAME(entryname)]
[OWNER(ownerid)]
[RECORDSIZE(average maximum)]
[SPANNED|NONSPANNED]
[INDEX({CYLINDERS(primary[ secondary])|
RECORDS(primary[ secondary])|
TRACKS(primary[ secondary])}
[{VOLUMES(volser[ volser...])|
DEVICETYPE(devtype)}]
[CONTROLINTERVALSIZE(size)]
[NAME(entryname)]
[OWNER(ownerid)]
[CATALOG(catname)]
DEFINE CLUSTER 명령에 지정할 수 있는 주요 파라미터는 다음과 같다.
설명항목
데이터 셋이 위치할 볼륨을 지정한다. (약어: VOL)VOLUMES(volser[
volser...])
VSAM 데이터 셋의 레코드를 관리하기 위해 사용할 블록의 크기를 지정한다. (약
어: CISZ 또는 CNVSZ)
CONTROLINTERVAL
SIZE(size)
지정하지 않으면 다른 파라미터들의 값을 기반으로 VSAM이 내부적으로 값을
정하게 된다.
제2장 데이터 셋 유틸리티 21
설명항목
SPANNED 파라미터를 지정하지 않은 경우, CONTROLINTERVALSIZE는 최대
길이의 레코드를 충분히 포함할 만큼 크게 지정해야 한다.
KSDS, ESDS, RRDS 등 데이터 셋의 구조를 지정한다.INDEXED|
VRDS의 경우는 NUMBERED를 지정하고 RECORDSIZE를 가변길이로 지정한
다.
NONINDEXED|
NUMBERED
기본값은 INDEXED이다.
(약어: IXD | NIXD | NUMD)
KSDS 데이터 레코드의 키 필드 정보를 입력한다.KEYS(length offset)
키 필드를 입력할 경우 오프 셋과 길이의 합이 가장 짧은 레코드 길이를 초과해
서는 안된다. 키 길이는 1~255 Byte 범위 내에서 지정할 수 있다.
생략할 경우 length와 offset의 기본값은 다음과 같다.
- length: 64
- offset: 0
데이터당 레코드의 평균 길이와 최대 길이를 지정한다. (약어: RECSZ)RECORDSIZE
평균 길이와 최대 길이 값을 다른 값으로 지정하면 가변길이 레코드임을 의미한
다.
(average maximum)
NONSPANNED 경우 기본값은 다음과 같다.
- average: 4,089
- maximum: 4,089
SPANNED 경우 기본값은 다음과 같다.
- average: 4,086
- maximum: 32,600
이 파라미터가 정의된 데이터 셋은 CONTROLINTERVALSIZE보다 더 긴 레코
드를 저장할 수 있다.
SPANNED|
NONSPANNED
기본값은 NONSPANNED이다.
NUMBERED 구조의 데이터 셋인 RRDS와 VRDS에 대해서는 이 파라미터를 사
용할 수 없다.
(약어: SPND | NSPND)
22 OpenFrame 유틸리티 참조 안내서
설명항목
엔트리 타입이 CLUSTER이거나 AIX인 데이터 셋을 카탈로그로부터 삭제할 때
컴포넌트도 함께 삭제할지를 결정한다.
ERASE|
NOERASE
- ERASE: 엔트리를 삭제할 때 그에 따른 컴포넌트도 함께 삭제한다. (약어: ERAS)
- NOERASE: 엔트리만 삭제하고 그에 따른 컴포넌트는 삭제하지 않는다. (약어:
NERAS)
OpenFrame에서는 엔트리를 삭제할 때 컴포넌트도 같이 삭제하고 있다. 따라서
NOERASE 옵션을 지정해도 ERASE 옵션과 동일하게 동작한다.
다음은 VSAM.KSDS1이라는 INDEXED 구조의 데이터 셋을 생성하는 예이다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//DEFCLUS EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER (NAME(VSAM.KSDS1) -
INDEXED -
KEYS(10 0) -
VOL(VOL100)) -
INDEX (NAME (VSAM.KSDS1.I)) -
DATA (NAME(VSAM.KSDS1.D) -
CISZ(4096) -
RECSZ(350 350))
/*
//
VSAM.KSDS1에 저장되는 레코드는 350Byte의 고정길이를 갖고 키 필드는 레코드 상에서 맨 앞의 10Byte
에 위치하며, VSAM.KSDS1 데이터 셋을 구성하는 인덱스와 데이터 컴포넌트의 이름을 각각 명시적으로
지정하고 있다.
DEFINE GDG(Generation Data Group)
GDG에 해당하는 카탈로그 엔트리를 카탈로그에 생성한다.
GDG의 한 세대(Generation)에 해당하는 Non-VSAM 데이터 셋 GDS와 달리 GDG에 해당하는 실제 데이
터 셋은 존재하지 않는다. GDG 카탈로그 엔트리는 추후 해당 GDG 그룹에 속하게 될 여러 GDS를 관리하
기 위한 정보만을 갖는 카탈로그 엔트리이다.
DEFINE GDG를 수행한 결과로는 아무런 데이터 셋도 생성되지 않고, 단순히 해당 GDG 그룹을 관리하기
위한 카탈로그 엔트리가 카탈로그에 추가된다.
GENERATIONDATAGROUP 명령어의 약어로 GDG를 사용할 수 있다.
제2장 데이터 셋 유틸리티 23
DEFINE GENERATIONDATAGROUP 명령어 구문은 다음과 같다.
DEFINE GENERATIONDATAGROUP (NAME(entryname)
LIMIT(limit)
[EMPTY|NOEMPTY]
[OWNER(ownerid)]
[SCRATCH|NOSCRATCH]
[TO(date)|FOR(days)])
[CATALOG(catname)]
설명항목
생성할 GDG 베이스의 이름을 지정한다.NAME(entryname)
생성하는 GDG에 몇 개까지의 GDS 멤버를 포함할 수 있는지 그 최대값을 지정
한다. 예를 들어 100이라고 지정하면 100개를 초과하는 GDS를 생성할 수 없다.
GDG 멤버는 1부터 255까지 생성할 수 있다. (약어: LIM)
LIMIT(limit)
GDG 베이스가 GDS 멤버를 포함할 수 있는 최대값에 도달했을 경우 전체 GDS
와 GDG 베이스 간의 연관(association)을 끊으려면(rolled off status) EMPTY를
지정한다.
EMPTY|
NOEMPTY
NOEMPTY를 지정하면 가장 오래된 GDS만 연관이 끊기고 새로운 GDS를 베이
스에 포함시킨다. GDG 베이스와 연관이 끊어진 GDS는 단순한 Non-VSAM 데
이터 셋으로 간주된다.
기본값은 NOEMPTY이다.
OpenFrame에서는 NOEMPTY 기능만 지원하고 있다.
(약어: EMP | NEMP)
생성할 GDG 베이스의 소유자를 명시적으로 지정한다.OWNER(ownerid)
GDG 베이스에 포함될 수 있는 GDS 멤버 한계에 도달한 경우 EMPTY와
NOEMPTY 속성에 따라서 전체 혹은 가장 오래된 GDS 데이터 셋과 GDG 베이
SCRATCH|
NOSCRATCH스간의 연관이 끊어질 때(rolled off) 해당 GDS가 사용하는 데이터를 지울지
(SCRATCH) 아니면 그냥 둘지(NOSCRATCH)를 지정한다.
기본값은 NOSCRATCH이다.
OpenFrame에서는 SCRATCH 기능만 지원하고 있다. GDS가 카탈로그로부터
등록을 해제하면 볼륨에 있는 데이터 셋도 함께 삭제한다.
(약어: SCR | NSCR)
GDG 그룹의 유효일을 설정한다.TO(date)|
- TO: 유효일의 마지막 날짜를 율리우스 날짜 형태로 지정한다. (2006년 1월 1일
은 2006001로 지정)
FOR(days)
24 OpenFrame 유틸리티 참조 안내서
설명항목
- FOR: 날짜수를 지정한다. (30을 지정할 경우 오늘부터 30일 간을 의미)
생성할 GDG 베이스가 등록될 카탈로그의 이름을 지정한다. (약어: CAT)CATALOG(catname)
다음은 GDS 멤버를 100개까지 포함할 수 있는 TEST.GDG1이라는 이름의 GDG 베이스를 생성하고 2006
년 12월 31일까지를 GDG 베이스의 유효기간으로 설정하여 TESTCAT이라는 카탈로그에 등록하는 예이
다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//DEFGDG EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE GDG (NAME(TEST.GDG1) -
LIMIT(100) -
TO(2006365)) -
CATALOG(TESTCAT)
/*
//
DEFINE NONVSAM
일반적인 PS(Physical Sequential) 타입의 Non-VSAM 데이터 셋을 생성하고 만들어진 데이터 셋을 카탈
로그에 등록한다.
NONVSAM 명령어의 약어로 NVSAM를 사용할 수 있다.
참고
GDG에 속하는 하나의 GDS는 Non-VSAM 데이터 셋이기 때문에 DEFINE NONVSAM 명령을 사용
해서 GDS를 생성할 수 있다.
DEFINE NONVSAM 명령어 구문은 다음과 같다.
DEFINE NONVSAM (NAME(entryname)
[DEVICETYPE(devtype[ devtype ...])]
[VOLUMES(volser[ volser ...])]
[OWNER(ownerid)]
[TO(date)|FOR(days)])
[CATALOG(catname)]
설명항목
만들어질 Non-VSAM 데이터 셋의 이름을 지정한다.NAME(entryname)
제2장 데이터 셋 유틸리티 25
설명항목
GDG에 속하는 GDS를 생성하기 위해서는 GDGname.GxxxxVyy의 형태로 entry
name을 지정해야 한다. 예를 들면 TEST.GDG1.G0001V00에서 Gxxxx는 세대
번호이고, Vyy는 버전번호이다.
이름 규칙에 대한 자세한 내용은 “OpenFrame 데이터 셋 안내서”를 참고한다.
Non-VSAM 데이터 셋이 저장될 볼륨의 디바이스 타입을 지정한다. 3380, 3390,
3480과 같은 디바이스 타입을 지정해야 한다. SYSDA와 같은 에소테릭 디바이
스 그룹(esoteric device group)은 사용할 수 없다. (약어: DEVT)
DEVICETYPE
(devtype[ devtype...])
Non-VSAM 데이터 셋을 저장할 볼륨의 볼륨 일련번호를 지정한다. (약어: VOL)VOLUMES
(volser[ volser...])
Non-VSAM 데이터 셋의 소유자를 명시적으로 지정한다.OWNER(ownerid)
Non-VSAM 데이터 셋의 유효일을 설정한다.TO(date)|
- TO: 유효일의 마지막 날짜를 율리우스 날짜 형태로 지정한다. (2006년 1월 1일
은 2006001로 지정)
FOR(days)
- FOR: 날짜수를 지정한다. (30을 지정할 경우 오늘부터 30일간을 의미)
Non-VSAM 데이터 셋의 카탈로그 엔트리 정보가 등록될 카탈로그를 지정한다.
(약어: CAT)
CATALOG(catname)
다음은 Non-VSAM 데이터 셋인 TEST.NVSAM1을 생성하고 TESTCAT 카탈로그에 등록하는 예이다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//DEFNVS EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE NONVSAM (NAME(TEST.NVSAM1) -
VOLUMES(100000)) -
CATALOG(TESTCAT)
/*
//
DEFINE PATH
DEFINE PATH 명령을 통해서 베이스 클러스터에 대한 직접적인 접근 경로를 정의하거나 보조 인덱스를
경유하여 베이스 클러스터에 접근하는 간접적인 접근 경로를 정의한다.
DEFINE PATH 명령어 구문은 다음과 같다.
DEFINE PATH (NAME(entryname)
[PATHENTRY(entryname)]
26 OpenFrame 유틸리티 참조 안내서
[OWNER(ownerid)]
[TO(date)|FOR(days)]
[UPDATE|NOUPDATE]
[CATALOG(catname)]
설명항목
DEFINE PATH 문으로 현재 정의하는 PATH의 이름을 지정한다.NAME(entryname)
PATH가 AIX와 베이스 클러스터의 쌍으로 이루어지는 경우에는 AIX 데이터 셋
의 이름을 지정한다.
PATHENTRY(entry
name)
베이스 클러스터 자체에 대한 PATH를 정의하는 경우라면 베이스 클러스터 데
이터 셋의 이름을 지정하며 베이스 클러스터 데이터 셋 본래의 인덱스 방법을 지
칭하는 단순한 별칭으로 생각할 수 있다. 하지만 하나의 베이스 클러스터에 여러
개의 PATH를 정의할 수 있기 때문에 실제로 액세스할 때 적용되는 속성을 달리
지정하는 용도로 사용할 수 있다.
접근 경로의 소유자를 명시적으로 지정한다.OWNER(ownerid)
접근 경로의 유효일을 설정한다.TO(date)|
- TO: 유효일의 마지막 날짜를 율리우스 날짜 형태로 지정한다. (2006년 1월 1일
은 2006001로 지정)
FOR(days)
- FOR: 날짜수를 지정한다. (30을 지정할 경우 오늘부터 30일간을 의미)
- NOUPDATE: 해당 PATH를 통해서 베이스 클러스터 데이터 셋을 변경한 경우
변경된 베이스 클러스터의 업그레이드 셋에 대한 자동적인 변경 작업이 수행되
지 않는다.
UPDATE|
NOUPDATE
- UPDATE: 해당 PATH를 통해서 베이스 클러스터 데이터 셋을 변경한 경우 변
경된 베이스 클러스터의 업그레이드 셋에 대한 자동적인 변경 작업이 수행된다.
기본값은 UPDATE이다.
(약어: UPD | NUPD)
다음은 보조 인덱스 VSAM.AIX1을 경유하여 VSAM.AIX1의 베이스 클러스터에 접근하는 접근경로(PATH)
인 VSAM.PATH1을 생성하는 예이다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//DEFPATH EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE PATH (NAME(VSAM.PATH1) -
PATHENTRY(VSAM.AIX1) -
UPDATE)
제2장 데이터 셋 유틸리티 27
/*
//
UPDATE 파라미터가 지정되어 있으므로 이 접근경로를 사용하여 베이스 클러스터의 내용을 변경하는 경
우 VSAM.AIX1 이외의 다른 보조 인덱스에 대해서도 업그레이드 처리가 일어난다.
다음은 보조 인덱스를 경유하지 않고 직접 베이스 클러스터에 접근하는 접근경로 VSAM.PATH2를 정의
하는 예이다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//DEFPATH EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE PATH (NAME(VSAM.PATH2) -
PATHENTRY(VSAM.KSDS1) -
UPDATE)
/*
//
UPDATE 파라미터가 지정되어 있으므로 VSAM.KSDS1을 베이스 클러스터로 하는 보조 인덱스가 존재하
는 경우 VSAM.PATH2를 이용하여 베이스 클러스터의 내용이 변경되는 경우 업그레이드 처리가 일어난
다.
참고
DEFINE PATH에 관한 자세한 내용은 “Tibero TSAM 안내서”를 참고한다.
DEFINE USERCATALOG/MASTERCATALOG
시스템에서 제공하는 하나의 마스터 카탈로그 외에 여러 개의 사용자 카탈로그를 별도로 사용할 수 있다.
모든 데이터 셋에 관한 메타정보를 마스터 카탈로그에 모두 등록하는 경우 마스터 카탈로그의 크기가 필
요 이상으로 커지게 되므로 시스템의 성능저하를 초래할 수 있다.
DEFINE USERCATALOG 명령으로 시스템 마스터 카탈로그와 비슷한 용도로 사용할 수 있는 사용자 카
탈로그를 생성할 수 있다. 이는 마스터 카탈로그의 서브 카탈로그로 생각할 수 있다.
생성된 사용자 카탈로그에 대한 정보는 다시 마스터 카탈로그에 저장된다. 사용자 카탈로그의 서브 카탈
로그로 또 다른 사용자 카탈로그를 생성하는 것은 불가능하다. 사용자 카탈로그는 한 레벨로만 생성할 수
있으며, 모든 사용자 카탈로그는 마스터 카탈로그에만 등록되고, 다른 사용자 카탈로그에는 등록될 수 없
다. 일반적으로 사용자 카탈로그는 사용자 별로 생성하거나 관련 부서 또는 업무별로 생성한다.
MainFrame에서는 타입 1과 타입 2 두 가지 카탈로그 타입이 존재한다. 하지만 OpenFrame은 타입 2 카탈
로그만 지원하기 때문에, 타입 1 관련 유틸리티 명령어 또는 파라미터 등을 지원하지 않는다. MainFrame
에서 타입 1 카탈로그를 사용하고 있을 때에는 CNVTCAT 명령어를 사용하여 타입 1 카탈로그를 타입 2
카탈로그로 변환하여 OpenFrame으로 이관해야 한다.
28 OpenFrame 유틸리티 참조 안내서
OpenFrame에서는 마스터 카탈로그를 생성하기 위해서 JSCVSUT의 DEFINE MASTERCATALOG 명령
을 사용하지 않고, OpenFrame에서 제공되는 mascat이라는 툴을 사용한다. 반면 사용자 카탈로그를 추가
로 생성하는 경우에는 JSCVSUT의 DEFINE USERCATALOG 명령을 사용한다.
USERCATALOG 명령어의 약어로 UCAT를 사용할 수 있다.
참고
마스터 카탈로그 생성과 관련한 자세한 내용은 "OpenFrame 툴 참조 안내서”의 “mascat”을 참고한
다.
DEFINE USERCATALOG 명령어 구문은 다음과 같다.
DEFINE USERCATALOG (NAME(entryname)
{CYLINDERS(primary[ secondary])|
RECORDS(primary[ secondary])|
TRACKS(primary[ secondary])}
VOLUME(volser)
[CONTROLINTERVALSIZE(size)]
[OWNER(ownerid)]
[TO(date)|FOR(days)])
[DATA ({CYLINDERS(primary[ secondary])|
RECORDS(primary[ secondary])|
TRACKS(primary[ secondary])}
[CONTROLINTERVALSIZE(size)])]
[INDEX ({CYLINDERS(primary[ secondary])|
RECORDS(primary[ secondary])|
TRACKS(primary[ secondary])}
[CONTROLINTERVALSIZE(size)])]
[CATALOG(mastercatname)]
DEFINE USERCATALOG 명령의 주요 파라미터는 다음과 같다.
설명항목
생성할 사용자 카탈로그의 이름을 지정한다.NAME(entryname)
사용자 카탈로그가 저장될 볼륨을 지정한다. (약어: VOL)VOLUME(volser)
생성된 사용자 카탈로그가 등록될 마스터 카탈로그의 이름을 지정한다. 생략해
도 시스템의 마스터 카탈로그에 자동으로 등록된다. (약어: CAT)
CATALOG(mastercat
name)
참고
본 안내서에서 언급되지 않은 항목에 대한 설명은 Hitachi의 "VOS3 VSAM Utility"를 참고한다.
제2장 데이터 셋 유틸리티 29
DELETE
VSAM 데이터 셋과 Non-VSAM 데이터 셋 그리고 이외에 카탈로그된 데이터 셋 항목을 제거하기 위해
DELETE 명령을 사용한다.
DELETE 명령은 이미 존재하는 항목을 지우는 역할을 하기 때문에 많은 파라미터를 요구하지 않는다. 제
거하려는 항목의 이름과 해당 항목의 카탈로그 엔트리 타입만을 필요로 한다.
DELETE 명령어의 약어로 DEL을 사용할 수 있다.
PDS 멤버에 대한 DELETE 구문은 지원하고 있지 않다. PDS 멤버명을 지정해도 PDS 전체를 삭제한다.
DELETE 명령어 구문은 다음과 같다.
DELETE (entryname[ entryname...])
[ALIAS|
ALTERNATEINDEX|
CLUSTER|
GENERATIONDATAGROUP|
NONVSAM|
PATH|
USERCATALOG]
[ERASE|NOERASE]
[CATALOG(catname)]
설명항목
제거할 데이터 셋이나 카탈로그 엔트리의 이름을 지정한다.entryname
괄호 안에 여러 개의 이름을 지정하면 한번의 명령으로 다수의 엔트리를 제
거할 수 있다.
ALIAS는 ALIAS 엔트리 타입이다.ALIAS|
제거할 카탈로그 엔트리의 엔트리 타입을 지정한다.ALTERNATEINDEX|
엔트리 타입 지정은 필수적이지 않지만, 엔트리 타입을 지정하면 실수로 이
름이 동일한 의도하지 않은 항목을 제거하는 실수를 방지할 수 있다.
CLUSTER|
GENERATIONDATA
GROUP| AIX, CLUSTER, PATH, TRUENAME은 VSAM 데이터 셋의 엔트리 타입이고
나머지는 Non-VSAM 데이터 셋의 엔트리 타입이다.NONVSAM|
(약어: ALIAS | AIX | CL | GDG | NVSAM | PATH | UCAT)PATH|
USERCATALOG
엔트리 타입이 CLUSTER이거나 AIX인 데이터 셋을 카탈로그로부터 삭제할
때 컴포넌트도 함께 삭제할지를 결정한다.
ERASE|
NOERASE
30 OpenFrame 유틸리티 참조 안내서
설명항목
- ERASE: 엔트리를 삭제할 경우 그에 따른 컴포넌트도 함께 삭제한다. (약어:
ERAS)
- NOERASE: 엔트리만 삭제하고 그에 따른 컴포넌트는 삭제하지 않는다. (약
어: NERAS)
OpenFrame에서는 엔트리를 삭제할 경우 컴포넌트도 같이 삭제하고 있다.
따라서 NOERASE 옵션을 지정해도 ERASE 옵션과 동일하게 동작한다.
삭제할 카탈로그 엔트리 정보가 등록되어 있는 카탈로그를 지정한다. (약어:
CAT)
CATALOG(catname)
다음은 VSAM 데이터 셋 엔트리 타입의 VSAM.KSDS1과 VSAM.KSDS2를 지정한 사용기간에 관계없이
삭제하는 예이다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//DELCLUS EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE (VSAM.KSDS1 VSAM.KSDS2) -
CLUSTER -
ERASE
/*
//
EXPORT
EXPORT 명령을 이용하여 VSAM CLUSTER나 ALTERNATE INDEX를 외부로 이식 가능한 데이터 셋으
로 반출할 수 있다. 카탈로그 데이터 셋 자체를 백업하기 위해서 사용된다.
EXPORT 명령어의 약어로 EXP을 사용할 수 있다.
EXPORT 명령어 구문은 다음과 같다.
EXPORT entryname {OUTFILE(ddname)|OUTDATASET(entryname)}
[INFILE(ddname)]
설명항목
EXPORT할 카탈로그 엔트리의 entryname을 지정한다.entryname
EXPORT 결과로 생성될 데이터 셋을 지정한다.OUTFILE(ddname)|
EXPORT 결과로 생성된 데이터 셋을 카탈로그 상에 새로 만들기를 원하거나
이미 카탈로그 되어있는 경우는 entryname을 사용하고, 실행환경에서
OUTDATASET(entry
name)
제2장 데이터 셋 유틸리티 31
설명항목
JSCVSUT를 호출하기 전에 미리 할당되어있는 데이터 셋에 생성되기를 원
하는 경우는 ddname을 사용한다.
(약어: OFILE | ODS)
EXPORT할 데이터 셋을 지정한다. (약어: IFILE)INFILE(ddname)
INFILE(ddname)으로 데이터 셋을 지정하는 경우 ddname은 JSCVSUT를 호
출한 JCL의 DD 문을 통해 할당된 ddname을 지정해야 한다.
엔트리 타입이 CLUSTER이거나 AIX인 데이터 셋을 카탈로그로부터 삭제할
때 컴포넌트도 함께 삭제할지를 결정한다.
ERASE|
NOERASE
- ERASE: 엔트리를 삭제할 경우 그에 따른 컴포넌트도 함께 삭제한다. (약어:
ERAS)
- NOERASE: 엔트리만 삭제하고 그에 따른 컴포넌트는 삭제하지 않는다. (약
어: NERAS)
OpenFrame에서는 엔트리를 삭제할 경우 컴포넌트도 같이 삭제하고 있다.
따라서 NOERASE 옵션을 지정해도 ERASE 옵션과 동일하게 동작한다.
다음은 카탈로그 TESTCAT을 TESTCAT.BACKUP으로 EXPORT하는 예이다. 카탈로그의 내용을 반출하
여 백업한다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//BACKCAT EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//BACK DD DSN=TESTCAT.BACKUP,DISP=OLD
//SYSIN DD *
EXPORT TESTCAT -
OUTFILE(BACK)
/*
//
EXTRACT
EXTRACT 명령은 CHECKCAT 명령(데이터 셋의 카탈로그 정보와 VTOC 정보 비교)의 처리 대상이 되는
VSAM 또는 Non-VSAM 데이터 셋의 카탈로그 정보 및 VTOC 정보를 추출한다.
추출해낸 정보는 지정한 데이터 셋에 출력한다. 이 출력 데이터 셋은 CHECKCAT 명령어(데이터 셋의 카
탈로그 정보와 VTOC 정보 비교)의 입력 데이터 셋이 된다.
EXTRACT 명령어 구문은 다음과 같다.
32 OpenFrame 유틸리티 참조 안내서
EXTRACT {CATFILE(ddname[ ddname ...])|
VOLFILE(ddname[ ddname ...])}
OUTFILE(ddname)
설명항목
- CATFILE: CHECKCAT 명령어의 처리 대상이 되는 VSAM 또는 Non-VSAM
데이터 셋의 카탈로그 정보를 추출하는 경우, 카탈로그를 정의한 DD명을 지
정한다. (약어: CFILE)
CATFILE(ddname[
ddname ...])|
VOLFILE(ddname[
ddname ...]) - VOLFILE: CHECKCAT 명령어의 처리 대상이 되는 VSAM 또는 Non-VSAM
데이터 셋의 VTOC 정보를 추출하는 경우, VTOC을 정의한 DD명을 지정한
다. (약어: VFILE)
추출해낸 VSAM 또는 Non-VSAM 데이터 셋의 카탈로그 또는 VTOC 정보를
저장할 출력 데이터 셋의 DD명을 지정한다. (약어: OFILE)
OUTFILE(ddname)
다음은 사용자 카탈로그 TESTCAT1과 TESTCAT2에 존재하는 데이터 엔트리의 카탈로그 정보를
CAT.EXTRACT 데이터 셋으로 출력하는 예이다.
//EXTRACT JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
// EXEC PGM=JSCVSUT
//CAT001 DD DSN=TESTCAT1,DISP=OLD
//CAT002 DD DSN=TESTCAT2,DISP=OLD
//SYSPRINT DD SYSOUT=*
//EXOUT DD DSN=CAT.EXTRACT,DISP=OLD
//SYSIN DD *
EXTRACT CATFILE(CAT001 CAT002) -
OUTFILE(EXOUT)
/*
//
IMPORT
IMPORT 명령을 이용하면 EXPORT 명령을 사용해서 생성한 백업이나 외부의 이식 가능한 데이터 셋으
로부터 다시 데이터 셋을 복원하거나 새로 생성할 수 있다.
IMPORT 명령어의 약어로 IMP를 사용할 수 있다.
IMPORT 명령어 구문은 다음과 같다.
IMPORT {INFILE(ddname)|INDATASET(entryname)}
{OUTFILE(ddname)|OUTDATASET(entryname)}
[OBJECTS((entryname
[NEWNAME(newname)]
[VOLUMES(volser[ volser...])])
제2장 데이터 셋 유틸리티 33
[(entryname...)...])]
[CATALOG(catname)]
설명항목
IMPORT할 소스 데이터 셋을 지정한다.INFILE(ddname)|
JSCVSUT 호출 전에 실행환경에서 미리 할당된 데이터 셋을 사용하려는 경
우에는 ddname을 지정하고 JSCVSUT 내부적으로 할당하려는 경우에는
entryname을 사용한다.
INDATASET(entryname)
(약어: IFILE | IDS)
JSCVSUT 호출 전에 실행환경에서 미리 할당된 데이터 셋을 사용하려는 경
우에는 ddname을 지정하고 JSCVSUT 내부적으로 할당하려는 경우에는
entryname을 사용한다.
OUTFILE(ddname)|
OUTDATASET(entry
name)
(약어: OFILE | ODS)
IMPORT 작업을 수행하는 과정에서 부수적으로 IMPORT 원본 데이터 셋에
기록된 정보 중에서 일부를 변경하는 작업을 수행할 수 있다.
OBJECTS(entryname ...)
변경하고자 하는 entryname과 적용할 새로운 속성을 지정한다. 여러 개의
entryname에 대해서 반복적으로 지정할 수 있다. (약어: OBJ)
엔트리 타입이 CLUSTER 이거나 AIX인 데이터 셋을 카탈로그로부터 삭제할
때 컴포넌트도 함께 삭제할지를 결정한다.
ERASE|
NOERASE
- ERASE: 엔트리를 삭제할 경우 그에 따른 컴포넌트도 함께 삭제한다. (약어:
ERAS)
- NOERASE: 엔트리만 삭제하고 그에 따른 컴포넌트는 삭제하지 않는다. (약
어: NERAS)
OpenFrame에서는 엔트리를 삭제할 경우 컴포넌트도 같이 삭제하고 있다.
따라서 NOERASE 옵션을 지정해도 ERASE 옵션과 동일하게 동작한다.
IMPORT 과정 중에 카탈로깅이 필요한 경우 사용할 카탈로그를 지정한다.
(약어: CAT)
CATALOG(catname)
다음은 TESTCAT.BACKUP이라는 백업 데이터 셋의 내용을 카탈로그 TESTCAT으로 IMPORT하는 예이
다. TESTCAT.BACKUP에 저장된 내용을 이용하여 카탈로그 TESTCAT을 복원한다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//IMPCAT EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//BACK DD DSN=TESTCAT.BACKUP,DISP=OLD
//SYSIN DD *
34 OpenFrame 유틸리티 참조 안내서
IMPORT INFILE(BACK) -
OUTDATASET(TESTCAT)
/*
//
LISTCAT
LISTCAT 명령을 사용해서 카탈로그에 정의된 데이터 셋에 관한 다양한 정보를 출력할 수 있다.
다음과 같은 그룹으로 관련 정보를 정리해서 보여준다.
● 엔트리 객체의 속성
● 생성시간, 변경시간, 만료시간 정보
● 보호(protection) 관련 정보
● 데이터 셋 액세스 통계 정보
● 저장공간 할당 정보
● 데이터 셋의 구조에 관한 정보
LISTCAT 명령어 구문은 다음과 같다.
LISTCAT [ALIAS]
[ALTERNATEINDEX]
[CLUSTER]
[DATA]
[GENERATIONDATAGROUP]
[INDEX]
[NONVSAM]
[PATH]
[USERCATALOG]
[{ENTRIES|DSNAME|DATASET}(entryname[ entryname...])|LEVEL(level)]
[NAME|HISTORY|VOLUME|ALLOCATION|ALL]
[CATALOG(catname)]
설명항목
지정된 종류의 카탈로그 엔트리에 대해서만 LISTCAT 정보를 출력하도록 하
기 위한 파라미터이다.
ALIAS
ALTERNATEINDEX,
예를 들어 LISTCAT CLUSTER라고 지정하는 경우 카탈로그 엔트리 타입이
CLUSTER인 엔트리에 대한 정보만 출력한다.CLUSTER,
DATA,
제2장 데이터 셋 유틸리티 35
설명항목
2개 이상의 엔트리 타입을 지정하는 것도 가능하다. LISTCAT DATA INDEX
라고 지정하면 카탈로그 엔트리 타입이 DATA이거나 INDEX인 엔트리에 대
한 정보만 출력된다.
GENERATIONDATA
GROUP,
INDEX,
파라미터를 지정하지 않는 경우 카탈로그 엔트리 타입에 대한 필터링을 하지
않고 모든 타입의 엔트리 정보를 모두 출력한다.NONVSAM,
PATH,이와는 별도로 ENTRIES 파라미터를 지정하는 경우 엔트리 타입이 일치하더
라도 엔트리 이름이 ENTRIES 파라미터에 지정된 이름을 만족하지 않는 엔
트리들에 대한 정보는 출력되지 않는다.
USERCATALOG
다음은 각 파라미터의 약어이다.
- ALTERNATEINDEX 약어: AIX
- CLUSTER 약어: CL
- GENERATIONDATAGROUP 약어: GDG
- INDEX 약어: IX
- NONVSAM 약어: NVSAM
- USERCATALOG 약어: UCAT
LISTCAT 명령의 대상이 되는 카탈로그 엔트리명을 지정한다.{EN
TRIES|DSNAME|DATASET}- ENTRIES, DSNAME, DATASET: 카탈로그에 존재하는 엔트리 이름 중에서
지정된 entryname과 이름이 일치하고 세그먼트 개수도 일치하는 이름만 명
령의 대상으로 지정된다. (약어: ENT, DS)
(entryname[ entry
name...])|
- LEVEL: 카탈로그에 존재하는 엔트리 이름 중에서 지정된 entryname과 이
름의 앞부분이 일치하는 이름이 명령의 대상으로 지정된다. 사용자가 지정한
LEVEL(level)|
ALLENTRIESentryname의 세그먼트 개수보다 많은 세그먼트 개수를 갖는 이름들도 명령
의 대상으로 지정된다. (약어: LVL)
ENTRIES와 LEVEL의 사용 예는 다음과 같다.
카탈로그가 다음의 엔트리 이름들을 가지고 있는 경우
1. A.A.B
2. A.B.B
3. A.B.B.C
4. A.B.B.C.C
5. A.C.C
6. A.D
36 OpenFrame 유틸리티 참조 안내서
설명항목
7. A.E
8. A
ENTRIES(A.*)를 지정한 경우, 6, 7이 명령의 대상으로 선택된다.
ENTRIES(A.*.B)를 지정한 경우, 1, 2가 명령의 대상으로 선택된다.
LEVEL(A.*.B)를 지정한 경우, 1, 2, 3, 4가 명령의 대상으로 선택된다.
LEVEL(A)를 지정한 경우, 1,2,3,4,5,6,7 이 모두 명령의 대상으로 선택된다.
*는 해당 세그먼트의 모든 이름과 일치한다.
- ALLENTRIES: 카탈로그에 존재하는 모든 엔트리에 대한 리스트를 출력할
때 사용한다. (약어: ALLENT)
위의 엔트리 타입 필터 및 ENTRIES 파라미터로 지정되는 엔트리 이름 조건
을 만족하는 카탈로그 엔트리에 대한 정보를 출력하는데 있어서 얼마나 자세
한 레벨의 정보까지 출력할지를 지정한다.
NAME|
HISTORY|
VOLUME|순서대로 NAME을 지정하면 가장 기본적인 정보만이 출력되고 ALL을 지정
하면 모든 해당 엔트리에 대한 정보가 출력된다.ALLOCATION|
다음은 각 파라미터의 약어이다.ALL
- HISTORY 약어: HIST
- VOLUME 약어: VOL
- ALLOCATION 약어: ALLOC
LISTCAT 명령의 대상이 카탈로그의 이름을 지정한다. 위의 ENTRIES나
LEVEL로 지정하는 entryname은 여기에서 지정하는 카탈로그에서 검색된
다. (약어: CAT)
CATALOG(catname)
다음은 VSAM.KSDS1의 모든 엔트리에 대한 정보를 출력하는 예이다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//LISTC EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
LISTCAT ENTRIES(VSAM.KSDS1) ALL
/*
//
다음은 앞의 LISTCAT 명령을 실행한 결과로 출력되는 내용(SYSPRINT)이다.
제2장 데이터 셋 유틸리티 37
CLUSTER ------------- VSAM.KSDS1
HISTORY
CREATION -------------- (NULL) DATASET-OWNER ----------- (EMPTY)
EXPIRATION ------------ (EMPTY) RELEASE ------------------- 1
VSAM QUIESCED --------- (NO)
PROTECTION-PSWD---------- (NULL)
ASSOCIATIONS
DATA ------------ VSAM.KSDS1.D
INDEX ----------- VSAM.KSDS1.I
DATA ---------------- VSAM.KSDS1.D
HISTORY
CREATION --------------- (NULL) DATASET-OWNER ---------- (EMPTY)
EXPIRATION ------------- (EMPTY) RELEASE -------------------- 1
PROTECTION-PSWD ---------- (NULL)
ASSOCIATION
CLUSTER ----------- VSAM.KSDS1
ATTRIBUTES
AVGLRECL ----------------- 350 MAXLRECL ------------------- 350
KEYLEN -------------------- 10 RKP -------------------------- 0
AXRKP ---------------------- 0 CISIZE ------------------ 4096
INDEXED
UNIQUEKEY
STATISTICS
REC-DELETED ---------------- 0 REC-INSERTED ------------- 10445
REC-RETRIEVED -------------- 0 REC-TOTAL ---------------- 10445
REC-UPDATED ---------------- 0 TIMESTAMP ---------------- (NULL)
ALLOCATION
HI-A-RBA ------------------- 0 HI-U-RBA --------------------- 0
VOLUMES
DEVTYPE --------------- (NULL) VOLSER ----------------- (TSAM)
INDEX --------------- VSAM.KSDS1.I
HISTORY
CREATION --------------- (NULL) DATASET-OWNER ---------- (EMPTY)
EXPIRATION ------------- (EMPTY) RELEASE -------------------- 1
PROTECTION-PSWD ---------- (NULL)
ASSOCIATION
CLUSTER ----------- VSAM.KSDS1
ATTRIBUTES
AVGLRECL ----------------- 350 MAXLRECL ------------------- 350
KEYLEN -------------------- 10 RKP -------------------------- 0
CISIZE ------------------ 4096
STATISTICS
INDEX:
ENTRIES/SECT ------------ 254 HI-LEVEL-RBA ----------- 12288
LEVELS -------------------- 2 SEQ-SET-RBA ------------- 4096
REC-DELETED ----------------- 0 REC-INSERTED ------------ 10445
REC-RETRIEVED --------------- 0 REC-TOTAL --------------- 10445
38 OpenFrame 유틸리티 참조 안내서
REC-UPDATED ----------------- 0 TIMESTAMP --------------- (NULL)
ALLOCATION
HI-A-RBA -------------------- 0 HI-U-RBA ------------------- 0
VOLUMES
DEVTYPE --------------- (NULL) VOLSER ----------------- (TSAM)
LISTENT
LISTENT 명령은 지정한 카탈로그에 등록된 엔트리의 목록을 보여준다. 볼륨 일렬 번호를 지정한 경우에
는 카탈로그에 등록된 엔트리 중 지정한 볼륨에 존재하는 엔트리에 대한 목록을 보여준다.
LISTENT 명령어 구문은 다음과 같다.
LISTENT CATFILE(ddname)
[VOLUMES(volser[ volser...])]
설명항목
출력하려는 엔트리가 등록되어 있는 카탈로그의 ddname을 지정한다. (약어:
CFILE)
CATFILE(ddname)
출력하려는 엔트리의 볼륨 일렬 번호를 지정한다. 볼륨을 지정하지 않으면
카탈로그에 등록된 모든 엔트리를 출력한다. (약어: VOL)
VOLUMES(volser[
volser...])
다음은 USER.CAT1 이라는 사용자 카탈로그에 등록되어 있는 엔트리 중 지정한 볼륨에 존재하는 엔트리
를 출력한다.
//LISTENT JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
// EXEC PGM=JSCVSUT
//CAT DD DSN=USER.CAT1,DISP=OLD
//SYSPRINT DD SYSOUT=A
//SYSIN DD *
LISTENT CATFILE(CAT) -
VOLUMES(100000 200000)
/*
//
다음은 앞의 LISTENT 명령을 실행한 결과로 출력되는 내용(SYSPRINT)이다.
LISTENT CATFILE(CAT)
LISTING FROM CATALOG ----- USER.CAT1
CLUSTER -------- VSAM.KSDS1
DATA -------- VSAM.KSDS1.DAT
VOLUME
VOLSER ------------------- (NULL)
제2장 데이터 셋 유틸리티 39
INDEX ------- VSAM.KSDS1.IDX
VOLUME
VOLSER ------------------- (NULL)
THE NUMBER OF ENTRIES PROCESSED WAS:
CLUSTER ----- 1
DATA -------- 1
GDG --------- 0
INDEX ------- 1
AIX --------- 0
PATH -------- 0
NONVSAM ----- 0
PAGESPACE --- 0
USERCATALOG - 0
TOTAL ------- 3
LISTST
카탈로그에 대한 정보를 출력한다.
LISTST 명령어 구문은 다음과 같다.
LISTST {CATALOG(catname)|
ALLCATALOGS}
설명항목
출력 대상을 결정한다.CATALOG(catname)|
- CATALOG: 출력하려는 카탈로그의 이름을 지정한다. (약어: CAT)ALLCATALOGS
- ALLCATALOGS: 시스템에서 사용 중인 모든 카탈로그에 대한 정보를 출력
할 때 지정한다. (약어: ALLCAT)
기본값은 ALLCATALOGS이다.
다음은 USER.CAT1 이라는 사용자 카탈로그의 정보를 출력하는 예이다.
//LISTST JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
// EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=A
//SYSIN DD *
LISTST CAT(USER.CAT1)
/*
//
40 OpenFrame 유틸리티 참조 안내서
다음은 앞의 LISTENT 명령을 실행한 결과로 출력되는 내용(SYSPRINT)이다.
LISTST CATALOG(USER.CAT1)
*** STATUS ***
USER.CAT1 --------------------------------- RELEASE
< CATALOG-TYPE > < CATALOG-STATUS >
USER-CATALOG USABLE
< VOLUME > < UNIT >
100000 3380
< USING JOB >
N/A
출력된 예에서 사용자 카탈로그명 옆에 "RELEASE"라고 명시된 부분은 RESTRICT/RELEASE 명령에 의
한 카탈로그의 사용이 제한 또는 해제되는 것을 의미한다. 하지만 OpenFrame에서는 카탈로그에 대한 사
용을 제한하는 기능을 제공하지 않으므로, 카탈로그는 항상 RELEASE인 접근 가능한 상태이다.
USING JOB 섹션에는 현재 카탈로그가 사용하고 있는 JOB 리스트를 보여 주지만, 현재 이 기능은 제공하
지 않고 있다.
VSAM 및 Non-VSAM 데이터 셋에 저장되어있는 레코드들을 출력하여 보여준다.
PRINT 명령어 구문은 다음과 같다.
PRINT {INFILE(ddname)|INDATASET(entryname)}
[CHARACTER|DUMP|HEX]
[FROMKEY(key)|FROMADDRESS(address)|FROMNUMBER(number)|SKIP(number)]
[OUTFILE(ddname)]
[TOKEY(key)|TOADDRESS(address)|TONUMBER(number)|COUNT(number)]
설명항목
PRINT 명령을 이용하여 내용을 출력할 데이터 셋을 지정한다.INFILE(ddname)|
- INFILE: JCL을 통해 미리 할당된 ddname을 지정해야 한다. (약어: IFILE)INDATASET(entryname)
- INDATASET: JSCVSUT에서 직접 데이터 셋을 할당하고 그 내용을 출력한
다. (약어: IDS)
PRINT 출력내용의 포맷을 지정한다.CHARACTER|
- CHARACTER: 스트링 형태로 레코드의 내용을 출력한다. (약어: CHAR)DUMP|
제2장 데이터 셋 유틸리티 41
설명항목
- DUMP: 오른쪽에는 16진수로 왼쪽에는 스트링 형태를 나란히 출력한다.HEX
- HEX: 16진수 형태로 출력한다.
아무런 포맷도 지정하지 않은 경우는 기본적값으로 DUMP가 적용된다.
PRINT 문은 사용자가 출력할 레코드의 범위를 지정할 수 있다. 각 파라미터
의 의미는 다음과 같다.
FROMKEY(key)|
FROMADDRESS(ad
dress)| - FROMKEY: 입력 데이터 셋이 키 순서 데이터 셋(KSDS), ALTERNATEIN
DEX, 또는 카탈로그 일 때 지정할 수 있다. 입력된 키를 갖는 레코드부터 출FROMNUMBER(num
ber)|력을 시작한다. 키 값을 갖는 레코드가 없는 경우, 그보다 큰 키 값으로 검색
한다. 만약 지정한 키의 길이가 실제 테이터에 정의된 키 길이보다 길다면 아
무 레코드도 출력하지 않는다. (약어: FKEY)SKIP(number)
- FROMADDRESS: 입력 데이터 셋이 엔트리 순서 데이터 셋(ESDS), 키 순
서 데이터 셋(KSDS), 컴포넌트, 카탈로그일 때 지정할 수 있다. 출력하고 싶
은 1번째 레코드의 RBA(Relative Byte Address)를 지정한다. (약어: FADDR)
- FROMNUMBER: 입력 데이터 셋이 상대 데이터 셋(RRDS) 일 때 지정 할
수 있다. 출력하고 싶은 첫번 째 레코드의 상대 레코드 번호를 입력한다. (약
어: FNUM)
- SKIP: 몇 개의 레코드를 생략하고 출력을 시작 할 것인지를 지정한다.
SYSPRINT가 아닌 다른 DD에 PRINT 결과를 출력할 경우에 사용한다. (약
어: OFILE)
OUTFILE(ddname)
PRINT 명령을 통해서 출력한 데이터 셋의 내용을 저장할 별도의 데이터 셋
을 지정하고 JCL을 통해 미리 할당된 ddname을 지정해야 한다.
이 파라미터를 생략하면 기본적으로 PRINT 명령은 SYSPRINT로 출력한다.
PRINT 문은 사용자가 출력할 레코드의 범위를 지정할 수 있다.TOKEY(key)|
- TOKEY: 입력 데이터 셋이 키 순서 데이터 셋(KSDS), ALTERNATEINDEX,
또는 카탈로그 일 때 지정할 수 있다. 입력된 키를 갖는 레코드를 마지막으로
TOADDRESS(address)|
TONUMBER(number)|출력한다. 키 값을 갖는 레코드가 없는 경우, 그보다 작은 키 값을 마지막으로
검색한다. 만약, 지정한 키의 길이가 실제 테이터에 정의된 키 길이보다 길다
면 아무 레코드도 출력하지 않는다.
COUNT(number)
- TOADDRESS: 입력 데이터 셋이 엔트리 순서 데이터 셋(ESDS), 키 순서 데
이터 셋(KSDS), 컴포넌트, 카탈로그일 때 지정할 수 있다. 출력하고 싶은 마
지막 레코드의 RBA(Relative Byte Address)를 지정한다. (약어: TADDR)
42 OpenFrame 유틸리티 참조 안내서
설명항목
- TONUMBER: 입력 데이터 셋이 상대 데이터 셋(RRDS)일 때 지정할 수 있
다. 출력하고 싶은 마지막 레코드의 상대 레코드 번호를 입력한다. (약어:
TNUM)
- COUNT: 몇 개의 레코드를 출력할 것인지를 지정한다.
다음은 TEST.KSDS1에 저장된 레코드를 DUMP 포맷으로 출력하는 예이다. 출력되는 레코드의 범위는
키 값이 0000000099인 첫 레코드부터 10개이다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//PRINT EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
PRINT INDATASET(TEST.KSDS1) DUMP -
FROMKEY(0000000099) COUNT(10)
/*
//
다음은 위의 JCL을 실행한 결과, SYSPRINT에 출력된 내용이다.
KEY OF RECORD = 30303030303030303939
0000: 3030 3030 3030 3030 3939 7265 636F 7264 *0000000099record*
0010: 3030 3030 3030 3030 3939 *0000000099 *
KEY OF RECORD = 30303030303030313030
0000: 3030 3030 3030 3031 3030 7265 636F 7264 *0000000100record*
0010: 3030 3030 3030 3031 3030 *0000000100 *
KEY OF RECORD = 30303030303030313031
0000: 3030 3030 3030 3031 3031 7265 636F 7264 *0000000101record*
0010: 3030 3030 3030 3031 3031 *0000000101 *
KEY OF RECORD = 30303030303030313032
0000: 3030 3030 3030 3031 3032 7265 636F 7264 *0000000102record*
0010: 3030 3030 3030 3031 3032 *0000000102 *
KEY OF RECORD = 30303030303030313033
0000: 3030 3030 3030 3031 3033 7265 636F 7264 *0000000103record*
0010: 3030 3030 3030 3031 3033 *0000000103 *
KEY OF RECORD = 30303030303030313034
0000: 3030 3030 3030 3031 3034 7265 636F 7264 *0000000104record*
0010: 3030 3030 3030 3031 3034 *0000000104 *
KEY OF RECORD = 30303030303030313035
0000: 3030 3030 3030 3031 3035 7265 636F 7264 *0000000105record*
0010: 3030 3030 3030 3031 3035 *0000000105 *
KEY OF RECORD = 30303030303030313036
0000: 3030 3030 3030 3031 3036 7265 636F 7264 *0000000106record*
0010: 3030 3030 3030 3031 3036 *0000000106 *
제2장 데이터 셋 유틸리티 43
KEY OF RECORD = 30303030303030313037
0000: 3030 3030 3030 3031 3037 7265 636F 7264 *0000000107record*
0010: 3030 3030 3030 3031 3037 *0000000107 *
KEY OF RECORD = 30303030303030313038
0000: 3030 3030 3030 3031 3038 7265 636F 7264 *0000000108record*
0010: 3030 3030 3030 3031 3038 *0000000108 *
PRINT 10 record(s)
JSCVSUT: PRINT OK
REPRO
DEFINE 명령을 통해서 데이터 셋이 이미 정의되어 있다면 REPRO 명령을 이용해서 VSAM과 Non-VSAM
데이터 셋의 내용을 다른 데이터 셋에 저장할 수 있다. 이 명령에 사용되는 VSAM 데이터 셋은 카탈로그
에 등록되어 있어야 하지만 Non-VSAM 데이터 셋의 경우는 카탈로그에 등록되어 있지 않아도 된다.
Mainframe의 카탈로그는 일반적으로 하나의 KSDS 클러스터에 저장되어 있기 때문에 REPRO 명령은 카
탈로그 내용 자체를 복사하는 용도로 사용될 수 있다.
REPRO 명령을 이용하지 않고 일반적인 애플리케이션을 이용해서 레코드를 데이터 셋에 저장하는 경우
도 매우 일반적이나 REPRO 명령은 레코드의 내용에 상관하지 않고 주로 관리목적으로 데이터 셋을 복사
하는 용도로 사용된다.
REPRO 명령어 구문은 다음과 같다.
REPRO {INFILE(ddname)|INDATASET(entryname)}
{OUTFILE(ddname)|OUTDATASET(entryname)}
[FROMKEY(key)|FROMADDRESS(address)|FROMNUMBER(number)|SKIP(number)]
[REPLACE|NOREPLACE]
[TOKEY(key)|TOADDRESS(address)|TONUMBER(number)|COUNT(number)]
설명항목
복사할 원본 데이터 셋을 지정한다.INFILE(ddname)|
INFILE의 경우 JCL을 통해서 명시된 ddname을 값으로 지정해야 하는 반면
INDATASET 파라미터를 사용하는 경우에는 데이터 셋의 카탈로그에 등록된
엔트리 이름을 지정해야 한다.
INDATASET(entryname)
(약어: IFILE | IDS)
원본 데이터 셋을 복사한 후 저장할 대상 데이터 셋을 지정한다.OUTFILE(ddname)|
OUTFILE 파라미터의 값으로는 ddname을 지정해야 하며, OUTDATASET
파라미터의 값으로는 카탈로그된 엔트리 이름을 지정해야 한다.
OUTDATASET(entry
name)
(약어: OFILE | ODS)
REPRO 문은 사용자가 복사할 레코드의 범위를 지정할 수 있다.FROMKEY(key)|
44 OpenFrame 유틸리티 참조 안내서
설명항목
- FROMKEY: 입력 데이터 셋이 키 순서 데이터 셋(KSDS), ALTERNATEIN
DEX, 또는 카탈로그 일 때 지정할 수 있다. 입력된 키를 갖는 레코드부터 복
FROMADDRESS(ad
dress)|
사를 시작한다. 키 값을 갖는 레코드가 없는 경우, 그보다 큰 키 값으로 검색FROMNUMBER(num
ber)|한다. 만약, 지정한 키의 길이가 실제 테이터에 정의된 키 길이보다 길다면 아
무 레코드도 복사하지 않는다. (약어: FKEY)
SKIP(number)- FROMADDRESS: 입력 데이터 셋이 엔트리 순서 데이터 셋(ESDS), 키 순
서 데이터 셋(KSDS), 컴포넌트, 카탈로그 일 때 지정할 수 있다. 복사하고 싶
은 1번째 레코드의 RBA(Relative Byte Address)를 지정한다. (약어: FADDR)
- FROMNUMBER: 입력 데이터 셋이 상대 데이터 셋(RRDS)일 때 지정할 수
있다. 복사하고 싶은 1번째 레코드의 상대 레코드 번호를 입력한다. (약어:
FNUM)
- SKIP: 몇 개의 레코드를 생략하고 복사를 시작할 것인지를 지정한다.
소스 데이터 셋을 타깃 데이터 셋으로 복사하는 과정에서 타깃 데이터 셋에
이미 동일한 레코드가 있는 경우의 처리방법을 지정한다.
REPLACE|
NOREPLACE
- REPLACE: 기존의 레코드를 새로운 레코드로 대체한다. (약어: REP)
- NOREPLACE: 중복 레코드가 발견되었다는 에러 메시지만 나타나고 타깃
데이터 셋의 중복 레코드에 복사하지 않는다. (약어: NREP)
기본값은 NOREPLACE이다.
REPRO 문은 사용자가 복사할 레코드의 범위를 지정할 수 있다.TOKEY(key)|
- TOKEY: 입력 데이터 셋이 키 순서 데이터 셋(KSDS), ALTERNATEINDEX,
또는 카탈로그일 때 지정할 수 있다. 입력된 키를 갖는 레코드를 마지막으로
TOADDRESS(address)|
TONUMBER(number)|복사한다. 키 값을 갖는 레코드가 없는 경우, 그보다 작은 키 값을 마지막으로
검색한다. 만약, 지정한 키의 길이가 실제 테이터에 정의된 키 길이보다 길다
면 아무 레코드도 복사하지 않는다.
COUNT(number)
- TOADDRESS: 입력 데이터 셋이 엔트리 순서 데이터 셋(ESDS), 키 순서 데
이터 셋(KSDS), 컴포넌트, 카탈로그일 때 지정할 수 있다. 복사하고 싶은 마
지막 레코드의 RBA(Relative Byte Address)를 지정한다. (약어: TADDR)
- TONUMBER: 입력 데이터 셋이 상대 데이터 셋(RRDS) 일 때 지정할 수 있
다. 복사하고 싶은 마지막 레코드의 상대 레코드 번호를 입력한다. (약어:
TNUM)
- COUNT: 몇 개의 레코드를 복사할 것인지를 지정한다.
다음은 VSAM.KSDS1 데이터 셋의 50001번 레코드부터 10000개의 레코드를 VSAM.KSDS2 데이터 셋으
로 복사하는 예이다.
제2장 데이터 셋 유틸리티 45
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//REPRO EXEC PGM=JSCVSUT
//INDD DD DSN=VSAM.KSDS1,DISP=(OLD,KEEP)
//OUTDD DD DSN=VSAM.KSDS2,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
REPRO INFILE(INDD) -
OUTFILE(OUTDD) -
SKIP(50000) COUNT(10000)
/*
//
SPLITMRG
SPLITMRG 명령은 하나 이상의 카탈로그를 복수의 다른 카탈로그에 분할 또는 병합한다.
입력 카탈로그에 등록된 모든 엔트리가 분할 또는 병합 대상이다. KEYS 파라미터를 지정하면 입력 카탈
로그의 엔트리는 OUTFILE의 KEYRANGES로 지정한 키 범위에 속하는 출력 카탈로그에 분할 또는 병합
한다.
SPLITMRG 명령은 사용자 카탈로그에 대해서만 작업이 가능하다.
SPLITMRG 명령어의 약어로 SPMG을 사용할 수 있다.
SPLITMRG 명령어 구문은 다음과 같다.
SPLITMRG {INFILE(ddname[ ddname...])|INDATASET(entryname[ entryname...])}
OUTFILE((ddname [OTHER] [ KEYRANGES((fromkey tokey)[ (fromkey tokey)...])])[
(ddname...)])
[KEYS((length offset)[ (length offset)...])]
[TEST|NOTEST]
[KEEP|DELETE]
[IGNORE(SHR)]
설명항목
분할 또는 병합하려는 입력 카탈로그의 ddname 또는 카탈로그명을 지정한
다.
INFILE(ddname[
ddname...])|
입력 카탈로그를 지정할 경우 다음의 사항을 고려해야 한다.INDATASET(entryname[
entryname...])- 별명이 아닌 본명을 사용해야 한다.
- 최대 20개의 입력 카탈로그를 지정할 수 있다. 같은 이름의 카탈로그를 복
수개 사용할 수 없다.
- 마스터 카탈로그는 지정할 수 없다.
- 출력 카탈로그로 사용하는 카탈로그는 사용할 수 없다.
46 OpenFrame 유틸리티 참조 안내서
설명항목
다음은 지정 항목에 대한 설명이다.
- INFILE: JCL을 통해 미리 할당된 ddname을 지정해야 한다. (약어: IFILE)
- INDATASET: JSCVSUT에서 직접 데이터 셋을 할당해야 한다. (약어: IDS)
분할 또는 병합하려는 출력 카탈로그의 ddname을 지정한다. (약어: OFILE)OUTFILE((ddname ...)...)
출력 카탈로그를 지정할 경우 다음의 사항을 고려해야 한다.
- 별명이 아닌 본명을 사용해야 한다.
- 최대 20개의 입력 카탈로그를 지정할 수 있다. 같은 이름의 카탈로그를 복
수개 사용할 수 없다.
- 마스터 카탈로그는 지정할 수 없다.
- 입력 카탈로그로 사용하는 카탈로그는 사용할 수 없다.
- 테스트일 경우 임의의 DD명을 지정한다.
다음은 지정 항목에 대한 설명이다.
- OTHER: KEYRANGES 범위에 속하지 않는 엔트리에 대하여 카탈로그에
등록한다.
- KEYRANGES(fromkey tokey): 카탈로그에 등록할 엔트리의 범위를 키를
통해 지정한다. (약어: KRNG)
다음은 KEYRANGES을 지정할 때 고려해야 할 사항이다.
- 1개의 ddname에 대하여 총 20개의 KEYRANGES를 지정할 수 있다.
- KEYRANGES에 지정하는 키의 길이는 KEYS 파라미터에 정의한 길이와
일치해야 한다.
- fromkey와 tokey에 같은 값을 지정할 수 없다.
KEYRANGES 파라미터를 지정했을 경우 KEYS 파라미터도 반드시 지정해
야 한다.
KEYS((length offset)...)
KEYRANGES 파라미터로 지정한 키의 길이를 1~44Byte, 키의 위치를
0~43Byte 내에서 지정한다.
카탈로그에 대한 분할 또는 병합을 수행하기 전에 주어진 제어문이 제대로
기술되었는지를 테스트할 때 사용한다.
TEST|
NOTEST
- TEST: 실제로 수행하지 않고, 테스트만 한다.
- NOTEST: 테스트 하지 않고, 실제로 수행한다.
제2장 데이터 셋 유틸리티 47
설명항목
기본값은 TEST이다.
SPLITMRG 명령을 종료할 때 입력 카탈로그를 삭제할지에 대한 여부를 결정
한다.
KEEP|
DELETE
- KEEP: 입력 카탈로그를 삭제하지 않는다.
- DELETE: 입력 카탈로그를 삭제한다. (약어: DEL)
기본값은 KEEP이다.
입출력으로 카탈로그를 지정한 DD 문의 DISPOSITION 정보가 SHR일 경우
에도 에러없이 실행한다.
IGNORE(SHR)
SHR 옵션을 지정할 경우 사용자가 카탈로그의 분할 또는 병합 작업에 대한
정합성을 책임져야 한다.
다음은 C.CAT1 사용자 카탈로그에 등록되어 있는 엔트리들을 지정한 키 범위에 따라 USERCAT1과
USERCAT2 사용자 카탈로그에 분할하는 예이다. 엔트리명의 1번째 세 문자가 AAA~EEE 또는 SSS~ZZZ
범위 사이에 존재하는 경우 USERCAT1 사용자 카탈로그에 등록하고, MMM~RRR 또는 FFF~KKK 범위
내에 존재하는 경우 USERCAT2 사용자 카탈로그에 등록한다.
//SPM01 JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
// EXEC PGM=JSCVSUT
//CATIN DD DSN=C.CAT1,DISP=OLD
//CATOUT1 DD DSN=USERCAT1,DISP=OLD
//CATOUT2 DD DSN=USERCAT2,DISP=OLD
//SYSPRINT DD SYSOUT=A
//SYSIN DD *
SPLITMRG -
INFILE(CATIN) -
OUTFILE((CATOUT1 KEYRANGES((AAA EEE) (SSS ZZZ))) -
(CATOUT2 KEYRANGES((MMM RRR) (FFF KKK)))) -
KEYS((3 0)) -
NOTEST
/*
//
SRCHCAT
SRCHCAT 명령은 지정한 엔트리가 어느 카탈로그에 등록되어 있는지를 표시한다. 검색 대상이 되는 카
탈로그는 마스터 카탈로그와 마스터 카탈로그에 등록되어 있는 사용자 카탈로그이다.
SRCHCAT 명령어 구문은 다음과 같다.
48 OpenFrame 유틸리티 참조 안내서
SRCHCAT ENTRY(entname)
설명항목
검색하고 싶은 엔트리의 이름을 지정한다. (약어: ENT)ENTRY(ent
name)입력 가능한 엔트리 타입은 다음과 같다.
- CLUSTER
- DATA COMPONENT
- INDEX COMPONENT
- ALTERNATEINDEX
- PATH
- GENERATIONDATAGROUP
- NONVSAM
- ALIAS
- USERCATALOG
다음은 CL.KSDS라는 이름의 키 순서 데이터 셋(KSDS)이 어느 카탈로그에 등록되어 있는지를 표시하는
예이다.
//SRC01 JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
// EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=A
//SYSIN DD *
SRCHCAT ENTRY(CL.KSDS)
/*
//
다음은 위 예제를 실행한 결과이다.
SRCHCAT ENT(CL.KSDS)
CATALOG NAME -- USER.CAT1
CLUSTER ----- CL.KSDS
CREATION----------2009/10/02
DATA ------ CL.KSDS.DAT
VOLUME
VOLSER------------100000 DEVTYPE------X'3010200E'
INDEX ----- CL.KSDS.IDX
제2장 데이터 셋 유틸리티 49
VOLUME
VOLSER------------100000 DEVTYPE------X'3010200E'
VERIFY
애플리케이션에서 VSAM 데이터 셋을 개방하고 사용하는 과정에서 비정상적인 종료에 의해서 종료처리
가 정확하게 되지 않은 경우 해당 VSAM 데이터 셋이 카탈로그에 레코드를 저장하기 위해 사용하는 저장
공간에 대한 정보를 부정확한 값으로 기록할 수 있다.
이러한 이유로 카탈로그에 문제가 발생한 경우 VERIFY 명령은 문제가 되는 VSAM 데이터 셋에 대해서
올바른 저장공간 및 상태정보를 나타내고 있는지 확인하고, 지정된 데이터 셋에 대한 카탈로그 정보가 잘
못된 경우 올바른 값으로 갱신한다. 비정상적인 종료가 발생한 경우 카탈로그의 STATISTICS/REC-TOTAL
정보가 실제 VSAM 데이터 셋의 레코드 수와 일치하지 않을 수 있으나, VERIFY 명령을 수행하면
STATISTICS/REC-TOTAL 정보를 올바른 값으로 갱신할 수 있다.
VERIFY 명령어의 약어로 VFY를 사용할 수 있다.
참고
VERIFY 명령은 VSAM 데이터 셋에 대해서만 동작한다.
VERIFY 명령어 구문은 다음과 같다.
VERIFY FILE(ddname)|DATASET(entryname)
설명항목
VERIFY 명령의 대상이 되는 데이터 셋을 지정한다.FILE(ddname)|
- FILE: JCL을 통해 할당된 데이터 셋의 ddname을 지정해야 한다.DATASET(entry
name)- DATASET: JSCVSUT에서 지정된 데이터 셋을 직접 할당한다. (약어: DS)
다음은 TEST.CLUS1 데이터 셋의 카탈로그 정보를 확인하는 예이다.
//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)
//VSTEP EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//TESTDD DD DSN=TEST.CLUS1,DISP=OLD
//SYSIN DD *
VERIFY FILE(TESTDD)
/*
//
50 OpenFrame 유틸리티 참조 안내서
보조 명령어 (Modal command)
한번의 JSCVSUT 실행으로 여러 개의 JSCVSUT 명령을 수행할 수 있다.
보조 명령어는 여러 개의 JSCVSUT 명령을 수행하기 위해서 필요한 기능을 제공하는 명령어로 실제로 카
탈로그 엔트리나 오브젝트에 대해 처리하는 기능 명령어와 구분된다.
참고
현재 JSCVSUT의 보조 명령어 중 PARM은 지원하지 않는다.
IF-THEN-ELSE
실행된 명령의 결과 코드 값(LASTCC 혹은 MAXCC)에 따라서 다음에 실행할 명령을 분기하기 위해서 사
용된다.
IF와 THEN 사이에는 조건분기할 때 평가되는 조건을 지정해야 한다. 조건은 컨디션 코드(Condition Code)
와 특정 상수의 비교를 통해서 기술한다.
예를 들어 LASTCC > 8라고 지정하면 컨디션 코드 변수 중의 하나인 LASTCC 값이 8보다 큰 경우를 의미
한다.
IF-THEN-ELSE 명령어 구문은 다음과 같다.
IF {Condition Code} {operator} {number}
THEN[ command| DO command set END]
[ELSE[ command| DO command set END]]
Condition Code에 지정 가능한 값과 의미는 다음과 같다.
설명값
가장 최근에 실행된 명령의 실행 결과값을 저장하는 JSCVSUT에서 사용하는 변수이
다.
LASTCC
성공적인 경우의 LASTCC는 0의 값을 갖고, 무시할 수 있는 경고가 발생한 경우의 값
은 4이다. 심각한 문제가 발생한 경우 더 큰 값을 갖게 된다.
현재 실행 중인 명령보다 앞서서 실행된 명령의 실행 결과 값 중에서 가장 큰 값을 저
장하는데 사용하는 변수이다.
MAXCC
컨디션 코드의 값을 평가하기 위한 연산자이다.Operator
지정 가능한 값과 의미는 "유의사항" [54]에 있는 비교연산자 표를 참고한다.
THEN 문에는 IF 문이 참인 경우 실행할 JSCVSUT 명령을 기술하고, ELSE 문에는 IF 문이 거짓인 경우
실행할 명령을 기술한다. 만약 IF 문이 거짓일 경우 실행할 명령이 없다면 ELSE 문을 생략할 수 있다.
제2장 데이터 셋 유틸리티 51
IF-THEN-ELSE 문은 조건에 따라서 다른 명령을 수행하는 하나의 JSCVSUT 명령으로 간주된다. 따라서
IF-THEN-ELSE 문을 여러 라인에 걸쳐서 기술하는 경우는 하이픈(-)을 적절히 사용해야 한다.
다음은 LASTCC의 값이 8과 동일한 경우, MAXCC에 0을 설정하는 프로그램의 일부분을 예로 보여준다.
실제 IF-THEN 문이 동작하는 것을 보여주기 위해서 LASTCC를 8로 설정했으며 IF-THEN 문이 실행될 때
는 LASTCC 값이 8이므로 THEN 뒤의 SET MAXCC-0이 실행된다. 이 상태에서 JSCVSUT를 종료하면 최
종적인 MAXCC 값을 보고하고 종료하므로 실행된 결과를 확인할 수 있다.
SET LASTCC=8
IF LASTCC=8 THEN SET MAXCC=0
다음은 LASTCC의 값이 4보다 큰 경우 TEST.SDS1의 엔트리 정보를 가져오고, LASTCC가 4보다 크지
않은 경우 TEST.SDS2의 엔트리 정보를 가져오는 예이다. 일반적으로 SET LASTCC의 위치에 다른
JSCVSUT 명령어를 실행하여 그 결과에 의해서 LASTCC가 설정되고, 그 결과에 따라서 조건적으로 명령
을 실행한다. 본 예제에서는 IF-THEN-ELSE 문의 동작을 테스트하기 위해 강제로 IF 문 전에 LASTCC의
값을 0으로 설정하였다. IF 문의 결과에 따라 TEST.SDS2가 LISTCAT된다.
SET LASTCC=0
IF LASTCC > 4 -
THEN -
LISTCAT ENT(TEST.SDS1)
ELSE -
LISTCAT ENT(TEST.SDS2)
Null
Null은 아무 동작도 발생하지 않는 문법적인 용도의 명령으로 다음과 같은 2가지 목적으로 사용된다.
● IF-THEN-ELSE 구문의 문법에 어긋나지 않고 THEN이나 ELSE에 아무런 명령도 지정하지 않을 경우에
사용한다.
● Null이 IF-THEN-ELSE 구문 외에서 사용된 경우는 빈 라인으로 처리된다.
주의
THEN이나 ELSE 뒤에서 라인을 변경하는 경우 라인이 계속 이어지는 것을 의미하는 하이픈(-)을 지
정하지 않는다. 하이픈(-)을 지정하면 JSCVSUT는 THEN이나 ELSE문 다음에 명령이 있는 것으로
가정하고 처리하기 때문에 의도한대로 명령의 분기가 되지 않는다.
다음은 LASTCC가 4보다 큰 경우에 수행하는 명령은 없으며, LASTCC가 4보다 작은 경우에는 TEST.SDS2
의 엔트리 정보를 가져오는 예이다.
52 OpenFrame 유틸리티 참조 안내서
SET LASTCC=0
IF LASTCC > 4 -
THEN
ELSE LISTCAT ENT(TEST.SDS2)
SET
MAXCC나 LASTCC의 값을 강제로 특정한 값으로 설정하는데 사용한다.
주로 특정 경고 수준의 컨디션 코드를 무시하고 JCL에서 JSCVSUT 이후의 STEP을 계속 실행하기 위한
용도로 사용된다.
다음은 LASTCC의 값이 8과 동일한 경우 MAXCC의 값을 0으로 강제 설정하는 예이다.
DEL STEP에서 TEST.SDS1이 없는 경우 DEL STEP은 반환코드 8을 반환하고 종료하므로 DEF STEP은
수행되지 않는다.
TJES의 설정이나 JOB에 기술된 COND에 따라 달라질 수 있지만, 반환코드가 8인 경우 DEF STEP을 처
리하지 않고 JOB이 ABEND 처리되는 경우를 방지하려면 MAXCC를 0으로 강제 설정함으로써 뒤따르는
DEF STEP이 실행되게 할 수 있다.
//DEL EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE TEST.SDS1
IF LASTCC=8 THEN SET MAXCC=0
/*
//DEF EXEC PGM=JSCVSUT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE NONVSAM (NAME(TEST.SDS1) VOLUMES(100000))
/*
//
CANCEL
CANCEL 명령어를 만나면 JSCVSUT의 실행이 종료되어 CANCEL 명령 이후의 나머지 명령은 처리되지
않는다.
다음 예제는 LASTCC가 4인 경우 다음 THEN 명령을 수행하는 중 CANCEL이 실행되어 JSCVSUT의 실
행을 종료하는 프로그램의 일부이다.
LISTCAT ENTRIES(MUST.EXIST.SDS)
IF LASTCC=4 THEN CANCEL
...
제2장 데이터 셋 유틸리티 53
LISCAT으로 지정한 카탈로그 엔트리가 존재하지 않는 경우 컨디션 코드는 4이다. 컨디션 코드가 4인 경
우는 메시지 레벨 조건 코드이므로 다음 JSCVSUT 명령을 계속 실행하게 된다.
앞의 예제는 MUST.EXIST.SDS 이라는 데이터 셋이 없는 경우 더 이상 다음 명령을 실행하지 않고 곧 바
로 IF 조건이 만족하는 경우 CANCEL 명령을 실행하여 JSCVSUT의 실행을 종료한다.
유의사항
컨디션 코드(Condition Code)는 JSCVSUT가 각각의 명령을 실행한 결과가 정상인지 아니면 명령 실행 중
에 에러가 발생했는지를 나타내는 일종의 에러 코드이다.
발생 가능한 컨디션 코드는 0, 4, 8, 12, 16이고 큰 값일수록 명령 실행에 중대한 문제가 있었음을 나타낸
다.
각 컨디션 코드 값에 대한 설명은 다음과 같다.
의미코드
명령을 정상적으로 처리한 경우 반환되는 코드이며 일부 정보성 메시지가 출력될 수 있다.0
명령이 완벽하게 처리되지 않았지만 이를 무시하고 추가적인 명령을 수행해도 영구적으로
에러를 발생시키지 않을 것이라고 판단되는 상태로, 추가적인 명령의 수행이 가능하며 경고
성 메시지가 함께 출력된다.
4
예를 들어 LISCAT 명령이 실행될 때 사용자가 지정한 카탈로그 엔트리가 존재하지 않는 경
우 컨디션 코드는 4로 설정되고 다음 메시지가 출력된다.
JSCVSUT: No specified catalog entry found: NOT.EXIST.SDS
명령이 의미하는 동작의 일부를 수행하지 않았지만 결과적으로 사용자가 원하는 상태와 동
일한 결과로 귀결되는 경우에 해당하는 상태로 추가적인 명령의 수행이 가능하다.
8
예를 들어 DELETE 명령에 지정한 데이터 셋이 존재하지 않는 경우 실제로 DELETE 명령의
완전한 실행은 수행되지 않았지만 결과적으로 지정한 데이터 셋이 없다는 상태는 동일하게
된다. 이 경우 추가적인 명령의 실행에 문제는 없으므로 컨디션 코드는 8로 설정되고 경고성
메시지가 출력된다.
JSCVSUT(WARNING): No such catalog entry - 'NOT.EXIST.SDS'
명령의 수행 과정 중 에러가 있어서 꼭 수행되어야 하는 동작이나 기능을 완료할 수 없는 경
우에 발생한다. 이러한 에러(logical error)는 동시에 지정할 수 없는 논리적으로 불일치하는
12
파라미터를 지정하는 경우이거나 꼭 지정되어야 하는 필수 파라미터가 생략된 경우 혹은 데
이터 셋의 키 길이, 레코드 크기 등으로 지정한 값이 올바르지 않을 때 발생한다. 이러한 상
황이 발생한 경우 컨디션 코드는 12로 설정되고 에러 메시지가 출력된다.
JSCVSUT(ERROR): {error description or logical error code}
54 OpenFrame 유틸리티 참조 안내서
의미코드
현재 명령을 수행하는 과정에서 심각한 에러가 발생하여 사용자가 지정한 나머지 명령을 실
행할 수 없는 경우에 반환되는 컨디션 코드 값이다.
16
다음과 같은 경우에 해당 코드가 발생한다.
- JSCVSUT의 실행 로그를 사용할 수 없는 경우
출력 메시지가 저장될 출력 데이터 셋을 사용할 수 없는 경우 컨디션 코드 16이 발생한다.
예를 들어 SYSPRINT DD를 열지 못한 경우 JSCVSUT는 더 이상의 실행하지 않고 바로 종
료한다.
- JSCVSUT 명령을 잘못 코딩한 경우
IF-THEN-ELSE 문을 잘못 코딩하거나 여러 라인에 걸쳐서 명령을 코딩할 때 하이픈(-)을 적
절히 사용하지 않은 경우에 발생한다.
- 시스템 데이터 셋이 망가진 경우
BCS나 VVDS의 내용에 오류가 존재해서 명령을 수행할 수 없는 경우이며, SYSPRINT DD
를 사용할 수 있는 경우라면 다음과 같은 에러 메시지가 출력된다.
JSCVSUT(ERROR): {error description or logical error code} 또는 JSCVSUT(FATAL): {error
description}
조건 코드 변수명 (LASTCC와 MAXCC)
JSCVSUT는 LASTCC 및 MAXCC라는 변수에 컨디션 코드 값을 저장한다.
LASTCC에는 최근 실행한 명령의 컨디션 코드가 저장되고, MAXCC에는 기존에 발생한 컨디션 코드 중에
서 가장 큰 값이 저장된다.
LASTCC 및 MAXCC는 SET 명령을 이용해서 사용자가 직접 설정할 수 있다.
다음은 NOT.EXIST.SDS 데이터 셋을 삭제한 후 LASTCC의 값이 8이면 강제적으로 MAXCC를 0으로 설
정하는 예이다.
DELETE NOT.EXIST.SDS
IF LASTCC = 8 THEN SET MAXCC=0
DEFINE ...
관련 환경설정
JSCVSUT는 idcams.conf 설정 파일을 사용한다. 이 설정 파일의 내용을 변경하여 JSCVSUT의 몇 가지
동작을 사용자의 요구에 맞게 조정할 수 있다.
제2장 데이터 셋 유틸리티 55
OpenFrame 보안제품인 TACF와 함께 JSCVSUT를 연동하는 경우 JSCVSUT를 명령어 라인에서 실행하
면 JSCVSUT는 사용자이름/기본그룹명/비밀번호의 입력을 요구한다. 매번 사용자이름과 기본그룹명 그
리고 비밀번호를 입력하지 않으려면 [DEFAULT_USER] 섹션의 각 항목에 기본적인 사용자 정보를 설정
한다.
<idcams.conf>
[DEFAULT_USER]
USERNAME={username}
GROUPNAME={groupname}
PASSWORD={password}
JCL에 의해서 JOB의 일부 STEP으로 JSCVSUT가 실행되는 경우에는 TJES에서 필요한 사용자 정보를
제공하므로 별도로 위의 설정을 사용하지 않는다.
TACF와 JSCVSUT를 연동하는 경우 JSCVSUT의 각 기능 명령어에서 데이터 셋을 접근할 때 권한 체크
를 수행할지 여부를 설정한다.
[TACF]
CHECK_DSAUTH={YES|NO}
다음은 현재 JSCVSUT의 명령 중에서 실제 기능은 하지 않으나 에러가 발생하지 않도록 처리되는 파라미
터에 대한 표이다.
파라미터명령어
[MASTERPW(password)]공통(패스워드 관련)
[CONTROLPW(password)]
[UPDATEPW(password)]
[READPW(password)]
[CODE(code)]
[ATTEMPTS(count)]
[AUTHORIZATION(name info)]
[FILE(ddname)]ALTER
[ALLCOMPONENTS]
[NULLIFY(
[EXCEPTIONEXIT])]
[ERASE|NOERASE]
[EXCEPTIONEXIT(entrypoint)]
[{WRITECHECK|NOWRITECHECK}]
[INHIBIT|UNINHIBIT]
56 OpenFrame 유틸리티 참조 안내서
파라미터명령어
[DFWRITE|NODFWRITE]
[SHAREOPTIONS(option)]
[RECORDSIZE(average maximum)]
[KEYS(length offset)]
[FREESPACE(rate)]
[BUFFERSPACE(size)]
[{ADDVOLUMES(volser[ volser...])|REMOVEVOLUMES(volser[ volser...])}]
[{UNIQUEKEY|NONUNIQUEKEY}]
[UPGRADE|NOUPGRADE]
[UPDATE|NOUPDATE]
[{CALLSORT|NOCALLSORT[ {INTERNALSORT|EXTERNALSORT}]}]BLDINDEX
[WORKFILES(ddname[ ddname...])]
[WASTESPACE]
[CATVOLS((catname) VOLUMES(volser[ volser...]))...)]CHECKCAT
[CENTERCATALOG((catname KEYRANGES((fromkey tokey)...))...)]
[DEFAULTCATALOG(({ALLENTRY|ENTRY(entryname)} CATNAME(catname))...)]
[SELECTCATALOG(catname[ catname...])]
[SELECTVOLUME(volser[ volser...])]
[TARGETMASTERCATALOG(catname)]
[SYSTEM(TRUST|NONE)]
[KEY(length offset)]
[DATEFORMAT({Y2|Y4})]
[OUTFILE(ddname)]
[FILE(ddname)]DEFINE command
[EXCEPTIONEXIT(entrypoint)]
[FILE(ddname)]
[FREESPACE(CI-percent[ CA-percent])]
[MODEL(entryname[ catname])]
[{RECORDCOMPRESS|NORECORDCOMPRESS}]
[REUSE|NOREUSE]
[SHAREOPTIONS(option])]
[UNIQUE|SUBALLOCATION]
제2장 데이터 셋 유틸리티 57
파라미터명령어
[WRITECHECK|NOWRITECHECK])
[FILE(ddname)]DELETE
[FILECHECK]
[FORCE|NOFORCE]
[PURGE|NOPURGE]
[SCRATCH|NOSCRATCH]
[{WITHSECURITY|WITHOUTSECURITY}
[PAGESPACE]
[SPACE]
[JOURNAL]
COMPONENT
[INCOMPLETE]
[DISCONNECT]EXPORT
[TEMPORARY|PERMANENT]
[RECORDS|CONTROLINTERVALS]
[{KEYSEQUENTIALCHECK|NOKEYSEQUENTIALCHECK}]
[INHIBITSOURCE|NOINHIBITSOURCE]
[INHIBITTARGET|NOINHIBITTARGET]
[FORMAT(format)]
[OLDCHECK]
[RESERVE|NORESERVE]EXTRACT
[CONNECT]IMPORT
[PURGE|NOPURGE]
[{REPLACESECURITY|REUSESECURITY|CREATESECURITY}]
[FREESPACE|NOFREESPACE]
[CONTROLAREASIZE(cisize)]
[WASTESPACE]
[OBJECTS ([FILE(ddname)])]
[BUFFERSPACE(size)]
[ORDERED|UNORDERED]
[KEYRANGES((fromkey tokey)...)])]
[ORDERED|UNORDERED]
58 OpenFrame 유틸리티 참조 안내서
파라미터명령어
[PAGESPACE]LISTCAT
[CREATION(days)]
[EXPIRATION(days)]
[FILE(ddname)]
DATEFORMAT({Y2|Y4})]
[{EDITFILE(ddname)|EDITDATASET(entryname)}]
[{FORMAT3|FORMAT4}]
[{LIST|NOLIST}]
[OUTFILE(ddname)]
[{SYSTEMLIST|NOSYSTEMLIST}]LISTST
[{KEYSEQUENTIALCHECK|NOKEYSEQUENTIALCHECK}]PRINT
[{CONTROLINTERVALS|RECORDS}]
[SUPPRESS]
[{FORCE|NOFORCE}]
[REGISTERTYPE(type)]
[{COPYDATASET(entryname)|COPYFILE(ddname)}]REPRO
[FORCE|NOFORCE]
[{KEYSEQUENTIALCHECK|NOKEYSEQUENTIALCHECK}]
[CONTROLINTERVALS]
[REUSE|NOREUSE]
[WASTESPACE]
[DATASET]SPLITMRG
[VOLUME]
[TERMINAL]
[USER]
[PROGRAM]
[{CENTERCATALOG|NOTCENTERCATALOG}]
[WORKCAT(catname)]
[DATASETID(id)]
제2장 데이터 셋 유틸리티 59
파라미터명령어
[WORKSIZE|VOLUMES(volser[ volser...])
{CYLINDERS(space[ space])|
TRACKS(space[ space])|
RECORDS(space[ space])]]
DEFINE 서브 명령어의 경우 다음과 같다.
파라미터서브 명령어
(BUFFERSPACE(size)]ALTERNATEINDEX
[CONTROLAREASIZE(size)]
[DFWRITE|NODFWRITE]
[EXCEPTIONEXIT(entrypoint)]
[FREESPACE(CI-percent[ CA-percent]| 0 0)]
[IMBED|NOIMBED]
[KEYRANGES((fromkey tokey)...)]
[MODEL(entryname[ catname])]
[ORDERED|UNORDERED]
[REPLICATE|NOREPLICATE]
[REUSE|NOREUSE]
[SHAREOPTIONS(option)]
[SPEED|RECOVERY]
[TOTALSPACE|NOTOTALSPACE]
[WRITECHECK|NOWRITECHECK])
[DATA (
[BUFFERSPACE(size)]
[CONTROLAREASIZE(size)]
[DFWRITE|NODFWRITE]
[EXCEPTIONEXIT(entrypoint)]
[FREESPACE(CI-percent[ CA-percent])]
[KEYRANGES((fromkey tokey)...)]
[MODEL(entryname [ catname ])]
60 OpenFrame 유틸리티 참조 안내서
파라미터서브 명령어
[ORDERED|UNORDERED]
[REUSE|NOREUSE]
[SHAREOPTIONS(option)]
[SPEED|RECOVERY]
[TOTALSPACE|NOTOTALSPACE]
[WRITECHECK|NOWRITECHECK])]
[INDEX (
[DFWRITE|NODFWRITE]
[EXCEPTIONEXIT(entrypoint)]
[IMBED|NOIMBED]
[MODEL(entryname[ catname ])]
[ORDERED|UNORDERED]
[REPLICATE|NOREPLICATE]
[REUSE|NOREUSE]
[SHAREOPTIONS(option)]
[TOTALSPACE|NOTOTALSPACE]
[WRITECHECK|NOWRITECHECK])]
[BUFFERSPACE(size)]CLUSTER
[CONTROLAREASIZE(size)
[DFWRITE|NODFWRITE]
[EXCEPTIONEXIT(entrypoint)]
[FREESPACE(CI-percent[ CA-percent]|0 0)]
[IMBED|NOIMBED]
[KEYRANGES((fromkey tokey)...)]
[MODEL(entryname[ catname])]
[ORDERED|UNORDERED]
[{RECORDCOMPRESS|NORECORDCOMPRESS}]
[REPLICATE|NOREPLICATE]
[REUSE|NOREUSE]
제2장 데이터 셋 유틸리티 61
파라미터서브 명령어
[SAMECISZ]
[SHAREOPTIONS(option)]
[TOTALSPACE|NOTOTALSPACE]
[WRITECHECK|NOWRITECHECK])
[DATA (
[BUFFERSPACE(size)]
[CONTROLAREASIZE(size)]
[DFWRITE|NODFWRITE]
[EXCEPTIONEXIT(entrypoint)]
[FREESPACE(CI-percent[ CA-percent])]
[KEYRANGES((fromkey tokey)...)]
[MODEL(entryname [ catname ])]
[ORDERED|UNORDERED]
[REUSE|NOREUSE]
[SHAREOPTIONS(option)]
[TOTALSPACE|NOTOTALSPACE]
[WRITECHECK|NOWRITECHECK])]
[INDEX (
[DFWRITE|NODFWRITE]
[EXCEPTIONEXIT(entrypoint)]
[IMBED|NOIMBED]
[MODEL(entryname[ catname ])]
[ORDERED|UNORDERED]
[REPLICATE|NOREPLICATE]
[REUSE|NOREUSE]
[SHAREOPTIONS(option)]
[TOTALSPACE|NOTOTALSPACE]
[WRITECHECK|NOWRITECHECK])]
62 OpenFrame 유틸리티 참조 안내서
파라미터서브 명령어
([SCRATCH|NOSCRATCH])GENERA
TIONDATAGROUP
[FILESEQUENCENUMBERS(number[ number...])])NONVSAM
[FILE(ddname)]PATH
([MODEL(entryname[ catname])])
([BUFFERSPACE(size|3072)]USERCATALOG
[FILE(ddname)]
[FREESPACE(CI-percent[ CA-percent]|0 0)]
[MODEL(entryname[ catname])]
[TYPE({1|2})]
[WRITECHECK|NOWRITECHECK])
[DATA (
[BUFFERSPACE(size)]
[WRITECHECK|NOWRITECHECK])]
[INDEX (
[WRITECHECK|NOWRITECHECK])]
2.2. JSDEDIT입력 데이터 셋에 주어진 JCL을 편집하여 새로운 JCL을 가진 데이터 셋을 작성하는 JCL 편집 유틸리티
프로그램이다.
입력 데이터 셋의 편집, 복사하는 단위는 다음과 같다.
● JCL 전체 복사
● JCL의 각 JOB별로 선별 복사
● JCL의 JOB마다 STEP별로 선별 복사
모든 JOB과 STEP은 입력 데이터 셋과 같은 순서로 출력 데이터 셋으로 복사된다.
입력 데이터 셋이 JCL 내에 입력 스트림으로 작성되었고 이 입력 데이터 셋에 저장된 JCL 내에 또 다시
입력 스트림이 있는 경우 입력 데이터 셋 내 JCL의 입력 스트림 죵료 표시를 "/*"가 아닌 "..*"로 지정한다.
이 표기는 출력 데이터 셋에는 "/* "로 변환하여 저장된다.
제2장 데이터 셋 유틸리티 63
DD 설정
DD 설정 항목은 다음과 같다.
설명항목
JCL이 저장된 입력 데이터 셋을 기술한다.SYSUT1 DD
새로 생성된 JCL을 저장할 데이터 셋을 기술한다.SYSUT2 DD
JSDEDIT의 명령어를 기술한다.SYSIN DD
명령어 설정
EDIT
어떤 JOB들 또는 어떤 JOB STEP들을 출력 데이터 셋에 포함할지의 조건을 명시한다.
EDIT 문을 생략할 경우 입력 데이터 셋을 출력 데이터 셋으로 복사하게 된다.
EDIT 명령어 구문은 다음과 같다.
[label] EDIT {[START=jobname][,STEPNAME=(namelist)]
|JOBNAME=(namelist)}
[,TYPE={POSITION|INCLUDE|EXCLUDE}]
[,NOPRINT]
설명항목
하나의 JOB을 선택하여 해당 JOB 전체 또는 각 STEP별로 복사 또는 제외할 때 기술
한다.
START
STEPNAME을 지정하지 않으면 해당 JOB의 전 STEP이 복사된다.
START의 jobname을 생략할 경우 1번째 EDIT 문이었다면 1번째 JOB을, 2번째 JOB
부터는 이전의 EDIT 문이 지정한 JOB의 다음 JOB을 자동으로 선택한다.
해당 JOB이 정해지면 해당 JOB 문장은 필수적으로 포함되므로 여러 JOB으로부터
STEP을 발췌하여 하나의 JOB으로 만드는 것은 불가능하다.
인자로 사용할 namelist를 기술한다. STEP의 namelist는 다음의 3가지 방법을 모두
사용하여 기술할 수 있다.
STEPNAME
- STEP
- STEPA, STEPB,....
- STEPA-STEPG (STEPA부터 STEPG까지를 의미)
콤마(,)와 대쉬(-)를 구분자로 하여 혼용할 수 있다.
64 OpenFrame 유틸리티 참조 안내서
설명항목
여러 개의 JOB을 복사하거나 제외할 때 이용한다. START 및 STEPNAME과 함께 이
용할 수 없다. JOBNAME의 namelist는 다음의 3가지 방법을 모두 사용하여 기술할
수 있다.
JOBNAME
- JOB
- JOBA, JOBB,....
- JOBA-JOBG (JOBA부터 JOBG까지를 의미)
콤마(,)와 대쉬(-)를 구분자로 하여 혼용할 수 있다.
EDIT 문의 동작을 기술한다. 다음 중 하나의 옵션을 선택한다.TYPE
- POSITION: 지정된 STEP 또는 JOB부터 다음 JOB을 만날 때까지(START 문을 지
정한 경우) 혹은 JCL 끝까지를 출력 데이터 셋에 복사한다.
- INCLUDE: 지정된 STEP또는 JOB만을 출력 데이터 셋에 포함한다.
- EXLCUDE: 지정된 STEP 또는 JOB을 제외한 나머지 STEP 또는 JOB을 출력 데이
터 셋에 포함한다.
JOB 스트림을 SYSPRINT로 출력하지 않는다. SYSPRINT로 출력되지 않도록 하려
면 반드시 이 옵션을 설정해야 한다.
NOPRINT
미지원 기능이다.
사용예제
다음은 SYSUT1 DD로 주어진 데이터 셋의 JCL 전체를 SYSUT2 DD의 데이터 셋으로 복사하는 예이다.
//STEP1 EXEC PGM=JSDEDIT
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSNAME=OFTEST.JSDEDIT(IN),DISP=OLD
//SYSUT2 DD DSNAME=OFTEST.JSDEDIT(OUT1),
// DISP=OLD,DCB=(RECFM=FB,LRECL=81,BLKSIZE=81)
다음은 SYSUT1 DD로 주어진 데이터 셋의 JCL을 JOB 단위로 EDIT한 후 SYSUT2 DD의 데이터 셋으로
복사하는 예이다.
//STEP1 EXEC PGM=JSDEDIT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
EDIT JOB=JOB2,TYPE=POSITION
/*
제2장 데이터 셋 유틸리티 65
//SYSUT1 DD DATA
//JOB1 JOB CLASS=A
//STEP11 EXEC PGM=JSJDUMMY
//TEMP1 DD DSNAME=OFTEST.TEMP1,DISP=OLD
//STEP12 EXEC PGM=JSJDUMMY
//TEMP2 DD DSNAME=OFTEST.TEMP2,DISP=OLD
//STEP13 EXEC PGM=JSJDUMMY
//TEMP3 DD DSNAME=OFTEST.TEMP3,DISP=OLD
//JOB2 JOB CLASS=B
//STEP21 EXEC PGM=JSJDUMMY
//TEMP4 DD DSNAME=OFTEST.TEMP4,DISP=OLD
//STEP22 EXEC PGM=JSJDUMMY
//TEMP5 DD DSNAME=OFTEST.TEMP5,DISP=OLD
//JOB3 JOB CLASS=B
//STEP31 EXEC PGM=JSJDUMMY
//TEMP6 DD DSNAME=OFTEST.TEMP6,DISP=OLD
//STEP32 EXEC PGM=JSJDUMMY
//TEMP7 DD DSNAME=OFTEST.TEMP7,DISP=OLD
/*
//SYSUT2 DD DSNAME=OFTEST.JSDEDIT(OUT2),
// DISP=OLD,DCB=(RECFM=FB,LRECL=81,BLKSIZE=81)
1번째 EDIT 문은 JOB2부터 이 후 모든 JOB을 출력한다.
다음은 앞의 예제에 대한 결과로서 생성된 출력 데이터 셋의 JCL이다.
//JOB2 JOB CLASS=B
//STEP21 EXEC PGM=JSJDUMMY
//TEMP4 DD DSNAME=OFTEST.TEMP4,DISP=OLD
//STEP22 EXEC PGM=JSJDUMMY
//TEMP5 DD DSNAME=OFTEST.TEMP5,DISP=OLD
//JOB3 JOB CLASS=B
//STEP31 EXEC PGM=JSJDUMMY
//TEMP6 DD DSNAME=OFTEST.TEMP6,DISP=OLD
//STEP32 EXEC PGM=JSJDUMMY
//TEMP7 DD DSNAME=OFTEST.TEMP7,DISP=OLD
다음은 SYSUT1 DD로 주어진 데이터 셋의 JCL을 각 JOB별로 STEP을 편집한 후 SYSUT2 DD의 데이터
셋으로 복사하는 예이다.
//STEP1 EXEC PGM=JSDEDIT
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
EDIT START=,TYPE=POSITION,STEPNAME=STEP12
EDIT START=JOB2,TYPE=INCLUDE,STEPNAME=(STEP21,STEP23)
EDIT START=JOB3,TYPE=EXCLUDE,STEPNAME=(STPE32-STEP34)
66 OpenFrame 유틸리티 참조 안내서
/*
//SYSUT1 DD DATA
//JOB1 JOB CLASS=A
//STEP11 EXEC PGM=JSJDUMMY
//TEMP1 DD DSNAME=OFTEST.TEMP1,DISP=OLD
//STEP12 EXEC PGM=JSJDUMMY
//TEMP2 DD DSNAME=OFTEST.TEMP2,DISP=OLD
//STEP13 EXEC PGM=JSJDUMMY
//JOB2 JOB CLASS=B
//STEP21 EXEC PGM=JSDEDIT
//SYSUT1 DD DSNAME=OFTEST.JCLDATA1,DISP=OLD
//SYSUT2 DD DSNAME=OFTEST.JCLDATA2,DISP=OLD
//STEP22 EXEC PGM=JSJDUMMY
//TEMP3 DD DSNAME=OFTEST.TEMP3,DISP=OLD
//STEP23 EXEC PGM=JSDEDIT
//SYSUT1 DD DSNAME=OFTEST.JCLDATA3,DISP=OLD
//SYSUT2 DD DSNAME=OFTEST.JCLDATA4,DISP=OLD
//SYSIN
EDIT START=JOBA,TYPE=INCLUDE,STEPNAME=(STEPA-STEPC)
..*
//JOB3 JOB CLASS=B
//STEP31 EXEC PGM=JSDEDIT
//TEMP4 DD DSNAME=OFTEST.TEMP4,DISP=OLD
//STEP32 EXEC PGM=JSDEDIT
//TEMP5 DD DSNAME=OFTEST.TEMP5,DISP=OLD
//STEP33 EXEC PGM=JSDEDIT
//TEMP6 DD DSNAME=OFTEST.TEMP6,DISP=OLD
//STEP34 EXEC PGM=JSDEDIT
//TEMP7 DD DSNAME=OFTEST.TEMP7,DISP=OLD
//STEP35 EXEC PGM=JSDEDIT
//TEMP8 DD DSNAME=OFTEST.TEMP8,DISP=OLD
/*
//SYSUT2 DD DSNAME=OFTEST.JSDEDIT(OUT3),
// DISP=OLD,DCB=(RECFM=FB,LRECL=81,BLKSIZE=81)
1번째 EDIT 문은 JOB1에서 STEP12 이후로만 출력한다.
2번째 EDIT 문은 JOB2에서 STEP21와 STEP23만을 출력한다.
마지막 EDIT 문은 JOB3에서 STEP32부터 STEP34까지를 제외한 나머지 STEP을 모두 출력한다.
다음은 앞의 예제에 대한 결과로 생성된 출력 데이터 셋의 JCL이다.
//JOB1 JOB CLASS=A
//STEP12 EXEC PGM=JSJDUMMY
//TEMP2 DD DSNAME=OFTEST.TEMP2,DISP=OLD
//STEP13 EXEC PGM=JSJDUMMY
제2장 데이터 셋 유틸리티 67
//JOB2 JOB CLASS=B
//STEP21 EXEC PGM=JSDEDIT
//SYSUT1 DD DSNAME=OFTEST.JCLDATA1,DISP=OLD
//SYSUT2 DD DSNAME=OFTEST.JCLDATA2,DISP=OLD
//STEP23 EXEC PGM=JSDEDIT
//SYSUT1 DD DSNAME=OFTEST.JCLDATA3,DISP=OLD
//SYSUT2 DD DSNAME=OFTEST.JCLDATA4,DISP=OLD
//SYSIN
EDIT START=JOBA,TYPE=INCLUDE,STEPNAME=(STEPA-STEPC)
/*
//JOB3 JOB CLASS=B
//STEP31 EXEC PGM=JSDEDIT
//TEMP4 DD DSNAME=OFTEST.TEMP4,DISP=OLD
//STEP35 EXEC PGM=JSDEDIT
//TEMP8 DD DSNAME=OFTEST.TEMP8,DISP=OLD
유의사항
JSDEDIT 유틸리티 프로그램이 Batch 애플리케이션을 실행한 결과는 다음과 같다.
● 정상적으로 실행한 경우
Batch 애플리케이션에서 받은 코드를 반환한다.
● 에러가 발생한 경우
해당 에러 메시지를 SYSPRINT DD에 출력하고 에러에 해당하는 코드를 반환한다.
JSDEDIT 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.
설명코드
Unrecoverable 형태의 에러로, 다음의 경우가 해당된다.8
- 데이터 셋 관련 (pgmdd, open/close, read/write) 에러
- SYSIN DD 명령어 문법 에러
- OpenFrame 시스템 라이브러리 초기화 실패
- 기타 JSDEDIT 유틸리티 프로그램 에러
68 OpenFrame 유틸리티 참조 안내서
2.3. JSDPCPY1개 이상의 PDS에 대해서 멤버들을 전체 또는 일부만 복사하거나 병합하기 위해 사용하는 유틸리티 프로
그램이다.
JSDPCPY 유틸리티 프로그램으로 다음과 같은 기능을 수행할 수 있다.
● PDS에 대해 복사 또는 병합 기능을 수행한다.
● PDS의 특정 멤버만 선택해서 복사하고, 선택된 멤버 이름을 재정의한다.
● PDS의 특정 멤버만 제외하고 복사한다.
● PDS 멤버를 교체한다.
DD 설정
DD 설정 항목은 다음과 같다.
설명항목
JSDPCPY 메시지를 저장하는 데이터 셋을 정의한다.SYSPRINT DD
PDS 타입의 입력 데이터 셋을 정의한다.user_defined_name1 DD
PDS 타입의 출력 데이터 셋을 정의한다.user_defined_name2 DD
JSDPCPY 명령어를 정의한다.SYSIN DD
명령어 설정
COPY, COMPRESS, EXPAND
PDS의 멤버를 복사한다.
SYSIN DD의 COPY, COMPRESS, EXPAND 명령어 구문은 다음과 같다.
[label] COPY|COMPRESS|EXPAND OUTDD=DDNAME
[,INDD=[(]{DDNAME|(DDNAME,R)}[,...][)]]
[,ALIAS=YES]
[,LIST={NO|SUPPRESS}]
설명항목
출력 데이터 셋을 위한 DD 이름을 기술한다.OUTDD
입력 데이터 셋을 위한 DD 이름을 기술한다.INDD
제2장 데이터 셋 유틸리티 69
설명항목
출력 데이터 셋에 복사하려는 멤버가 이미 존재하고 있는 경우 R(REPLACE) 파라미
터가 있으면 오버라이드하고 없으면 복사하지 않는다.
ALIAS도 함께 복사 혹은 제외할 때 기술하는 항목으로 현재 미지원 기능이다.ALIAS
복사된 멤버들의 이름을 SYSPRINT에 기록하는 항목으로 현재 미지원 기능이다.LIST
EMPTY
PDS의 멤버를 초기화한다.
[label] EMPTY OUTDD=DDNAME
[,KEYLEN=number]
설명항목
초기화할 PDS를 위한 DD 이름을 기술한다.OUTDD
미지원 기능이다.KEYLEN
SELECT
SELECT 문은 COPY 문 다음에 설정하며, 입력 데이터 셋의 특정 멤버를 선택하여 새로운 이름으로 COPY
작업을 수행한다.
SELECT 명령어 구문은 다음과 같다.
[label] SELECT MEMBER=({name1|(name1,newname1[,R])|(name1,,R)}
[,{name2|(name2,newname2[,R])|(name2,,R)}][,...])
GROUP={[(]name1[,name2,...][)]
|((name1,R)[,name2,...])}
설명항목
name 필드에 기술한 입력 데이터 셋의 멤버를 newname 필드에서 지정한 새로운 이
름으로 복사한다.
MEMBER
newname 필드를 지정하지 않은 경우, name 필드에 기술한 멤버명과 동일한 이름을
사용한다.
R(REPLACE) 파라미터를 선택하면 입력 데이터 셋의 멤버 이름과 출력 데이터 셋의
멤버 이름이 같을 경우 입력 데이터 셋의 멤버를 출력 데이터 셋의 멤버로 오버라이드
한다.
name 필드로 시작하는 입력 데이터 셋의 멤버를 복사한다.GROUP
70 OpenFrame 유틸리티 참조 안내서
설명항목
R(REPLACE) 파라미터를 선택하면 입력 데이터 셋의 멤버 이름과 출력 데이터 셋의
멤버 이름이 같을 경우 입력 데이터 셋의 멤버를 출력 데이터 셋의 멤버로 오버라이드
한다.
EXCLUDE
EXCLUDE 문은 COPY 문 다음에 설정하며, COPY 문을 수행할 때 입력 데이터 셋에서 특정 멤버를 제외
한다. 이 구문은 위의 SELECT 문과 함께 사용할 수 없다. EXCLUDE 문과 SELECT 문 모두 지정하지 않
으면, 데이터 셋 전체에 대한 COPY 작업을 수행한다.
EXCLUDE 명령어 구문은 다음과 같다.
[label] EXCLUDE MEMBER=[(]name1[,name2,...][)]
설명항목
복사하지 않을 멤버의 이름을 기술한다. 해당 멤버들은 COPY 문을 수행할 때 복사대
상에서 제외된다.
MEMBER
INDD
COPY 문 다음에 설정하며, 설정한 순서로 입력 데이터 셋을 출력 데이터 셋으로 새로운 COPY 작업을 수
행한다.
COPY 문의 서브 명령어로 쓰이는 INDD에 대해서는 여러 개의 입력 데이터 셋에 대하여 각각 EXCLUDE
문이나 SELECT 문을 적용하기 어렵지만, INDD 문을 사용하면 여러 개의 입력 데이터 셋에 대하여 각각
EXCLUDE 문과 SELECT 문을 사용할 수 있다.
[label] INDD=[(]{DDNAME|(DDNAME,R)}[,...][)]]
사용예제
다음은 PDS DATASET1을 PDS DATASET2로 전체 데이터 셋을 복사하는 예이다.
//COPYALL JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//JOBSTEP EXEC PGM=JSDPCPY
//SYSPRINT DD SYSOUT=A
//SYSUT1 DD DSNAME=DATASET1,DISP=(SHR,KEEP)
//SYSUT2 DD DSNAME=DATASET2,UNIT=disk,VOL=SER=200000,
// DISP=(NEW,CATLG)),SPACE=(TRK,(100,,10))
//SYSIN DD DUMMY
다음처럼 DATASET1의 모든 멤버 A, B, F가 PDS DATASET2로 모두 복사된다.
제2장 데이터 셋 유틸리티 71
[그림 2.1] PDS 데이터 셋 복사
다음은 4개의 데이터 셋을 병합하는 예이다. 이미 존재하고 있는 데이터 셋 DATASET5에 DATASET1,
DATASET3, DATASET4의 멤버가 복사되어 병합된다. SYSIN DD의 명령어 INDD 순서에 따라 DATASET1
이 먼저 복사되고, DATASET4, DATASET3의 순서로 복사된다.
//MERGE JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//JOBSTEP EXEC PGM=JSDPCPY
//SYSPRINT DD SYSOUT=A
//IN01 DD DSNAME=DATASET1,DISP=(SHR,KEEP)
//IN02 DD DSNAME=DATASET3,DISP=(SHR,KEEP)
//OUT01 DD DSNAME=DATASET5,DISP=(SHR,KEEP)
//IN03 DD DSNAME=DATASET4,DISP=(SHR,KEEP)
//SYSIN DD *
COPYOPER COPY OUTDD=OUT01
INDD=IN01
INDD=IN03
INDD=IN02
/*
JSDPCPY가 시작되기 전 DATASET5에는 A라는 멤버가 존재하고 있다. DATASET1이 최초로 복사되는
데 A라는 멤버는 이미 OUTPUT에 있고, REPLACE 조건이 없으므로 A는 복사되지 않고 B와 F만 복사된
다. 다음으로 DATASET4가 복사되는데 멤버 B 역시 이미 OUTPUT에 있으므로 복사되지 않고 멤버 D와
X만 복사된다. 마지막으로 DATASET3이 복사된다. 멤버 F와 X가 이미 OUTPUT에 있으므로 복사되지 않
고 멤버 C와 Y만 복사된다.
아래 그림은 위의 예제를 실행하면서 출력 데이터 셋에 멤버가 복사되는 과정과 최종 복사된 멤버를 보여
준다.
72 OpenFrame 유틸리티 참조 안내서
[그림 2.2] 데이터 셋 병합
다음은 입력 데이터 셋에서 특정 멤버를 선택하거나 제외하여 복사하는 예이다.
MERGE EXEC PGM=JSDPCPY
//IN01 DD DSNAME=DATASET4,DISP=(SHR,KEEP)
//IN02 DD DSNAME=DATASET3,DISP=(SHR,KEEP)
//OUT01 DD DSNAME=DATASET6,DISP=(OLD,KEEP)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
COPYOPER COPY OUTDD=OUT01
INDD=IN01
EXCLUDE MEMBER=X
INDD=IN02
SELECT MEMBER=((F,Z),(C,A,R),(Y,,R))
/*
JSDPCPY가 실행되기 전에 DATASET6에는 멤버 A, K, Y가 있다. INDD=IN01에 의해 먼저 DATASET4가
복사되는데, EXCLUDE문에 의해 멤버 X는 제외하고, 멤버 B와 D가 복사된다. INDD=IN02에 의해
DATASET3이 복사된다. SELECT 문에 의해 멤버 F가 새로운 이름 Z로 복사되고, 멤버 C가 새로운 이름
A로 복사된다. 이때 DATASET6에 이미 멤버 A가 있으므로 내용을 오버라이드한다. 만약 REPLACE가 지
정되지 않았다면, 복사하지 않고 다음 처리로 넘어간다. 마지막으로 멤버 Y가 기존 멤버 Y를 오버라이드
한다.
다음 그림은 앞의 예제를 실행하면서 출력 데이터 셋에 멤버가 복사되는 과정과 최종 복사된 멤버를 보여
준다.
제2장 데이터 셋 유틸리티 73
[그림 2.3] 특정 멤버 복사
다음은 INDD 문을 사용하여 여러 개의 INPUT을 다르게 처리하는 경우의 예이다.
//INDD01 EXEC PGM=JSDPCPY
//IN01 DD DSNAME=DATASET11,DISP=(SHR,KEEP)
//IN02 DD DSNAME=DATASET12,DISP=(SHR,KEEP)
//IN03 DD DSNAME=DATASET13,DISP=(SHR,KEEP)
//OUT01 DD DSNAME=DATASET14,DISP=(OLD,KEEP)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
COPYOPER COPY OUTDD=OUT01
INDD=IN01
EXCLUDE MEMBER=B
INDD=IN02
SELECT MEMBER=((B,,R),(Y,N))
INDD=IN03
/*
IN01 DD에 정의된 데이터 셋 DATASET11로부터 멤버 B를 제외한 다른 멤버 A와 C를 복사한다. IN02 DD
에 정의된 데이터 셋 DATASET12로부터 멤버 B'를 교체하고, 멤버 Y의 이름을 바꾸어 N으로 복사한다.
IN03 DD에 정의된 데이터 셋 DATASET13으로부터 전체 멤버를 복사한다. 단, 같은 이름의 멤버가 이미
존재할 경우 교체하지 않는다.
74 OpenFrame 유틸리티 참조 안내서
[그림 2.4] INDD 문을 사용하여 INPUT 처리
다음은 COPY 문의 서브 명령어로 INDD를 사용하는 경우의 예이다.
//INDD02 EXEC PGM=JSDPCPY
//IN01 DD DSNAME=DATASET11,DISP=(SHR,KEEP)
//IN02 DD DSNAME=DATASET12,DISP=(SHR,KEEP)
//IN03 DD DSNAME=DATASET13,DISP=(SHR,KEEP)
//OUT01 DD DSNAME=DATASET14,DISP=(OLD,KEEP)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
COPYOPER COPY OUTDD=OUT01,INDD=(INO1,(IN02,R),IN03)
/*
IN01 DD에 정의된 데이터 셋 DATASET11로부터 전체 멤버를 복사한다. 단, 같은 이름의 멤버가 이미 존
재할 경우 교체하지 않는다. IN02 DD에 정의된 데이터 셋 DATASET12로부터 전체 멤버를 복사한다. 멤
버 B'은 교체된다. IN03 DD에 정의된 데이터 셋 DATASET13으로부터 전체 멤버를 복사한다. 같은 이름
의 멤버가 이미 존재할 경우 교체하지 않는다.
제2장 데이터 셋 유틸리티 75
[그림 2.5] COPY 문의 서브 명령어로 INDD를 사용하는 경우
유의사항
JSDPCPY 유틸리티 프로그램이 Batch 애플리케이션을 실행한 결과는 다음과 같다.
● 정상적으로 실행한 경우
Batch 애플리케이션에서 받은 코드를 반환한다.
● 에러가 발생한 경우
해당 에러 메시지를 SYSPRINT DD에 출력하고 에러에 해당하는 코드를 반환한다.
JSDPCPY 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.
설명코드
Unrecoverable 형태의 에러로, 다음의 경우가 해당된다.12
- OpenFrame 시스템 라이브러리 초기화 실패
- 데이터 셋 관련 (pgmdd, open/close, read/write) 에러
- SYSIN DD 명령어 문법 에러
- 기타 JSDPCPY 유틸리티 프로그램 에러
76 OpenFrame 유틸리티 참조 안내서
[참고]
다음과 같은 명령어 약어를 사용할 수 있다.
약어명령어
CCOPY
CPCOMPRESS
EPEXPAND
EMEMPTY
SSELECT
EEXCLUDE
OOUTDD
IINDD
AALIAS
LLIST
SSUPRESS
KKEYLEN
MMEMBER
GGROUP
2.4. JSDPRNT순차 데이터 셋이나 PDS의 전체 또는 일부를 실제 출력할 형식으로 데이터를 생성하기 위한 유틸리티 프
로그램이다.
JSDPRNT 유틸리티 프로그램은 다음과 같은 경우에 사용될 수 있다.
● 순차 데이터 셋 또는 PDS 전체를 프린트한다.
● PDS의 특정 멤버를 프린트한다.
● 순차 데이터 셋 또는 PDS의 레코드 필드를 편집하여 프린트한다.
DD 설정
DD 설정 항목은 다음과 같다.
설명항목
JSDPRNT 메시지가 저장되는 데이터 셋을 기술한다.SYSPRINT DD
제2장 데이터 셋 유틸리티 77
설명항목
순차 데이터 셋이나 PDS 타입의 입력 데이터 셋을 기술한다.SYSUT1 DD
순차 데이터 셋 타입의 출력 데이터 셋을 기술한다.SYSUT2 DD
JSDPRNT 명령어를 기술한다.SYSIN DD
명령어 설정
데이터를 프린트한다. PRINT 문은 가장 처음에 기술해야 하는 명령어로 여러 번 반복해서 지정할 수 없
다.
PRINT 명령어 구문은 다음과 같다.
[label] PRINT [PREFORM={A|M}]
[,TYPORG={PS|PO}]
[,TOTCONV={XE+PZ|XC}]
[,ORDER={DIR|TTR}]
[,CNTRL={n]
[,STRTAFT=n]
[,STOPAFT=n]
[,SKIP=n]
[,MAXNAME=n]
[,MAXFLDS=n]
[,MAXGPS=n]
[,MAXLITS=n]
[,INITPG=n]
[,MAXLINE=n]
[,CDSEQ=n]
[,CDINCR=n]
[,EXPAND=YES]
설명항목
각 레코드의 1번째 Byte가 제어 문자를 의미하는지 기술한다.PREFORM
데이터가 이미 프린트될 포맷으로 갖추었고 그 형태로 프린트 되어야 한다는 것을 의
미한다. PREFORM이 기술되면 TYPORG를 제외한 추가적인 PRINT 문의 모든 파라
미터 설정은 무시된다.
- A: ASA 제어 문자를 의미한다
- M: 지원하지 않는다.
입력 데이터 셋이 순차 데이터 셋(PS)인지 분할 데이터 셋(PO)인지 기술한다. 기본값
은 PS이다.
TYPORG
78 OpenFrame 유틸리티 참조 안내서
설명항목
입력 데이터 셋을 변환하여 출력할 경우 기술하는 항목으로 미지원 기능이다.TOTCONV
출력하는 멤버의 순서를 지정하는 항목으로 미지원 기능이다.ORDER
라인 스페이스 값을 설정한다.CNTRL
라인 스페이스로 3을 설정할 경우 1번째 라인에는 데이터를 쓰고, 2번째와 3번째 라
인에는 공백 라인을 프린트한다. 이와 같은 순서로 다음 데이터도 프린트된다.
현재는 라인 스페이스 값을 3까지만 허용한다. 허용범위 이외의 값은 모두 1로 인식
하여 처리하게 된다.
미지원 기능이다.
순차 데이터 셋을 프린트하기 전 스킵할 논리 레코드의 개수를 지정한다. 데이터 셋의
n+1번째 논리 레코드부터 프린트된다.
STRTAFT
레코드의 범위는 32767를 초과하지 않으며, 초과할 경우 레코드가 있는 만큼만 처리
하게 된다.
n은 1 ~ 32767까지 지정할 수 있다.
프린트되어야 할 순차 데이터 셋의 논리 레코드 개수를 지정한다. 최대 32767개의 논
리 레코드를 설정할 수 있다.
STOPAFT
만일 STOPAFT 문과 RECORD 문의 IDENT가 함께 기술되었다면 STOPAFT에 설정
된 값을 만족하거나 IDENT에 의해 구분되는 레코드 그룹의 마지막일 때, 둘 중 먼저
해당되는 쪽이 나타났을 때, 현재 입력 데이터 셋의 데이터 처리를 위한 명령어 수행
이 종료된다.
n은 1 ~ 32767까지 지정할 수 있다.
n번째 레코드마다 프린트되어야 함을 의미한다. n은 1 ~ 32767까지 지정할 수 있다.SKIP
MEMBER 문의 최대 멤버 개수를 지정한다. n은 21 ~ 32767까지 지정할 수 있다. (기
본값: 20)
MAXNAME
RECORD 문의 최대 FIELD 파라미터 개수를 지정한다. n은 21 ~ 32767까지 지정할
수 있다. (기본값: 20)
MAXFLDS
최대 IDENT 파라미터 개수를 지정한다. n은 21 ~ 32767까지 지정할 수 있다. (기본
값: 20)
MAXGPS
RECORD 문의 IDENT 파라미터에 포함될 최대 리터럴 개수를 지정한다. n은 201 ~
32767까지 지정할 수 있다. (기본값: 200)
MAXLITS
인쇄를 시작할 페이지 번호를 지정하는 항목으로 미지원 기능이다.INITPG
출력될 페이지의 최대 라인 수를 지정한다. (기본값: 60)MAXLINE
천공하는 경우 73~80란에 순서 번호의 초기치를 지정하는 항목으로 미지원 기능이
다.
CDSEQ
제2장 데이터 셋 유틸리티 79
설명항목
천공하는 경우 73~80란에 순서 번호의 증가치를 지정하는 항목으로 미지원 기능이
다.
CDINCR
압축 형식을 고정 형식으로 인쇄할 경우에 지정하는 항목으로 미지원 기능이다.EXPAND
MEMBER
입력 데이터 셋이 PDS일 경우 특정 멤버의 데이터만 처리하고자 할 때 사용한다.
MEMBER 명령어 구문은 다음과 같다.
[label] MEMBER NAME=membername
설명항목
PDS에서 프린트되어야 할 멤버 이름을 기술한다.NAME
RECORD
프린트되어야 할 레코드의 그룹을 정의한다.
RECORD 명령어 구문은 다음과 같다.
[label] RECORD [IDENT=(length,'name',input-location)]
[,FIELD=(length,[input-location],[conversion]
[,output-location])]
[,FIELD=…]
설명항목
레코드 그룹의 마지막 레코드를 식별한다. 레코드의 input-location에서 length만큼의
값과 name 값을 비교하여 값이 같으면 멤버의 마지막 레코드가 되거나 FIELD가 적
용되는 마지막 레코드가 된다.
IDENT
- length: 마지막 레코드를 식별하기 위한 길이를 지정한다. 최대 8 Byte까지 지정할
수 있다.
- 'name': 마지막 레코드를 식별하기 위한 값으로 반드시 작은 따옴표(‘) 안에 기술되
어야 한다.
- input-location: 입력 레코드에서 name 값과 처리하고자 하는 데이터의 마지막 레코
드를 식별할 필드의 1번째 시작위치를 지정한다.
레코드 편집을 위한 정보를 기술한다. 입력 레코드에서 input-location 위치부터 length
만큼의 데이터를 출력 레코드의 output-location 위치에 쓰거나 리터럴을 length만큼
출력 레코드의 output-location 위치에 쓴다.
FIELD
80 OpenFrame 유틸리티 참조 안내서
설명항목
- length: 편집되어 처리되는 입력 필드의 길이 또는 리터럴의 길이를 기술한다.
- input-location: 처리되는 필드의 시작위치를 기술한다.
- output-location: 출력 레코드에 기록될 시작위치를 지정한다.
현재 JSDPRNT 유틸리티의 RECORD 명령어에서는 해당 파라미터에 대해 실제 기
능은 하지 않으나 에러를 발생시키지 않도록 지원하고 있으며, PZ, XE 이외의 값이
사용될 경우 문법 에러가 발생한다.
CONVERSION
TITLE
출력되어야 할 타이틀이나 서브 타이틀을 기술한다.
JSDPRNT에서는 TITLE 문에서 2개의 ITEM을 기술할 수 있다. 1번째 ITEM 문은 타이틀을, 2번째 ITEM
문은 서브 타이틀을 정의한다. 기술된 타이틀과 서브 타이틀은 매 페이지마다 출력된다.
TITLE 명령어 구문은 다음과 같다.
[label] TITLE ITEM=('title'[,output-location])
[,ITEM=...]
설명항목
title과 output-location은 다음과 같이 설정한다.ITEM
- title: 타이틀이나 서브 타이틀에 대한 리터럴을 기술한다. 최대 40 Byte까지 지정할
수 있다.
- output-location: 출력 레코드에서 ITEM의 리터럴이 놓여져야 할 위치를 지정한다.
EXITS
유저 출구 루틴을 다룰 때 기술한다. 지원하지 않는 명령어이다.
LABELS
유저 라벨을 다룰 때 기술한다. 지원하지 않는 명령어이다.
사용예제
다음은 특정 멤버만 선택하여 지정한 프린트 형식으로 데이터를 출력하는 예이다. JSDPRNT.TEST.INPUT01
의 멤버 중 MEMBER2의 레코드가 순차적으로 SYSUT2에 정의된 SYSOUT으로 출력된다.
제2장 데이터 셋 유틸리티 81
만일 MEMBER2의 레코드의 21번째 Byte부터 8Byte의 값이 'ENDOFREC'이면 이 레코드까지만 출력한
다. 이 SYSOUT은 JOB이 종료된 후 OUTPUT PROCESSING을 통해 프린터기에서 프린트되며 이 데이
터는 한 페이지에 30 라인씩 프린트된다.
//TEST JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//NEWPDS EXEC PGM=JSDPRNT
//SYSUT1 DD DSNAME=JSPRNT.TEST.INPUT01,DISP=(SHR,CATLG)
//SYSUT2 DD SYSOUT=A
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
PRINT MAXLINE=30
MEMBER NAME=MEMBER2
RECORD IDENT=(8,'ENDOFREC',21)
/*
유의사항
JSDPRNT 유틸리티 프로그램이 Batch 애플리케이션을 실행한 결과는 다음과 같다.
● 정상적으로 실행한 경우
Batch 애플리케이션에서 받은 코드를 반환한다.
● 에러가 발생한 경우
해당 에러 메시지를 SYSPRINT DD에 출력하고 에러에 해당하는 코드를 반환한다.
JSDPRNT 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.
설명코드
지정된 멤버가 PDS에 존재하지 않는 경우에 발생한다.8
해당 멤버를 넘기고 처리를 속행한다.
Unrecoverable 형태의 에러로, 다음의 경우가 해당된다.12
- OpenFrame 시스템 라이브러리 초기화 실패
- 데이터 셋 관련 (pgmdd, open/close, read/write) 에러
- SYSIN DD 명령어 문법 에러
- 기타 JSDPRNT 유틸리티 프로그램 에러
82 OpenFrame 유틸리티 참조 안내서
2.5. JSDSCPY순차 데이터 셋 또는 PDS의 멤버를 복사하고자 할 때 사용하는 유틸리티 프로그램이다.
JSDSCPY 유틸리티 프로그램으로 다음과 같은 기능을 수행할 수 있다.
● 순차 데이터 셋이나 PDS의 멤버를 복사한다.
● 순차 데이터 셋으로부터 PDS를 생성한다.
● 기존의 PDS에 멤버를 추가한다.
● 입력 레코드를 편집한다.
DD 설정
DD 설정 항목은 다음과 같다.
설명항목
JSDSCPY의 메시지가 저장되는 데이터 셋을 정의한다.SYSPRINT DD
입력 데이터 셋을 정의하며, 순차 데이터 셋이나 PDS의 멤버가 될 수 있다.SYSUT1 DD
출력 데이터 셋을 정의하며, 순차 데이터 셋이나 PDS의 멤버 또는 PDS가 될
수 있다.
SYSUT2 DD
JSDSCPY의 명령어를 정의한다.SYSIN DD
명령어 설정
JSDSCPY 유틸리티가 제공하는 기능을 수행하기 위한 명령어를 SYSIN DD에 기술한다. SYSIN DD에 어
떠한 명령어도 기술되지 않은 경우는 SYSUT1의 데이터 셋을 SYSUT2의 데이터 셋으로 복사하는 기능을
제공한다.
다음은 SYSIN DD에서 설정하는 JSDSCPY의 명령어이다.
GENERATE
MEMBER와 RECORD의 매개변수에 대한 설정을 한다.
GENERATE 명령어의 구문은 다음과 같다.
[label] GENERATE [,MAXNAME=n]
[,MAXFLDS=n]
[,MAXGPS=n]
제2장 데이터 셋 유틸리티 83
[,MAXLITS=n]
[,LENGTH=n]
설명항목
최대 멤버 수를 지정한다. 21 ~ 3276개의 멤버를 지정할 수 있다. (기본값: 20)MAXNAME
레코드의 최대 필드 수를 지정한다. 21 ~ 2730개까지 지정할 수 있다. (기본값: 20)MAXFLDS
미지원 기능이다.
레코드의 최대 IDENT 개수를 지정한다. 21 ~ 2730개까지 지정할 수 있다. (기본값:
20)
MAXGPS
미지원 기능이다.
레코드의 필드에서 사용되는 리터럴의 최대 캐릭터 개수를 지정한다. 201 ~ 32767개
까지 지정할 수 있다. (기본값: 20)
MAXLITS
미지원 기능이다.
고정형식의 레코드를 연결 혹은 잘라 버릴 때 레코드 길이를 지정한다. 1 ~ 32760까
지 지정할 수 있다.
LENGTH
미지원 기능이다.
RECORD
입력 레코드에 대해서 어떻게 처리할 것인지 조건을 기술한다.
RECORD 명령어의 구문은 다음과 같다.
[label] RECORD [IDENT=(length,'name',input-location)]
[,FIELD=([length],
[{input-location|'literal'}],
[conversion],
[output-location]
[,output-length])]
[,FIELD=...]
[,FILL={'literal'|X'literal')]
[,LABELS=n]
설명항목
MEMBER 문이 RECORD 문 전에 나왔을 경우 그 멤버에 복사될 입력 레코드에 대한
조건을 나타내고 같은 레코드의 FIELD에 대해서 적용될 입력 레코드를 구별한다.
IDENT
레코드의 input-location에서 length 만큼의 값과 name 값을 비교하여 값이 같으면 멤
버의 마지막 레코드가 되거나 FIELD가 적용되는 마지막 레코드가 된다.
84 OpenFrame 유틸리티 참조 안내서
설명항목
- length: name을 식별하기 위한 길이를 최대 8 Byte까지 지정할 수 있다.
- 'name': 마지막 레코드를 식별하기 위한 값으로서 반드시 작은 따옴표(') 안에 기술
되어야 한다.
- Input-location: 입력 레코드에서 name값과 비교할 FIELD의 1번째 시작위치를 지정
한다.
레코드 편집을 위한 정보를 기술한다.FIELD
입력 레코드에서 input-location 위치부터 length 만큼의 데이터를 출력 레코드의 output-
location 위치에 쓰거나 리터럴을 length만큼 출력 레코드의 output-location 위치에 쓴
다.
- length: 처리되는 입력 필드의 길이 또는 리터럴의 길이를 기술한다.
- input-location: 처리되는 필드의 시작위치를 지정한다.
- 'literal': output-location에 위치해야 하는 리터럴을 지정한다.
- conversion: 파라미터로 PZ, ZP를 사용할 수 있으나 해당 기능은 무시되며 이외의
값을 사용할 경우 구문 에러가 발생한다.
- output-location: 출력 레코드에 쓰여질 시작 위치를 지정한다.
- output-length: 출력 필드의 길이를 지정한다. 해당 기능은 지원되지 않는다.
미지원 기능이다.FILL
미지원 기능이다.LABELS
MEMBER
PDS의 여러 멤버를 가지고 출력 레코드가 생성될 경우, 생성할 멤버 개수만큼 MEMBER 문이 필요하다.
MEMBER 명령어의 구문은 다음과 같다.
[label] MEMBER NAME=(name[,alias1][,alias2][,...])
설명항목
생성할 멤버의 이름을 기술한다.NAME
참고
현재 JSDSCPY 유틸리티의 MEMBER 문 중 alias#는 실제 기능은 하지 않으나 에러를 발생시키지
않도록 지원하고 있다.
제2장 데이터 셋 유틸리티 85
EXITS
유저 출구 루틴을 다룰 때 기술한다. 지원하지 않는 명령어이다.
LABELS
유저 라벨을 다룰 때 기술한다. 지원하지 않는 명령어이다.
사용예제
다음은 순차 데이터 셋을 복사하는 예이다.
SYSIN DD에 명령어가 기술되어있지 않으므로 순차 데이터 셋인 TEST.INPUT을 TEST.COPY로 복사하
고, JSDSCPY의 메시지는 JOB에서 사용하는 메시지 클래스에 저장한다.
//COPY JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//COPYSDS EXEC PGM=JSDSCPY
//SYSUT1 DD DSNAME=TEST.INPUT,DISP=(SHR,KEEP)
//SYSUT2 DD DSNAME=TEST.COPY,DISP=(NEW,CATLG),
// DCB=(RECFM=FB,LRECL=120 ,BLKSIZE=120)
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY
다음은 순차 데이터 셋으로 새 멤버를 갖는 PDS를 구성하는 예이다.
순차 데이터 셋인 TEST.INPUT을 MEMBER1, MEMBER2, MEMBER3으로 나누어 새로 생성한 PDS
TEST.PDS01에 저장한다.
//CREATE JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//NEWPDS EXEC PGM=JSDSCPY
//SYSUT1 DD DSNAME=TEST.INPUT,DISP=(SHR,KEEP)
//SYSUT2 DD DSNAME=TEST.PDS01,DISP=(NEW,CATLG),
// DCB=(DSORG=PO,RECFM=FB,LRECL=120,BLKSIZE=120)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
MEMBER NAME=MEMBER1
GROUP1 RECORD IDENT=(8,'firstxxx',30)
MEMBER NAME=MEMBER2
GROUP2 RECORD IDENT=(8,'secondxx',30)
MEMBER NAME=MEMBER3
/*
86 OpenFrame 유틸리티 참조 안내서
TEST.INPUT에서 입력 레코드의 30번째 위치부터 37번째까지의 값을 순차 검색하여 ‘firstxxx’인 레코드
가 나타나면 ‘firstxxx’ 레코드를 포함하여 현재까지 검색된 레코드를 MEMBER1에 복사한다. 그리고 ‘firstxxx’
레코드 다음 레코드부터 다시 ‘secondxx’ 레코드를 검색하기 시작한다.
‘secondxx’ 레코드가 검색되면 ‘firstxxx’ 레코드 이후부터 ‘secondxx’ 레코드를 포함하여 검색한 모든 레코
드를 MEMBER2에 복사하고 ‘secondxx’ 레코드 이후의 모든 레코드는 MEMBER3에 복사된다.
다음은 기존의 PDS에 멤버를 추가하는 예이다.
//MERGE JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//MERGEPDS EXEC PGM=JSDSCPY
//SYSUT1 DD DSNAME=TEST.INPUT2,DISP=(SHR,KEEP)
//SYSUT2 DD DSNAME=JSDSCPY.TEST.PDS01,DISP=(OLD,KEEP)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
MEMBER NAME=MEMX
GROUP1 RECORD IDENT=(8,'endofrec',15)
MEMBER NAME=MEMY
/*
순차 데이터 셋인 TEST.INPUT2의 레코드에서 15번째 Byte부터 22번째 Byte까지 레코드의 값을 ‘endofrec’
와 비교하여 값이 일치하면 검색한 모든 레코드를 MEMX에 복사하고, ‘endofrec’ 레코드 이후의 모든 레코
드는 MEMY에 복사한다. 그리고 기존의 PDS TEST.PDS01에 PDS 멤버로 MEMX와 MEMY를 추가한다.
다음은 입력 레코드를 수정하는 예이다.
TEST.INPUT3 레코드를 수정하여 TEST.EDIT0로 복사한다.
//EDIT JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//EDIT EXEC PGM=JSDSCPY
//SYSUT1 DD DSNAME=TEST.INPUT3,DISP=(SHR,KEEP)
//SYSUT2 DD DSNAME=TEST.EDIT0,DISP=(NEW,CATLG),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=80)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
RECORD IDENT=(8,'firstmem',1),FIELD=(50,76,,31),
FIELD=(30,20,,1)
RECORD FIELD=(70,41,,11),FIELD=(10,'**********',,1)
/*
앞의 예제에서 2개의 RECORD 문 중 1번째 RECORD의 IDENT 조건에 의해서 순차적으로 입력 레코드
의 1번째 Byte부터 8 Byte의 값으로 'firstmem'이 나올 때까지 모든 레코드에 대해 FIELD 조건을 적용한다.
즉, 다음 그림과 같이 입력 레코드의 76번째 Byte 위치부터 50 Byte 길이만큼의 값을 출력 레코드의 31번
째 Byte 위치에 복사하고 입력 레코드의 20번째 Byte 위치부터 30 Byte 길이의 값을 출력 레코드의 1번째
Byte 위치에 복사한다.
제2장 데이터 셋 유틸리티 87
[그림 2.6] 1번째 입력 레코드 필드 복사
IDENT 조건에 맞는 레코드가 처리되고 난 다음부터는 2번째 RECORD 문이 다음 그림과 같이 적용된다.
입력 레코드의 41번째 Byte 위치부터 70 Byte 길이만큼의 값을 출력 레코드의 11번째 Byte 위치에 복사하
고 출력 레코드의 처음 10 Byte는 리터럴 ‘**********'로 복사한다.
[그림 2.7] 2번째 입력 레코드 필드 복사
유의사항
JSDSCPY 유틸리티 프로그램이 Batch 애플리케이션을 실행한 결과는 다음과 같다.
● 정상적으로 실행한 경우
Batch 애플리케이션에서 받은 코드를 반환한다.
● 에러가 발생한 경우
해당 에러 메시지를 SYSPRINT DD에 출력하고 에러에 해당하는 코드를 반환한다.
JSDSCPY 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.
설명코드
Unrecoverable 형태의 에러로, 다음의 경우가 해당된다.12
- 데이터 셋 관련 (pgmdd, open/close, read/write) 에러
- SYSIN DD 명령어 문법 에러
88 OpenFrame 유틸리티 참조 안내서
설명코드
- OpenFrame 시스템 라이브러리 초기화 실패
- 기타 JSDSCPY 유틸리티 프로그램 에러
2.6. JSDUPDT리소스(애플리케이션 소스, JCL 소스 등)를 신규 생성, 갱신, 복사 등을 수행하는 유틸리티이다.
각 레코드는 순서 번호를 붙일 수 있으며 이 순서 번호에 따라 각 레코드의 내용을 변경하거나, 삭제하거
나, 삽입할 수 있다.
JSDUPDT 유틸리티 프로그램으로 다음과 같은 기능을 수행할 수 있다.
● PDS를 신규 생성한다.
● PDS의 멤버를 복사, 치환한다.
● PDS 멤버의 레코드를 편집한다.(레코드 치환, 추가, 삭제, 순서 번호 부여)
파라미터 설정
다음은 JSDUPDT에서 설정할 수 있는 파라미터이다.
//EXEC PGM=JSDUPDT[,PARM={NEW|MOD}]
설명항목
데이터 셋을 신규 생성하는 경우에 지정한다. DD 설정 항목의 SYSUT1 DD
항목을 생략할 수 있다.
NEW
기존 데이터 셋을 수정하는 경우에 지정한다. DD 설정 항목의 SYSUT1 DD
항목은 반드시 존재해야 한다. (기본값)
MOD
DD 설정
DD 설정 항목은 다음과 같다.
설명항목
입력 데이터 셋을 기술한다.SYSUT1 DD
출력 데이터 셋을 기술한다.SYSUT2 DD
제2장 데이터 셋 유틸리티 89
설명항목
JSDUPDT의 명령어를 기술한다.SYSIN DD
명령어 설정
다음은 SYSIN DD에서 설정하는 JSDUPDT의 명령어이다.
JSDUPDT의 모든 명령은 "./" 기호로 시작한다. 그렇지 않은 문장은 DATA 문장으로 취급한다.
ADD, REPL, REPRO, CHANGE
입력 데이터 셋로부터 레코드를 추가하거나, 치환하거나, 복사하거나 편집하여 출력 데이터 셋에 레코드
를 작성한다.
ADD, REPL, REPRO, CHANGE 명령어의 구문은 다음과 같다.
./[label] FUNC [NAME=member-name]
[,LIST=ALL]
[,SEQFLD=nnn]
[,F=lang-identification]
[,PART={YES|literal}]
[,COLUMN=n]
[,UPDATE=INPLACE]
[,NEW={PO|PS}]
[,MEMBER=member-name]
[,LEVEL=n]
[,STATUS=status-info]
[,INHDR=routine-name]
[,INTLR=routine-name]
[,OUTHDR=routine-name]
[,OUTTLR=routine-name]
[,TOTAL=(routine-name, size)]
설명항목
ADD, REPL, REPRO CHANGE를 기술한다.FUNC
신규, 복사, 편집, 치환을 하는 경우 출력 PDS의 멤버명을 지정한다.NAME
출력 데이터 셋으로 출력되는 모든 레코드를 SYSPRINT로 출력하는 항목으로 미지
원 기능이다.
LIST
순서 번호의 위치와 길이를 지정한다.SEQFLD
앞에 2자리 수로 위치를 뒤에 1자리 수로 길이를 지정한다. 위치는 1 ~ 80까지 길이는
1 ~ 8까지 지정할 수 있다. 기본값은 738이다.
언어 식별자를 지정하는 항목으로 미지원 기능이다.F
90 OpenFrame 유틸리티 참조 안내서
설명항목
미지원 기능이다.PART
레코드의 데이터를 치환할 위치를 지정한다.COLUMN
입력 데이터 셋과 출력 데이터 셋이 동일하여, 해당 데이터 셋 내에서 변경이 일어나
는 경우 지정한다.
UPDATE
입력 데이터 셋과 출력 데이터 셋의 DSORG가 다를 경우 출력 데이터 셋의 DSORG
를 지정한다.
NEW
SDS로부터 PDS로 출력하는 경우에 멤버명을 지정한다.MEMBER
출력 데이터 셋이 PDS인 경우 체인지 레벨을 지정하는 항목으로 미지원 기능이다.LEVEL
출력 데이터 셋이 PDS인 경우 체인지 레벨과 일자를 지정하는 항목으로 미지원 기능
이다.
STATUS
입력 유저 표제 라벨 처리 루틴을 지정하는 항목으로 미지원 기능이다.INHDR
입력 유저 마지막 라벨 처리 루틴을 지정하는 항목으로 미지원 기능이다.INTLR
출력 유저 표제 라벨 처리 루틴을 지정하는 항목으로 미지원 기능이다.OUTHDR
출력 유저 마지막 라벨 처리 루틴을 지정하는 항목으로 미지원 기능이다.OUTTLR
토탈 루틴과 영역의 크기를 지정하는 항목으로 미지원 기능이다.TOTAL
NUMBER, DELETE
NUMBER는 순서 번호를 새로 붙이거나 다시 붙이는 경우에 이용한다.
DELETE는 지정된 순서번호에 해당하는 레코드를 삭제할 때 이용한다.
NUMBER, DELETE 명령어의 구문은 다음과 같다.
./[label] NUMBER [NEW1=n]
[,INCR=n]
[,SEQ1={n|ALL}]
[,SEQ2=n]
[,INSERT=YES]
./[label] DELETE SEQ1=n
[,SEQ2=n]
설명항목
순서 번호를 작성하는 경우의 초기치를 지정한다.NEW1
순서 번호를 작성하는 경우의 증가치를 지정한다.INCR
CHANGE를 시작하는 순서 번호를 지정한다. CHANGE 문에서만 유효하다.SEQ1
INSERT=YES와 함께 지정된 경우, 새로 추가되는 레코드의 위치를 지정한다.
제2장 데이터 셋 유틸리티 91
설명항목
전체 레코드를 대상으로 할 때 ALL을 지정한다.
CHANGE를 종료하는 순서 번호를 지정한다. CHANGE 문에서만 유효하다.SEQ2
1개의 레코드를 삭제하는 경우에 생략할 수 있다.
순서 번호가 없는 레코드를 새로 추가하는 경우 SEQ1에 지정된 순서 번호 다음부터
레코드를 추가한다.
INSERT
ENDUP
SYSIN 입력의 마지막을 나타낸다.
./[label] ENDUP
MASK
레코드에 캐릭터 라인을 붙일 때 지정한다. 지원하지 않는 명령어이다.
ALIAS
ALIAS를 다룰 때 기술한다. 지원하지 않는 명령어이다.
LABEL
유저 라벨을 다룰 때 기술한다. 지원하지 않는 명령어이다.
사용예제
다음은 새로운 PDS와 멤버를 생성하는 예제이다.
//JSDUPDT1 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSDUPDT
//SYSPRINT DD SYSOUT=A
//SYSUT2 DD DSNAME=NEWPDS,DISP=(NEW,CATLG),
// VOLUME=SER=DEFVOL,SPACE=(TRK,(50,,10)),
// DCB=(RECFM=F,LRECL=80,BLKSIZE=80)
//SYSIN DD DATA
./ ADD NAME=MEMB1
MEMB1 DATA1 00000010
MEMB1 DATA2 00000020
MEMB1 DATA3 00000030
./ ADD NAME=MEMB2
92 OpenFrame 유틸리티 참조 안내서
MEMB2 DATA1 00000010
MEMB2 DATA2 00000020
MEMB2 DATA3 00000030
./ ADD NAME=MEMB3
MEMB3 DATA1 00000010
MEMB3 DATA2 00000020
MEMB3 DATA3 00000030
./ ENDUP
/*
1번째 ADD 문장은 MEMB1이라는 멤버를 생성하고 그 다음에 나오는 DATA 문장을 레코드로 갖는다.
2번째 ADD 문장은 MEMB2이라는 멤버를 생성하고 그 다음에 나오는 DATA 문장을 레코드로 갖는다.
3번째 ADD 문장은 MEMB3이라는 멤버를 생성하고 그 다음에 나오는 DATA 문장을 레코드로 갖는다.
다음은 새로운 PDS에 기존 PDS의 멤버를 복사하고 새로 추가하는 예제이다.
//JSDUPDT2 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSDUPDT
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSNAME=OLDPDS,DISP=SHR
//SYSUT2 DD DSNAME=NEWPDS,DISP=(NEW,CATLG),
// VOL=SER=DEFVOL,SPACE=(TRK,(100,,10)),
// DCB=(RECFM=F,LRECL=80,BLKSIZE=4000)
//SYSIN DD DATA
./ REPRO NAME=MEMB1
./ REPRO NAME=MEMB2
./ ADD NAME=MEMB3
./ NUMBER NEW1=100,INCR=100
MEMB3 DATA1
MEMB3 DATA2
MEMB3 DATA3
./ ENDUP
/*
1번째 REPRO 문장은 OLDPDS의 멤버 MEMB1을 NEWPDS로 복사한다.
2번째 REPRO 문장은 OLDPDS의 멤버 MEMB2을 NEWPDS로 복사한다.
ADD 문장은 MEMB3이라는 멤버를 생성하고 5 ~ 7번째 줄 DATA문장을 레코드로 갖는다. NUMBER 문에
의해 각 레코드는 100부터 100씩 증가하는 순서 번호를 갖게 된다.
다음은 기존 PDS의 멤버에 순서 번호를 새로 작성하고, 일부 레코드를 치환하는 예이다.
//JSDUPDT3 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSDUPDT
제2장 데이터 셋 유틸리티 93
//SYSPRINT DD SYSOUT=A
//SYSUT1 DD DSNAME=OLDPDS,DISP=(OLD,KEEP),VOL=SER=DEFVOL
//SYSIN DD *
./ CHANGE NAME=MEMB1,UPDATE=INPLACE
./ NUMBER SEQ1=ALL,NEW1=100,INCR=50
CHANGE DATA1 00000200
CHANGE DATA2 00000600
./ ENDUP
/*
1번째 CHANGE 문장은 MEMB1에 대해 입력 데이터 셋 내에서 변경이 일어나도록 지정한다.
NUMBER 문장은 MEMB1의 모든 레코드에 대해 순서 번호를 새로 작성하도록 한다. 각 레코드는 100부
터 50씩 증가하는 순서 번호를 갖는다.
DATA 문장들은 고유의 순서 번호를 가지고 있다. 순서 번호를 새로 작성하기 전 기준으로 기존 레코드를
찾아 해당 레코드로 교체한다.
다음은 PDS의 멤버를 편집하여 SDS로 출력하는 예이다.
//JSDUPDT4 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSDUPDT
//SYSPRINT DD SYSOUT=A
//SYSUT1 DD DSNAME=PDS,DISP=(OLD,KEEP),VOL=SER=DEFVOL
//SYSUT2 DD DSNAME=SDS,DISP=(NEW,KEEP),VOL=SER=DEFVOL,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=2000)
//SYSIN DD *
./ CHANGE NEW=PS,NAME=MEMB1
CHANGE DATA1 00000200
./ DELETE SEQ1=250,SEQ2=300
DELETE DATA2 00000275
./ ENDUP
/*
1번째 CHANGE 문장은 PDS의 멤버 MEMB1에 대해 SDS로 출력할 것을 지정한다.
1번째 DATA 문장은 순서 번호 200을 갖는 레코드에 대해 해당 데이터로 교체할 것을 지정한다.
1번째 DELETE 문장은 순서 번호 250부터 300까지의 레코드를 삭제할 것을 지정한다.
2번째 DATA 문장은 순서 번호 275를 갖는 레코드를 추가할 것을 지정한다. 앞서 250부터 300까지의 레
코드가 삭제되었으므로 교체가 아닌 추가 작업이 이루어진다.
다음은 PDS의 멤버에 새로운 레코드를 추가하는 예이다.
//JSDUPDT5 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSDUPDT
//SYSPRINT DD SYSOUT=A
94 OpenFrame 유틸리티 참조 안내서
//SYSUT1 DD DSNAME=PDS,DISP=(OLD,KEEP),VOL=SER=DEFVOL
//SYSUT2 DD DSNAME=PDS,DISP=(OLD,KEEP),VOL=SER=DEFVOL
//SYSIN DD *
./ CHANGE NAME=MEMB1
./ NUMBER SEQ1=150,NEW1=200,INCR=50,INSERT=YES
INSERT DATA1
INSERT DATA2
INSERT DATA3
/*
CHANGE 문장은 PDS의 멤버 MEMB1에 대해 변경이 이루어짐을 지정한다.
NUMBER 문장은 순서 번호가 150인 레코드 다음부터 새로운 레코드를 추가하며 새로운 레코드는 200부
터 50씩 증가하게 된다는 것을 지정한다.
DATA 문장들은 위의 요건에 따라 각각 200, 250, 300의 순서 번호가 부여되어 추가된다.
기존에 200 ~ 300 사이의 순서 번호를 가진 레코드가 있다면 위의 DATA 문장과 마찬가지로 새로 추가된
순서번호 300 이후로 50씩 증가한 번호로 변경된다. 이러한 변경은 앞서 변경된 레코드의 순서번호가 다
음 레코드의 순서 번호보다 작을 때까지 반복된다.
유의사항
JSDUPDT 유틸리티 프로그램이 Batch 애플리케이션을 실행한 결과는 다음과 같다.
● 정상적으로 실행한 경우
Batch 애플리케이션에서 받은 코드를 반환한다.
● 에러가 발생한 경우
해당 에러 메시지를 SYSPRINT DD에 출력하고 에러에 해당하는 코드를 반환한다.
JSDUPDT 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.
설명코드
Unrecoverable 형태의 에러로, 다음의 경우가 해당된다.12
- 데이터 셋 관련 (pgmdd, open/close, read/write) 에러
- SYSIN DD 명령어 문법 에러
- OpenFrame 시스템 라이브러리 초기화 실패
- 기타 JSDUPDT 유틸리티 프로그램 에러
제2장 데이터 셋 유틸리티 95
2.7. JSFCTLGNon-VSAM 데이터 셋을 삭제하거나 카탈로그 또는 언카탈로그를 하기 위해 사용하는 유틸리티 프로그램
이다.
JSFCTLG 시스템 유틸리티 프로그램으로 다음과 같은 기능을 수행할 수 있다.
● 데이터 셋 또는 PDS의 멤버를 해당 볼륨에서 물리적으로 삭제
● 데이터 셋의 카탈로그나 언카탈로그
참고
OpenFrame의 JSFCTLG 유틸리티 프로그램은 현재 Hitachi VOS3시스템의 JSFCTLG 유틸리티가
제공하는 RENAME 문, ADD 문, REPLACE 문, DELETEP 문, LIST 문은 지원하지 않고 있다.
DD 설정
DD 설정 항목은 다음과 같다.
설명항목
JSFCTLG의 메시지가 저장되는 데이터 셋을 지정한다.SYSPRINT DD
JSFCTLG에서 사용하는 명령어를 기술한다.SYSIN DD
명령어 설정
SCRATCH
디스크 볼륨에 저장된 데이터 셋이나 PDS의 멤버를 삭제한다. SCRATCH 대상 데이터 셋이 카탈로그에
등록되어있는 경우 카탈로그 정보도 함께 삭제한다.
SCRATCH 명령어 구문 다음과 같다.
[label] SCRATCH {VTOC|DSN[AME]=name}
[,VOL[UME]=device=volser]
[,MEMBER=name]
[,PURGE]
[,{SYS|FORCE}]
설명항목
VOLUME 문에서 지정한 볼륨에 존재하는 모든 데이터 셋을 삭제하고자 할 때
지정한다.
VTOC
96 OpenFrame 유틸리티 참조 안내서
설명항목
삭제하고자 하는 데이터 셋 이름을 지정한다.DSNAME=name
삭제하고자 하는 데이터 셋의 볼륨을 지정한다. 삭제 대상 데이터 셋이 카탈로그
되어 있는 경우 생략이 가능하다. device는 볼륨의 디바이스 이름을 지정하게 되
나 문법을 맞추기 위한 것으로 실제로는 무시된다.
VOLUME=de
vice=volser
PDS의 멤버만 삭제하고자 할 때 사용하며, 삭제하고자 하는 멤버의 이름을 지정
한다.
MEMBER=name
만료 일자에 이르지 않은 데이터 셋도 삭제하고자 할 때 지정하는 항목으로 미지
원 기능이다.
PURGE
임시 데이터 셋만을 삭제하고자 할 때 지정한다. 예를 들어, 데이터 셋 이름이 앰
퍼샌드(&) 문자로 시작하면 임시 데이터 셋으로 간주되어 삭제 대상이 된다.
SYS
이 항목은 VTOC을 지정했을 때에만 유효하다.
지정한 볼륨의 모든 데이터 셋을 삭제하는 경우 삭제 전 출력되는 오퍼레이터 응
답 메시지를 생략할 때 지정하는 항목으로 미지원 기능이다.
FORCE
CATLG
카탈로그에 Non-VSAM 데이터 셋의 VTOC 기본정보를 등록한다.
CATLG 명령어 구문은 다음과 같다.
[label] CATLG DSN[AME]=name
,VOL[UME]=device=volser
설명항목
카탈로그에 등록할 데이터 셋 이름을 지정한다.DSNAME=name
카탈로그 대상 데이터 셋이 존재하는 볼륨을 지정한다. device는 볼륨의 디바이
스 이름을 지정하게 되나 문법을 맞추기 위한 것으로 실제로는 무시된다.
VOLUME=de
vice=volser
UNCATLG
카탈로그에 등록되어 있는 Non-VSAM 데이터 셋을 언카탈로그한다.
UNCATLG 문을 사용하여 등록된 카탈로그 정보를 삭제할 수 있지만 볼륨에 저장되어 있는 물리적인 파
일은 삭제할 수 없다. 볼륨에 저장되어 있는 파일까지 삭제하려면 SCRATCH 문을 이용한다.
UNCATLG 명령어 구문은 다음과 같다.
[label] UNCATLG DSN[AME]=name
제2장 데이터 셋 유틸리티 97
설명항목
카탈로그정보에서 언카탈로그할 데이터 셋 이름을 지정한다.DSNAME=name
사용예제
볼륨 시리얼 넘버가 100000인 볼륨(VTOC)에 존재하는 임시 데이터 셋을 삭제하는 예제이다.
//CATALOG JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSFCTLG
//SYSPRINT DD SYSOUT=*
//VOLDD DD VOL=SER=100000,DISP=OLD
//SYSIN DD *
SCRATCH VTOC,VOL=3380=100000,SYS
/*
다음은 JSFCTLG.TEST01 데이터 셋을 100000볼륨에 카탈로그하는 예제이다.
//CATALOG JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSFCTLG
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
CATLG DSNAME=JSFCTLG.TEST01,VOL=3380=100000
/*
다음은 TEST.JSFCTLG 데이터 셋을 언카탈로그하는 예제이다.
//UNCATLG JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//JS01 EXEC PGM=JSFCTLG
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
UNCATLG DSNAME=TEST.JSFCTLG
/*
다음은 볼륨 시리얼 넘버가 100000인 볼륨에서 JSFCTLG.TEST01 데이터 셋을 삭제하는 예제이다.
//CATALOG JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSFCTLG
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
SCRATCH DSNAME=JSFCTLG.TEST01,VOL=SER=100000
/*
98 OpenFrame 유틸리티 참조 안내서
유의사항
JSFCTLG 유틸리티 프로그램의 실행 결과는 다음과 같다.
● 정상적으로 실행한 경우
코드 0을 반환한다.
● 에러가 발생한 경우
해당 에러 메시지를 SYSPRINT DD에 출력하고 에러에 해당하는 코드를 반환한다.
JSFCTLG 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.
설명코드
Warning 형태의 에러로, 다음의 경우가 해당된다.8
- 데이터 셋을 찾을 수 없는 경우
Unrecoverable 형태의 에러로, 다음의 경우가 해당된다.12
- 데이터 셋 관련 (pgmdd, open/close, read/write) 에러
- SYSIN DD 명령어 문법 에러
- 기타 JSFCTLG 유틸리티 프로그램 에러
시스템 에러와 관련된 에러로, 다음의 경우가 해당된다.16
- OpenFrame 시스템 라이브러리 초기화 실패
참고
유사한 유틸리티 프로그램으로는 “2.1. JSCVSUT”가 있다.
2.8. JSFDCDPNon-VSAM 데이터 셋들을 하나의 데이터 셋으로 DUMP하거나 DUMP한 데이터 셋을 원래대로 RESTORE
하기 위해 사용하는 유틸리티 프로그램이다.
JSFDCDP 시스템 유틸리티 프로그램으로 다음과 같은 기능을 수행할 수 있다.
● Non-VSAM 데이터 셋의 DUMP 기능
● Non-VSAM 데이터 셋의 RESTORE 기능
제2장 데이터 셋 유틸리티 99
DUMP와 RESOTRE 명령은 주로 천재지변에 의한 시스템 손상이나 중요데이터의 손실을 대비하기 위한
목적으로 데이터 셋이나 볼륨의 백업 및 복원에 사용된다.
OpenFrame에서는 현재 VOS3시스템의 JSFDCDP 유틸리티에서 제공하는 데이터 셋의 복사, 데이터 셋
의 비교(COMP), 데이터 셋의 출력(PRINT) 기능은 지원하지 않는다.
DD 설정
데이터 셋 DUMP
DD 설정 항목은 다음과 같다.
설명항목
JSFDCDP의 메시지가 저장되는 데이터 셋을 지정한다.SYSPRINT DD
JSFDCDP의 DUMP 명령어와 그와 관련된 옵션들을 기술하는 DD이다.SYSIN DD
SYSIN DD에 기술한 컨트롤 문장 중 IN 문으로 지정한 DD 이름과 같은 DD로 DUMP
대상 데이터 셋 들의 볼륨정보를 지정한다.
입력 DD
SYSIN DD에 기술한 컨트롤 문장 중 OTAPE(OT) 문으로 지정한 DD 이름과 같은 DD
로 새로 생성할 DUMP 데이터 셋을 지정한다.
출력 DD
데이터 셋 RESTORE
DD 설정 항목은 다음과 같다.
설명항목
JSFDCDP의 메시지가 저장되는 데이터 셋을 지정한다.SYSPRINT DD
JSFDCDP에서 사용하는 명령어를 기술한다.SYSIN DD
SYSIN DD에 기술한 컨트롤 문장 중 IN문으로 지정한 DD 이름과 같은 DD로 RESOTRE
대상 DUMP 데이터 셋이 기술된 DD이다.
입력 DD
SYSIN DD에 기술한 컨트롤 문장 중 ODASD(OD) 문으로 지정한 DD 이름과 같은 DD
로 DUMP 데이터 셋을 어떤 볼륨에 저장할 것인지 지정한다. 출력 DD에서는
DSN(Data Set Name)을 기술하지 않는다.
출력 DD
명령어 설정
DUMP
여러개의 데이터 셋을 지정하여 하나의 DUMP 처리된 데이터 셋을 생성하는 명령어이다.
DUMP 명령어 구문은 다음과 같다.
100 OpenFrame 유틸리티 참조 안내서
[label] D[UMP] IN=dd-name
OT[APE]=dd-name[,dd-name]
[,OD[ASD]=dd-name
[,ED[SN]=(dataset-name[,...])]
[,EC[H]=(cccchhhh-cccchhhh[,...])]
[,ID[SN]={(dataset-name[,...])|*ALL}]
[,IC[H]=(cccchhhh-cccchhhh[,...])]
[,VO(LCOPY]={Y|N}]
[,IV[OLID]=volser]
[,OV[OLID]=volser]
[,IO[WNERID]={ownerid | 'ownerid'}]
[,OO[WNERID]={ownerid | 'ownerid'}]
[,VE[RIFY]={Y|N}]
[,DI[FFEXT]={Y|N}]
[,PU[RGE]={Y|N}]
[,ER[ROPT]={S|T}]
설명항목
입력 DD명을 지정한다. DUMP 대상 데이터 셋들이 존재하는 볼륨이 기술된 DD
이다. 생략할 경우 기본값은 IN=IN이다.
IN=dd-name
출력 DD명을 지정한다. DUMP 데이터 셋이 저장될 볼륨이 기술된 DD이다. DD
명은 2개까지 지정할 수 있으며 생략할 경우 기본값은 OTAPE=OTAPE이다.
OT[APE]=dd-
name[,dd-name]
OTAPE으로 지정한 볼륨이 TAPE 형태인 경우는 내부적으로 DUMP 데이터 셋
을 압축처리하여 저장한다.
IN에서 지정한 데이터 셋을 다른 DASD로 복사하려는 경우 지정하는 명령이나
OpenFrame에서는 미지원 기능으로 기술할 경우 에러가 발생한다.
ODASD=dd-name
IN에서 지정한 볼륨의 데이터 셋 중 DUMP 대상에서 제외시킬 데이터 셋들을 지
정한다. 데이터 셋명은 괄호 문자로 둘러싸서 지정해야 한다.
EDSN=(dataset-
name[,...])
DUMP 대상에서 제외할 영역을 실린더 번호와 트랙번호로 지정하는 항목으로
미지원 기능이다.
ECH=(cccchhhh-ccc
chhhh[,...])
IN에서 지정한 볼륨의 데이터 셋 중 DUMP 대상 데이터 셋들을 지정한다. IDSN
문으로 데이터 셋을 지정한 경우 지정한 데이터 셋들만 DUMP 처리된다. 데이터
ID[SN]={(dataset-
name[,...])|*ALL}
셋명은 괄호문자로 둘러싸서 지정해야 한다. *ALL을 지정한 경우 입력 DD의 모
든 데이터 셋을 DUMP한다.
DUMP 대상 영역을 실린더 번호와 트랙번호로 지정하는 항목으로 미지원 기능
이다.
ICH=(cccchhhh-cccch
hhh[,...])
DASD로 복사하는 경우 입력 DASD의 볼륨 일련번호도 복사할지를 지정하는 항
목으로 미지원 기능이다.
VOLCOPY={Y|N}
입력 DASD가 오프라인으로 지정되었을 때 그 DASD의 볼륨 일련번호를 지정하
는 항목으로 미지원 기능이다.
IVOLID=volser
제2장 데이터 셋 유틸리티 101
설명항목
출력 DASD가 오프라인으로 지정되었을 때 그 DASD의 볼륨 일련번호를 지정하
는 항목으로 미지원 기능이다.
OVOLID=volser
입력 DASD의 등록되어 있는 소유자 ID를 지정하는 항목으로 미지원 기능이다.IOWNERID={owner
id|'ownerid'}
출력 DASD의 등록되어 있는 소유자 ID를 지정하는 항목으로 미지원 기능이다.OOWNERID={owner
id|'ownerid'}
DASD로 복사하는 경우 데이터를 검사할지를 지정하는 항목으로 미지원 기능이
다.
VERIFY={Y|N}
DASD로 복사하는 경우 영역의 지정이 데이터 셋 이름으로 지정되었을 때, 입력
DASD의 데이터 셋 EXTENT와 출력 DASD의 EXTENT가 달라도 복사할지를 지
정하는 항목으로 미지원 기능이다.
DIFFEXT={Y|N}
출력 DASD에 만료일자에 이르지 않은 데이터 셋이 있을 때 처리 중지할지를 지
정하는 항목으로 미지원 기능이다.
PURGE={Y|N}
입력 DASD에서 입출력 에러가 발생했을 때 그 에러를 무시할지를 지정하는 항
목으로 미지원 기능이다.
ERROPT={S|T}
RESTORE
DUMP 처리된 데이터 셋을 지정한 볼륨에 복원시키는 명령어이다.
RESTORE 명령어 구문은 다음과 같다.
[label] R[ESTORE] IN=dd-name
,OD[ASD]=dd-name
[,ED[SN]=(dataset-name[,...])]
[,EC[H]=(cccchhhh-cccchhhh[,...])]
[,ID[SN]={(dataset-name[,...])|*ALL}]
[,IC[H]=(cccchhhh-cccchhhh[,...])]
[,VO(LCOPY]={Y|N}]
[,OV[OLID]=volser]
[,OO[WNERID]={ownerid | 'ownerid'}]
[,VE[RIFY]={Y|N}]
[,DI[FFEXT]={Y|N}]
[,PU[RGE]={Y|N}]
설명항목
입력 DD명을 지정한다. RESTORE 대상 DUMP 데이터 셋이 기술된 DD이다. 해
당 DD에서 반드시 DUMP 데이터 셋 이름을 지정해야 한다. 생략할 경우 기본값
은 TAPE이다.
IN=dd-name
출력 DD명을 지정한다. RESOTRE된 데이터 셋들이 저장될 볼륨을 지정한 DD
이다. 기본값은 OUT이다.
ODASD=dd-name
102 OpenFrame 유틸리티 참조 안내서
설명항목
RESOTRE 대상 데이터 셋 중 복원에서 제외시킬 데이터 셋들을 지정한다. 데이
터 셋명은 괄호문자로 둘러싸서 지정해야 한다.
EDSN=(dataset-
name[,...])
RESTORE 대상에서 제외할 영역을 실린더 번호와 트랙번호로 지정하는 항목으
로 미지원 기능이다.
ECH=(cccchhhh-ccc
chhhh[,...])
DUMP 데이터 셋에서 복원시킬 데이터 셋들을 지정한다. IDSN 문으로 데이터
셋을 지정한 경우 지정한 데이터 셋들만 RESTORE 처리된다. 데이터 셋명은 괄
ID[SN]={(dataset-
name[,...])|*ALL}
호 문자로 둘러싸서 지정해야 한다. *ALL을 지정한 경우 입력 DD의 모든 데이터
셋을 RESTORE 처리한다.
RESTORE 대상 영역을 실린더번호와 트랙번호로 지정하는 항목으로 미지원 기
능이다.
ICH=(cccchhhh-cccch
hhh[,...])
DASD로 RESTORE하는 경우 원본 DASD의 볼륨 일련번호도 복사할지를 지정
하는 항목으로 미지원 기능이다.
VOLCOPY={Y|N}
출력 DASD가 오프라인으로 지정되었을 때 그 DASD의 볼륨 일련번호를 지정하
는 항목으로 미지원 기능이다.
OVOLID=volser
출력 DASD의 등록되어 있는 소유자 ID를 지정하는 항목으로 미지원 기능이다.OOWNERID={owner
id|'ownerid'}
DASD로 RESTORE하는 경우 데이터를 검사할지 지정하는 항목으로 미지원 기
능이다.
VERIFY={Y|N}
DASD로 RESTORE하는 경우 영역의 지정이 데이터 셋 이름으로 지정되었을
때, 원본 DASD의 데이터 셋 EXTENT와 출력 DASD의 EXTENT가 달라도 복사
할지를 지정하는 항목으로 미지원 기능이다.
DIFFEXT={Y|N}
출력 DASD에 만료일자에 이르지 않은 데이터 셋이 있을 때 처리 중지할지를 지
정하는 항목으로 미지원 기능이다.
PURGE={Y|N}
COMP
데이터 셋의 비교를 지정하는 명령어로 OpenFrame의 JSFDCDP 유틸리티 프로그램은 지원하지 않는다.
기술할 경우 에러가 발생한다.
데이터 셋의 내용을 편집해 출력하는 명령어로 OpenFrame의 JSFDCDP 유틸리티 프로그램은 지원하지
않는다. 기술할 경우 에러가 발생한다.
사용예제
IN DD에서 지정한 볼륨 내에 있는 모든 데이터 셋들을 TAPE1, TAPE2 DD에서 지정한 데이터 셋으로 각
각 DUMP 처리하는 예제이다.
제2장 데이터 셋 유틸리티 103
//DUMP01 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//JS01 EXEC PGM=JSFDCDP
//SYSPRINT DD SYSOUT=*
//IN DD VOL=SER=DEFVOL,UNIT=3380,DISP=OLD
//TAPE1 DD DSN=JSFDCDP.DUMP1,VOL=SER=100000,DISP=(NEW,CATLG)
//TAPE2 DD DSN=JSFDCDP.DUMP2,VOL=SER=200000,DISP=(NEW,CATLG)
//SYSIN DD *
DUMP IN=IN,OT=(TAPE1,TAPE2)
/*
IN DD의 JSFDCDP.DUMP1 데이터 셋을 RESTORE하여 OUT DD로 지정한 DEFVOL 볼륨에 복원 처리
하는 예제이다.
//REST01 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//JS01 EXEC PGM=JSFDCDP
//SYSPRINT DD SYSOUT=*
//IN DD DSN=JSFDCDP.DUMP1,VOL=SER=100000,DISP=OLD
//OUT DD VOL=SER=DEFVOL,DISP=OLD
//SYSIN DD *
RESTORE IN=IN,OD=OUT
/*
유의사항
JSFDCDP 유틸리티 프로그램의 실행한 결과는 다음과 같다.
● 정상적으로 실행한 경우
코드 0을 반환한다.
● 에러가 발생한 경우
해당 에러 메시지를 SYSPRINT DD에 출력하고 에러에 해당하는 코드를 반환한다.
JSFDCDP 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.
설명코드
Warning 형태의 에러로, 다음의 경우가 해당된다.4
- DUMP 대상 데이터 셋을 찾을 수 없는 경우
- RESTORE 대상 데이터 셋을 찾을 수 없는 경우
SYSIN DD에서 잘못된 문법의 명령어를 입력한 경우 발생하는 에러이다.8
프로그램 처리 오류 또는 시스템과 관련된 에러로, 다음의 경우가 해당된다.16
104 OpenFrame 유틸리티 참조 안내서
설명코드
- 기타 JSFDCDP 유틸리티 프로그램 에러
- OpenFrame 시스템 라이브러리 초기화 실패
2.9. JSFILSTPDS 데이터 셋의 멤버정보나 특정 볼륨내에 존재하는 데이터 셋들의 정보를 조회하는 유틸리티 프로그
램이다.
JSFILST 유틸리티 프로그램으로 다음과 같은 기능을 수행할 수 있다.
● PDS 내에 존재하는 멤버들의 목록과 정보를 조회한다.
● 볼륨 내에 존재하는 데이터 셋의 목록과 정보를 조회한다.
DD 설정
DD 설정 항목은 다음과 같다.
설명항목
JSFILST 메시지가 저장되는 데이터 셋을 정의한다.SYSPRINT DD
JSFILST의 명령어를 기술한 DD이다.SYSIN DD
명령어 설정
LISTPDS
PDS 정보와 멤버 리스트를 보여준다.
LISTPDS 명령어 구문은 다음과 같다
[label] LISTPDS DSN[AME]=(pds-name[,pds-name[,...]])
[,VOL[UME]=device=volser]
[,{DUMP|FORMAT}]
설명항목
조회하고자 하는 PDS 데이터 셋 이름을 지정하며 필수 입력 항목이다. 최대
10개의 데이터 셋 이름을 지정할 수 있다.
DSNAME=(pds-
name[,pds-name[,...]])
제2장 데이터 셋 유틸리티 105
설명항목
DSNAME에 기술한 데이터 셋에 포함된 볼륨 시리얼(볼륨명)을 기술한다.
device는 볼륨의 디바이스 이름을 지정하게 되나 문법을 맞추기 위한 것으로
실제로는 무시된다.
VOLUME=device=volser
PDS의 출력 형식을 지정하는 항목으로 미지원 기능이다.DUMP | FORMAT
LISTVTOC
지정한 볼륨 내에 존재하는 데이터 셋 목록과 정보를 보여준다.
LISTVTOC 명령어 구문은 다음과 같다.
[label] LISTVTOC [,VOL[UME]=device=volser]
[,DSN[AME]=(name[,name[,...]])
[,{DUMP|FORMAT}]
[,DATE=dddyy|dddyyyy)
설명항목
조회하고자 하는 볼륨 시리얼을 기술한다. device는 볼륨의 디바이스 이름을
지정하게 되나 문법을 맞추기 위한 것으로 실제로는 무시된다.
VOLUME=device=volser
조회 대상 데이터 셋 목록에 포함할 데이터 셋 이름을 기술한다. 최대 10개의
데이터 셋 이름을 지정할 수 있다. DSNAME 파라미터가 없으면 조회하려는
볼륨에 있는 모든 데이터 셋 리스트가 조회된다.
DSNAME=(name[,name[,...]]
PDS의 출력 형식을 지정하는 항목으로 미지원 기능이다.DUMP | FORMAT
지정한 일자로 만료되는 데이터 셋의 만료일의 뒤로 별표(*) 표시를 하여 출
력하는 것을 지정하는 항목으로 미지원 기능이다.
DATE=dddyy|dddyyyy
사용예제
다음은 PDS 정보와 멤버 리스트를 확인하는 예이다.
PDS DATASET1과 DATASET2의 정보와 멤버 리스트를 SYSPRINT에 기록한다.
//LISTPDS JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),
// USER=ROOT,PASSWORD=SYS1
//STEP01 EXEC PGM=JSFILST
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
LISTPDS DSNAME=(DATASET1,DATASET2),VOL=3380=100000
/*
106 OpenFrame 유틸리티 참조 안내서
다음은 위의 JCL을 실행한 뒤 출력되는 내용이다.
JSFILST VERSION 5.0.0(4) adb@buydream:ofsrc5/batch(#1) 2009-08-28 09:36:22
124639 M JIL0001M =====< JSFILST START >=====
MEMBER NAME : ADRDUMP0
DATASIZE : 1375
LAST UPDATE DATE(TIME) : 20090511(142821)
MEMBER NAME : ADRINIT2
DATASIZE : 2750
LAST UPDATE DATE(TIME) : 20090511(143954)
MEMBER NAME : ADRREST0
DATASIZE : 954
LAST UPDATE DATE(TIME) : 20090511(145104)
MEMBER NAME : ADRINIT3
DATASIZE : 2903
LAST UPDATE DATE(TIME) : 20090511(145922)
MEMBER NAME : ADRDUMP0
DATASIZE : 1344
LAST UPDATE DATE(TIME) : 20090511(142343)
124639 M JIL0002M =====< JSFILST FINISH >=====
다음은 볼륨의 디스크 정보와 데이터 셋 리스트를 확인하는 예이다. 볼륨 시리얼이 100000인 볼륨에 대한
디스크 정보와 데이터 셋 리스트를 SYSPRINT에 기록한다.
//LISTVOL JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP01 EXEC PGM=JSFILST
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
LISTVTOC VOL=3380=100000
/*
다음은 위의 JCL을 실행한 뒤 출력되는 내용이다.
JSFILST VERSION 5.0.0(4) adb@buydream:ofsrc5/batch(#1) 2009-08-28 09:36:22
124940 M JIL0001M =====< JSFILST START >=====
SYS1.VTOC.VDEFVOL VOLUME DSORG RECFM LRECL
------------------------------------------------------------------------------
JSFCTLG.PDS DEFVOL PO FB 80
SYS1.IEHMOVE DEFVOL PO L 80
제2장 데이터 셋 유틸리티 107
CAT.TEST DEFVOL PS FB 100
REIJ.DBDLIB DEFVOL PO L 80
MST.MENUE DEFVOL PS F 1102
IMS.RESLIB DEFVOL PO L 80
SYS1.JSFDCDP DEFVOL PO L 80
JSFCTLG.TEST DEFVOL PS FB 72
USER1.JCLLIB DEFVOL PO L 80
DSEDT.TEST DEFVOL PS FB 30000
TEST.TEST DEFVOL PS FB 80
IMS.ACBLIB DEFVOL PO L 80
PRX.RESLV1 DEFVOL PS FB 80
JSFMOVE.SAMPLE1 DEFVOL PS FB 80
SYS1.JCLLIB DEFVOL PO FB 80
TEST.PDS DEFVOL PO L 80
REIJ.PSBLIB DEFVOL PO L 80
KHD05.PARMLIB DEFVOL PO L 80
TESTE.PDS01 DEFVOL PO FB 89
ADRDSSU.GDG.TEST01.G0002V00 DEFVOL PS U 80
124940 M JIL0002M =====< JSFILST FINISH >=====
유의사항
JSFILST 유틸리티 프로그램의 실행한 결과는 다음과 같다.
● 정상적으로 실행한 경우
코드 0을 반환한다.
● 에러가 발생한 경우
해당 에러 메시지를 SYSPRINT DD에 출력하고 에러에 해당하는 코드를 반환한다.
JSFILST 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.
설명코드
Unrecoverable 형태의 에러로, 다음의 경우가 해당된다.12
- 데이터 셋 관련 (pgmdd, open/close, read/write) 에러
- SYSIN DD 명령어 문법 에러
- 기타 JSFILST 유틸리티 프로그램 에러
시스템 에러와 관련된 에러로, 다음의 경우가 해당된다.16
- OpenFrame 시스템 라이브러리 초기화 실패
108 OpenFrame 유틸리티 참조 안내서
2.10. JSFMOVENon-VSAM 데이터 셋을 명령어에서 지정한 볼륨으로 이동 또는 복사하기 위해 사용하는 유틸리티 프로
그램이다.
JSFMOVE 시스템 유틸리티 프로그램으로 다음과 같은 기능을 수행할 수 있다.
● SDS, PDS 데이터 셋을 동일한 볼륨이나 다른 볼륨으로 이동 또는 복사한다.
● 볼륨 내에 존재하는 모든 데이터 셋들을 다른 볼륨으로 이동 또는 복사한다.
● 데이터 셋의 일부 이름을 지정하여 해당 조건에 해당하는 데이터 셋들을 처리한다.
● PDS의 특정 멤버를 처리 대상에서 추가 또는 배제하거나 멤버명을 변경하여 처리한다.
주의
카탈로그에 등록된 데이터 셋을 동일한 볼륨에서 이동 또는 복사하려는 경우에는 반드시 데이터 셋
이름을 변경해야 한다.
JSFMOVE는 2가지 종류의 명령어로 분류된다.
● 기능 명령어
실제로 사용자가 수행하려는 특정 작업을 나타내는 명령어이다.
설명명령어
데이터 셋을 이동(복사)한다.MOVE(COPY) DSNAME
데이터 셋 그룹을 이동(복사)한다.MOVE(COPY) DSGROUP
PDS 데이터 셋을 이동(복사)한다.MOVE(COPY) PDS
볼륨 내에 존재하는 모든 데이터 셋을 이동(복사)한다.MOVE(COPY) VOLUME
● 보조 명령어
기능 명령어 중 MOVE(COPY) PDS 명령어의 경우 다음의 보조 명령어를 함께 사용할 수 있다.
설명명령어
처리 대상 PDS 데이터 셋과 멤버를 추가한다.INCLUDE
처리 대상 PDS 데이터 셋과 멤버에서 제외시킨다.EXCLUDE
PDS 멤버의 교체를 지정한다.REPLACE
처리 대상 PDS 멤버를 선택하여 지정한다.SELECT
제2장 데이터 셋 유틸리티 109
DD 설정
DD 설정 항목은 다음과 같다.
설명항목
JSFMOVE의 메시지가 저장되는 데이터 셋을 지정한다.SYSPRINT DD
JSFMOVE에서 사용하는 명령어를 기술한다.SYSIN DD
기능 명령어
MOVE(COPY) DSNAME
데이터 셋의 이동 또는 복사를 지정하는 명령어이다.
MOVE(COPY) DSNAME 명령어 구문은 다음과 같다.
[label] {MOVE|COPY} DSN[AME]=name
,TO=device=volser
[,FROM=device=volser]
[,UNCATLG]
[,CATLG]
[,RENAME=name]
[,FROMDD=dd-name]
[,TODD=dd-name]
[,UNLOAD]
[,COPYAUTH]
설명항목
이동 또는 복사하고자 하는 데이터 셋 이름을 지정한다.DSNAME=name
이동 또는 복사하고자 하는 데이터 셋의 출력 device명과 볼륨을 지정한다.
device는 볼륨의 디바이스 이름을 지정하게 되나 문법을 맞추기 위한 것으로
실제로는 무시된다.
TO=device=volser
이동 또는 복사하고자 하는 원본 데이터 셋이 존재하는 볼륨을 지정한다.
device는 볼륨의 디바이스 이름을 지정하게 되나 문법을 맞추기 위한 것으로
FROM=device=volser
실제로는 무시된다. MOVE 명령에서 FROM을 지정하게 되면 원본 데이터
셋의 카탈로그 정보를 삭제하지 않고 출력 데이터 셋은 카탈로그 하지 않는
다. 따라서 입력 데이터 셋이 카탈로그 되어 있으면 FROM은 지정하지 않는
것이 좋다.
이동 또는 복사 처리 후 데이터 셋 카탈로그 정보의 삭제를 지정한다. 원본 데
이터 셋이 카탈로그 되어 있지 않을 때는 지정하지 않도록 한다. 기본적으로
UNCATLG
입력 데이터 셋의 카탈로그 정보는 삭제되나 복사한 데이터 셋의 카탈로그
삭제 방법은 명령어별로 다음과 같은 차이가 있다. MOVE의 경우 복사한 데
110 OpenFrame 유틸리티 참조 안내서
설명항목
이터 셋은 카탈로그 하지 않는다. COPY의 경우 복사 한 데이터 셋의 카탈로
그는 CATLG명령의 지정에 따른다. FROM 명령이 지정되면 UNCATLG는 무
시 처리된다.
COPY 명령을 기술한 경우에만 효력이 발생하며 복사한 데이터 셋을 카탈로
그에 등록한다. RENAME과 FROM 지정을 생략한 경우 복사한 데이터 셋을
카탈로그시키기 위하여 원본 데이터 셋은 카탈로그에서 삭제한다.
CATLG
출력 데이터 셋의 새로운 이름을 지정한다. 동일한 볼륨 내에서 이동 또는 복
사하는 경우 RENAME을 반드시 지정해야 한다.
RENAME=name
DCB 정보와 LABEL 정보를 주는 DD 문의 DD명을 지정하는 항목으로 미지
원 기능이다.
FROMDD=dd-name
DCB 정보와 LABEL 정보를 주는 DD 문의 DD명을 지정하는 항목으로 미지
원 기능이다.
TODD=dd-name
입력 데이터 셋을 언로드 형식으로 변환해 이동, 복사하는 것을 지정하는 항
목으로 미지원 기능이다.
UNLOAD
출력 데이터 셋의 권한정보를 입력 데이터 셋의 권한정보와 같게 만들 때 지
정하는 항목으로 미지원 기능이다.
COPYAUTH
MOVE(COPY) DSGROUP
데이터 셋 이름의 시작부터 특정위치까지의 일부 이름을 기술하여 해당 조건에 맞는 모든 데이터 셋들의
이동 또는 복사를 지정하는 명령어이다.
MOVE(COPY) DSGROUPNAME 명령어 구문은 다음과 같다.
[label] {MOVE|COPY} DSGROUP=name
,TO=device=volser
[,PASSWORD]
[,UNCATLG]
[,CATLG]
[,TODD=dd-name]
[,UNLOAD]
설명항목
이동 또는 복사하고자 하는 데이터 셋의 일부 이름을 지정한다. 예를 들어
DSGROUP을 TEST라고 지정한 경우 TEST.PDS, TEST.SDS.A01과 같은
DSGROUP=name
점(.)으로 구분된 첫 이름이 TEST로 시작되는 모든 데이터 셋들을 선택하여
처리한다. 만약 데이터 셋의 전체 이름을 기술한 경우는 그 데이터 셋만 처리
한다.
제2장 데이터 셋 유틸리티 111
설명항목
이동 또는 복사하고자 하는 데이터 셋의 출력 device명과 볼륨을 지정한다.
device는 볼륨의 디바이스 이름을 지정하게 되나 문법을 맞추기 위한 것으로
실제로는 무시된다.
TO=device=volser
OpenFrame에서는 미지원하는 기능으로 지정하더라도 무시된다. 원래는 작
업 대상 데이터 셋이 비밀번호로 관리되는 경우 해당 데이터 셋의 이동, 복사
를 지정한다.
PASSWORD
이동 또는 복사 처리 후 데이터 셋 카탈로그 정보의 삭제를 지정한다. 원본 데
이터 셋이 카탈로그 되어 있지 않을 때는 지정하지 않도록 한다. 기본적으로
UNCATLG
입력 데이터 셋의 카탈로그 정보는 삭제되나 복사한 데이터 셋의 카탈로그
삭제 방법은 명령어별로 다음과 같은 차이가 있다. MOVE의 경우 복사한 데
이터 셋은 카탈로그 하지 않는다. COPY의 경우 복사한 데이터 셋의 카탈로
그는 CATLG명령의 지정에 따른다. FROM 명령이 지정되면 UNCATLG는 무
시 처리된다.
COPY 명령을 기술한 경우에만 효력이 발생하며 복사한 데이터 셋을 카탈로
그에 등록한다. 복사한 데이터 셋을 카탈로그시키기 위하여 원본 데이터 셋
은 카탈로그에서 삭제한다.
CATLG
DCB정보와 LABEL 정보를 주는 DD 문의 DD명을 지정하는 항목으로 미지원
기능이다.
TODD=dd-name
출력 데이터 셋의 권한정보를 입력 데이터 셋의 권한정보와 같게 만들 때 지
정하는 항목으로 미지원 기능이다.
UNLOAD
MOVE(COPY) PDS
PDS 데이터 셋의 이동 또는 복사를 지정하는 명령어이다.
MOVE(COPY) PDS 명령어 구문은 다음과 같다.
[label] {MOVE|COPY} PDS=name
,TO=device=volser
[,FROM=device=volser]
[,EXPAND=n]
[,UNCATLG]
[,CATLG]
[,RENAME=name]
[,FROMDD=dd-name]
[,TODD=dd-name]
[,UNLOAD]
[,COPYAUTH]
설명항목
이동 또는 복사하고자 하는 PDS 데이터 셋 이름을 지정한다.PDS=name
112 OpenFrame 유틸리티 참조 안내서
설명항목
이동 또는 복사하고자 하는 PDS 데이터 셋의 출력 device명과 볼륨을 지정
한다. device는 볼륨의 디바이스 이름을 지정하게 되나 문법을 맞추기 위한
것으로 실제로는 무시된다.
TO=device=volser
이동 또는 복사하고자 하는 원본 데이터 셋이 존재하는 볼륨을 지정한다.
device는 볼륨의 디바이스 이름을 지정하게 되나 문법을 맞추기 위한 것으로
FROM=device=volser
실제로는 무시된다. MOVE 명령에서 FROM을 지정하게 되면 원본 데이터
셋을 삭제하지 않고 출력 데이터 셋은 카탈로그 하지 않는다. 따라서 입력 데
이터 셋이 카탈로그 되어 있으면 FROM은 지정하지 않는 것을 권장한다.
이동, 복사하는 PDS 데이터 셋의 블록 할당의 증가값을 지정하는 항목으로
미지원 기능이다.
EXPAND=n
이동 또는 복사 처리 후 데이터 셋 카탈로그 정보의 삭제를 지정한다. 원본 데
이터 셋이 카탈로그 되어 있지 않을 때는 지정하지 않도록 한다. 기본적으로
UNCATLG
입력 데이터 셋의 카탈로그 정보는 삭제되나 복사한 데이터 셋의 카탈로그
삭제 방법은 명령어별로 다음과 같은 차이가 있다. MOVE의 경우 복사한 데
이터 셋은 카탈로그 하지 않는다. COPY의 경우 복사한 데이터 셋의 카탈로
그는 CATLG 명령의 지정에 따른다. FROM 명령이 지정되면 UNCATLG는
무시 처리된다.
COPY 명령을 기술한 경우에만 효력이 발생하며 복사한 데이터 셋을 카탈로
그에 등록한다. RENAME과 FROM 지정을 생략한 경우 복사한 데이터 셋을
카탈로그 시키기 위하여 원본 데이터 셋은 카탈로그에서 삭제한다.
CATLG
출력 데이터 셋의 새로운 이름을 지정한다. 동일한 볼륨 내에서 이동 또는 복
사하는 경우 RENAME 문을 반드시 지정해야 한다.
RENAME=name
DCB정보와 LABEL정보를 주는 DD 문의 DD명을 지정하는 항목으로 미지원
기능이다.
FROMDD=dd-name
DCB정보와 LABEL정보를 주는 DD 문의 DD명을 지정하는 항목으로 미지원
기능이다.
TODD=dd-name
입력 데이터 셋을 언로드 형식으로 변환해 이동, 복사하는 것을 지정하는 항
목으로 미지원 기능이다.
UNLOAD
출력 데이터 셋의 권한 정보를 입력 데이터 셋의 권한 정보와 같게 만들 때 지
정하는 항목으로 미지원 기능이다.
COPYAUTH
MOVE(COPY) VOLUME
지정한 볼륨 내에 존재하는 모든 데이터 셋의 이동 또는 복사를 지정하는 명령어이다.
MOVE(COPY) VOLUME 명령어 구문은 다음과 같다.
[label] {MOVE|COPY} VOL[UME]=device=volser
,TO=device=volser
[,PASSWORD]
제2장 데이터 셋 유틸리티 113
[,CATLG]
[,TODD=dd-name]
[,UNLOAD]
설명항목
이동 또는 복사하고자 하는 볼륨의 device명과 이름을 지정한다. device는 볼
륨의 디바이스 이름을 지정하게 되나 문법을 맞추기 위한 것으로 실제로는
무시된다.
VOLUME=device=volser
이동 또는 복사하고자 하는 볼륨의 출력 device명과 볼륨을 지정한다. device
는 볼륨의 디바이스 이름을 지정하게 되나 문법을 맞추기 위한 것으로 실제
로는 무시된다.
TO=device=volser
작업 대상 데이터 셋이 비밀번호로 관리되는 경우 해당 데이터 셋의 이동, 복
사를 지정하는 항목으로 미지원 기능이다.
PASSWORD
COPY명령인 경우에만 복사한 후 데이터 셋을 카탈로그정보에 등록 한다. 복
사한 데이터 셋을 카탈로그 시키기 위하여 원본 데이터 셋은 카탈로그에서
삭제한다.
CATLG
DCB 정보와 LABEL 정보를 주는 DD 문의 DD명을 지정하는 항목으로 미지
원 기능이다.
TODD=dd-name
입력 데이터 셋을 언로드 형식으로 변환해 이동, 복사하는 것을 지정하는 항
목으로 미지원 기능이다.
UNLOAD
보조 명령어
INCLUDE
MOVE(COPY) PDS 명령어와 함께 사용하며, 이동 또는 복사 대상 데이터 셋과 멤버를 추가하는 명령어
이다.
INCLUDE 명령어 구문은 다음과 같다.
[label] INCLUDE DSN[AME]=name
,MEMBER=name
[,FROM=device=volser] ])}
설명항목
추가할 PDS 데이터 셋의 이름을 지정한다.DSNAME=name
지정한 PDS 데이터 셋의 추가할 멤버명을 지정한다.MEMBER=name
이동 또는 복사하고자 하는 원본 PDS 데이터 셋이 존재하는 볼륨을 지정한
다. device는 볼륨의 디바이스 이름을 지정하게 되나 문법을 맞추기 위한 것
으로 실제로는 무시된다.
FROM=device=volser
114 OpenFrame 유틸리티 참조 안내서
EXCLUDE
MOVE(COPY) PDS 명령어와 함께 사용하며, 지정된 PDS 데이터 셋의 멤버 중에서 특정 멤버를 처리 대
상에서 제외시키는 명령어이다.
EXCLUDE 명령어 구문은 다음과 같다.
[label] EXCLUDE MEMBER=name
설명항목
이동 또는 복사 대상의 PDS 데이터 셋 멤버 중에서 제외시킬 멤버명을 지정
한다.
MEMBER=name
SELECT
MOVE(COPY) PDS 명령어와 함께 사용하며, 지정된 PDS 데이터 셋의 멤버 중에서 특정 멤버만을 이동
또는 복사시키는 명령어이다.
SELECT 명령어 구문은 다음과 같다.
[label] SELECT MEMBER={(name[,name][,...]) |
((name,newname),[,(name,newname)][,...])}
설명항목
이동 또는 복사 대상으로 지정한 PDS 데이터 셋 멤버중에서 선택하여 처리
할 멤버명을 지정한다.
MEMBER=name
이동 또는 복사 대상으로 지정한 PDS 데이터 셋 멤버중에서 선택하여 처리
할 멤버명과 처리 후 변경 멤버명을 지정한다.
(name,newname)
REPLACE
MOVE(COPY) PDS 명령어와 함께 사용하며, 지정된 PDS 데이터 셋의 멤버 중 특정 멤버를 제외시켜 다
른 데이터 셋의 동일한 이름을 가진 멤버로 교체시키는 명령어이다.
REPALCE 명령어 구문은 다음과 같다.
[label] REPALCE DSN[AME]=name
,MEMBER=name
[,FROM=device=volser]
설명항목
교체할 멤버가 속해 있는 PDS 데이터 셋 이름을 지정한다.DSNAME=name
이동 또는 복사 대상으로 지정한 PDS 데이터 셋 멤버 중에서 선택하여 처리
할 멤버명과 처리 후 변경 멤버명을 지정한다.
MEMBER=name
제2장 데이터 셋 유틸리티 115
설명항목
지정한 데이터 셋이 있는 볼륨을 지정한다. 이동 또는 복사하고자 하는 원본
PDS 데이터 셋이 존재하는 볼륨을 지정한다. device는 볼륨의 디바이스 이
름을 지정하게 되나 문법을 맞추기 위한 것으로 실제로는 무시된다.
FROM=device=volser
사용예제
DEFVOL 볼륨에 존재하고 카탈로그에 등록되어 있는 TEST.DS01 데이터 셋과 TEST.DS02 데이터 셋을
볼륨 100000으로 이동하는 예제이다. TEST.DS01은 다시 카탈로그에 등록되나 TEST.DS02는 카탈로그
에 등록되지 않는다.
//MOVE10 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSFMOVE
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
MOVE DSNAME=TEST.DS01,TO=3390=100000
MOVE DSNAME=TEST.DS02,TO=3390=100000,UNCATLG
/*
DEFVOL 볼륨에 존재하며 카탈로그에 등록되지 않은 TEST.DS01 데이터 셋과 TEST.DS02 데이터 셋을
볼륨 100000으로 복사하는 예제이다. 복사 후에도 TEST.DS01은 카탈로그에 등록되지 않는다. TEST.DS02
또한 CATLG를 지정하였으나 원본이 카탈로그에 등록되지 않았으므로 역시 카탈로그에 등록 처리하지
않는다.
//COPY20 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSFMOVE
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
COPY DSNAME=TEST.DS01,FROM=3380=DEFVOL,TO=3390=100000
COPY DSNAME=TEST.DS02,FROM=3380=DEFVOL,TO=3390=100000,CATLG
/*
카탈로그에 등록되어 있는 TEST.DS01 데이터 셋을 TEST.DS02로 이름을 변경하여 DEFVOL 볼륨에서
100000 볼륨으로 복사하는 예제이다.
//COPY30 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSFMOVE
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
COPY DSNAME=TEST.DS01,FROM=3380=DEFVOL,TO=3390=100000,
RENAME=TEST.DS02
/*
116 OpenFrame 유틸리티 참조 안내서
TEST.PDS01 PDS 데이터 셋의 멤버인 A를 제외하여 DEFVOL 볼륨에서 200000 볼륨으로 이동하는 예
제이다. 이 때 100000 볼륨의 TEST.PDS02의 멤버인 D를 추가하여 처리한다.
//MOVE40 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSFMOVE
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
MOVE PDS=TEST.PDS01,FROM=3380=DEFVOL,
TO=3390=200000
EXCLUDE MEMBER=A
INCLUDE DSNAME=TEST.PDS02,MEMBER=D,
FROM=3390=100000
/*
카탈로그에 등록되지 않은 TEST.PDS01 PDS 데이터 셋을 DEFVOL 볼륨에서 100000 볼륨으로 복사하
는 예제이다. TEST.PDS02의 멤버 A로 교체하여 복사하고 멤버 C를 추가하여 복사한다.
//COPY50 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSFMOVE
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
COPY PDS=TEST.PDS01,FROM=3380=DEFVOL,
TO=3390=200000
REPLACE DSNAME=TEST.PDS02,MEMBER=A
INCLUDE DSNAME=TEST.PDS02,MEMBER=C
/*
TEST.PDS01 PDS 데이터 셋을 TEST.PDS02 데이터 셋으로 이름을 변경하여 DEFVOL 볼륨에서 100000
볼륨으로 복사하는 예제이다. 복사 대상 멤버는 A, B, C가 되며 B 멤버의 경우 X로 이름을 바꾸어 복사한
다.
//COPY60 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSFMOVE
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
COPY PDS=TEST.PDS01,RENAME=TEST.PDS02,
TO=3390=100000,
FROM=3380=DEFVOL
SELECT MEMBER=(A,(B,X),C)
/*
카탈로그에 등록되어 있는 데이터 셋 중 MOVE.TEST01, MOVE.PDS, MOVE.SDS91과 같이 MOVE로 시
작되는 모든 데이터 셋을 100000 볼륨으로 이동하는 예제이다.
제2장 데이터 셋 유틸리티 117
//MOVE70 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSFMOVE
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
MOVE DSGROUP=MOVE,TO=3390=100000
/*
DEFVOL 볼륨에 존재하는 모든 데이터 셋들을 100000 볼륨으로 이동하는 예제이다.
//MOVE80 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=JSFMOVE
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
MOVE VOLUME=3380=DEFVOL,
TO=3390=100000
/*
유의사항
JSFMOVE 유틸리티 프로그램의 결과는 다음과 같다.
● 정상적으로 실행한 경우
코드 0을 반환한다.
● 에러가 발생한 경우
해당 에러 메시지를 SYSPRINT DD에 출력하고 에러에 해당하는 코드를 반환한다.
JSFMOVE 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.
설명코드
Warning 형태의 에러로, 다음의 경우가 해당된다.4
- 이동 또는 복사할 대상 데이터 셋을 찾을 수 없는 경우
- 이동 또는 복사하려는 곳에 동일한 이름의 데이터 셋이 이미 존재하는 경우
SYSIN DD에서 잘못된 문법의 명령어를 입력한 경우 발생하는 에러이다.8
프로그램 처리 오류 또는 시스템과 관련된 에러로, 다음의 경우가 해당된다.16
- 기타 JSFMOVE 유틸리티 프로그램 에러
- OpenFrame 시스템 라이브러리 초기화 실패
118 OpenFrame 유틸리티 참조 안내서
제3장 기타 유틸리티
본 장에서는 앞 장에서 다루지 않은 기타 유틸리티에 대해 기술한다.
3.1. DSDIFF데이터 셋의 레코드별 차이점을 보여주는 유틸리티 프로그램이다.
OpenFrame 설치 후 또는 유틸리티나 라이브러리 등의 각종 모듈을 업데이트한 후에 실시하는 검증 테스
트로서 수행 결과 데이터 셋이 예상대로 생성되었는지 확인하기 위한 용도로 사용할 수 있다
DD 설정
DD 설정 항목은 다음과 같다.
설명항목
비교 대상 데이터 셋의 ddname 목록을 기술한다.SYSIN DD
리스트의 구분자로 콤마(,)를 사용한다.
예) AA,BB,CC: AA와 BB 그리고 CC를 비교한다.
비교할 데이터 셋을 정의한다.TARGET DD
이 비교 데이터 셋은 SYSIN DD에 기술한 ddname 목록에 포함되어야 한다.
명령어 설정
SYSIN DD에 기술하는 데이터 셋 리스트의 구문은 다음과 같다.
ddname,ddname[ddname,....]
이와 같이 SYSIN DD에 데이터 셋 리스트를 기술하는 것 외에 설정해야 하는 명령어는 없다.
사용예제
다음은 EXPECTED, INREC, SUM DD 세 개의 레코드를 비교하여 차이점을 보여주는 예이다.
제3장 기타 유틸리티 119
//DSDIFF EXEC PGM=DSDIFF,REGION=2M
//SYSIN DD *
EXPECTED,INREC,SUM
/*
//SYSOUT DD SYSOUT=*
//EXPECTED DD DSN=OFTEST.SORT.OUT01.EXPECTED,DISP=OLD
//INREC DD DSN=OFTEST.SORT.OUT01.INREC,DISP=OLD
//SUM DD DSN=OFTEST.SORT.OUT01.SUM,DISP=OLD
유의사항
레코드 길이가 다르면 가장 짧은 레코드의 레코드 길이까지의 데이터가 모두 일치하더라도 서로 다른 레
코드로 판단한다.
DSDIFF 유틸리티 프로그램이 Batch 애플리케이션을 실행한 결과는 다음과 같다.
● 정상적으로 실행한 경우
Batch 애플리케이션에서 받은 코드를 반환한다.
● 에러가 발생한 경우
해당 에러 메시지를 SYSOUT DD에 출력하고 에러에 해당하는 코드를 반환한다.
DSDIFF 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.
설명코드
레코드에서 한 개 이상의 차이가 있을 경우에 해당한다.4
SYSIN으로 주어진 ddname이 존재하지 않거나 데이터 셋 I/O 에러 등의 OpenFrame 혹은
UNIX 에러를 의미한다.
16
3.2. EZTPA00JCL에서 SYSIN으로 입력된 CA-Easytrieve Plus 스크립트를 실행시켜주는 유틸리티이다.
스크립트를 실행하기 위해 외부 프로그램인 TmaxSoft 사의 ProTrieve를 사용하게 되며 외부 프로그램을
위한 각종 환경을 설정하게 된다.
CA-Easytrieve Plus 스크립트를 통해 데이터 셋 입출력, 데이터 가공 및 레포트 생성 등의 작업을 할 수 있
다.
참고
본 안내서에서는 CA-Easytrieve Plus 스크립트의 상세한 내용은 기술하지 않는다. 해당 내용은 Pro
Trieve의 안내서를 참고한다.
120 OpenFrame 유틸리티 참조 안내서
다음은 EZTPA00가 동작하는 방법이다.
[그림 3.1] EZTAP00 동작
CA-Easytrieve Plus 스트립트가 ProTrieve에 전달되어 실행된다.
DD 설정
DD 설정 항목은 다음과 같다.
설명항목
CA-Easytrieve Plus 스크립트 입력 데이터 셋을 지정한다.SYSIN DD
CA-Easytrieve Plus의 결과로 생긴 레포트나 DISPLAY로 기술된 메시지의 출력 데이
터셋을 지정한다.
SYSPRINT DD
CA-Easytrieve Plus 실행 중 EZTPA00, ProTrieve로부터 발생한 메시지의 출력 데이
터 셋을 지정한다.
SYSOUT DD
CA-Easytrieve Plus 구문 중 FILE 처리에 사용되는 데이터 셋을 지정한다. DD 이름은
CA-Easytrieve Plus 스크립트의 파일명과 같아야 한다.
anyname DD
사용예제
다음은 EZTPA00을 사용하여 FILEA에서 FILEB로 복사하는 예제이다.
제3장 기타 유틸리티 121
//SAMPLE JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//EZPLUS EXEC PGM=EZTPA00
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//FILEA DD DSN=OPENFRAME.EZPLUS.FILEA,DISP=SHR
//FILEB DD DSN=OPENFRAME.EZPLUS.FILEB,DISP=(NEW,CATLG),
// DCB=(RECFM=FB,LRECL=1024,BLKSIZE=10240)
//SYSIN DD *
FILE FILEA
RECA 1 1024 A
FILE FILEB
RECB 1 1024 A
*
JOB INPUT FILEA
MOVE FILEA TO FILEB
PUT FILEB
/*
SYSOUT DD가 존재하지 않으면 유틸리티 실행 중 발생한 메시지가 SYSPRINT에 출력되어 원하는
SYSPRINT 출력 결과를 얻지 못할 수도 있으므로 주의한다.
유의사항
EZTPA00을 실행한 결과는 다음과 같다.
● 정상적으로 실행한 경우
외부 프로그램으로부터 받은 코드 0을 반환한다.
● 에러가 발생한 경우
반환코드 16을 반환한다.
에러에 대한 자세한 메시지는 SYSOUT DD에 출력된다.
관련 환경설정
EZTPA00을 구동하기 위한 설정파일은 ezplus.conf 이다.
다음은 ezplus.conf 파일의 예이다.
122 OpenFrame 유틸리티 참조 안내서
[EZV]
WORK_DIR=${OPENFRAME_HOME}/temp/ezwork
설명항목
EZTPA00에서 Protrieve를 호출하여 사용하기 위한 작업 공간을 정의한
다. Protrieve의 입력이 되는 스크립트를 임시로 저장하기 위해 사용된다.
WORK_DIR
3.3. FTPBatch JOB에서 데이터 셋을 remote host에 전송하거나 remote host로부터 데이터를 전송받아 데이터 셋
으로 저장하는 유틸리티 프로그램이다.
DD 설정
DD 설정 항목은 다음과 같다.
설명항목
FTP 유틸리티 컨트롤 문을 지정한다.INPUT DD 또는
SYSIN DD
메시지 출력을 위한 출력 데이터 셋을 지정한다.SYSPRINT DD
명령어 설정
FTP를 실행하기 위해서는 JCL의 EXEC 구문에 다음과 같이 지정한다.
//STEP EXEC PGM=FTP
INPUT DD 또는 SYSIN DD에 다음 항목을 이용하여 FTP 컨트롤 문을 기술한다.
설명항목
INPUT DD의 첫 부분에 FTP 서버 연결을 위한 IP를 설정하며 FTP 연결을 위
한 필수 항목이다.
connect_ip
INPUT DD의 connect_ip 다음에 반드시 FTP 서버 인증을 위한 사용자 ID와
비밀번호를 기술해야 하며 FTP 연결을 위한 필수 항목이다.
user_id password
바이너리 형식이나 ASCII 형식으로 파일을 전송하기 위해 포맷을 지정한다.KSC5601
(NOTYPE | BIN | ASC)
바이너리 형식이나 ASCII 형식으로 파일을 전송하기 위해 포맷을 지정한다.SJISKANJI
제3장 기타 유틸리티 123
설명항목
(NOTYPE | BIN | ASC)
데이터 전송 형식을 바이너리로 변경한다.BINARY | BIN
데이터 전송형식을 ASCII로 변경한다.ASCII | ASC
remote host의 현재 상태를 표시한다.STAT
remote host와 접속을 끊는다.CLOSE
FTP프로그램을 종료한다.QUIT
remote host의 현대 디렉터리 정보를 조회한다.LS
remote host의 현재 디렉터리를 표시한다.PWD
실제 기능은 하지 않으나 에러를 발생시키지 않도록 지원하는 컨트롤 문이
다.
LOCSITE
remote host의 디렉터리를 변경한다.CD
local host의 디렉터리를 변경한다.LCD
remote host의 파일을 삭제한다.DELETE
remote host의 파일이름을 변경한다.RENAME
MAXCC를 지정한다.SET
MAXCC=
local host의 파일 또는 데이터 셋을 remote host에 전송한다.PUT
remote host에 있는 파일을 local host로 전송한다.GET
REPLACE 옵션이 지정되어 있고, 전송하려는 파일이 local host에 있으면 경
고 메시지를 출력하고 해당 파일을 덮어쓴다.
(REPLACE)
REPLACE 옵션이 지정되어 있지 않고, 전송하려는 파일이 local host에 있으
면 에러가 발생한다.
remote host에 이미 존재하는 파일에 추가적으로 데이터를 추가한다. 단, re
mote host에 지정한 파일이 존재하지 않으면 신규로 생성된다.
APPEND
실제 기능은 하지 않으나 에러를 발생시키지 않도록 지원하는 컨트롤 문이
다.
SENDSITE
복수 개의 remote host의 파일을 삭제한다.MDELETE
interactive 또는 noninteractive 모드를 설정한다.PROMPT
데이터 전송형식을 지정한다.TYPE
- I | i : 데이터 전송형식을 바이너리로 설정한다.(I|i|A|a)
- A | a : 데이터 전송형식을 ASCII로 설정한다.
124 OpenFrame 유틸리티 참조 안내서
사용예제
다음은 127.0.0.1 FTP 서버에 연결하여 home/ftptest/temp 디렉터리로 FTPTEST01.txt 파일을 업로드하
는 예이다.
//PMFTP EXEC PGM=FTP
//INPUT DD *
127.0.0.1
ftptest ftptest
KSC5601 (NOTYPE
CD /home/ftptest/temp/
PUT 'FTPTEST01' /home/ftptest/temp/FTPTEST01.TXT
QUIT
/*
//SYSPRINT DD SYSOUT=*
/*
관련 환경설정
FTP 프로그램은 임시 파일의 위치를 지정하거나 FTP 서버로부터의 에러 코드를 판별하기 위해 ftp.conf
파일에 해당 정보를 기술한다.
다음은 ftp.conf 파일의 예이다.
[DIRECTORY]
FTP_WORK_DIR=${OPENFRAME_HOME}/temp
[ERROR]
ERRORID=error message
[UNIT]
DEFAULT=3390
[TACF]
DATASET=YES|NO
[DIRECTORY]
DIRECTORY의 설정 항목은 다음과 같다.
설명항목
FTP 프로그램이 FTP 서버에 데이터 전송을 할 때 사용하는 작업 디렉터리
정보를 기술한다.
FTP_WORK_DIR
제3장 기타 유틸리티 125
[ERROR]
FTP 서버로부터 반환되는 에러 메시지 정보를 기술한다. FTP 프로그램은 이 에러 메시지 정보와 FTP 서
버로부터 반환된 메시지와 비교해서 에러 상황을 판단한다.
설명항목
ERRORID는 FTP 서버로부터 반환되는 에러 메시지를 구별하기 위한 문장
을 사용자가 자유롭게 기술한다.
ERRORID
error message는 FTP 서버에서 반환되는 에러 메시지이다.
[UNIT]
UNIT의 설정 항목은 다음과 같다.
설명항목
FTP 프로그램이 데이터 셋 전송할 때 사용할 default unit 정보를 기술한다.DEFAULT
[TACF]
TACF의 설정 항목은 다음과 같다.
설명항목
FTP 프로그램을 실행하는 사용자의 인증 체크 및 데이터 셋의 접근권한 여
부를 기술한다. 사용자는 FTP 서버에 접속하는 사용자가 아니라 FTP 프로그
램을 실행한 JOB의 실행 사용자이다.
DATASET
3.4. JDJDUMMYJCL에 기술된 내용들이 정상적으로 실행되는지 확인하기 위해 사용하는 테스트용 유틸리티 프로그램이
다.
실제로 유틸리티가 수행하는 처리는 없다.
즉, 아무런 처리도 하지 않는 빈 프로그램을 JOB STEP에서 실행해 봄으로써 JCL이 올바로 작성이 되었
는지, JOB 환경에서 처리되어야 하는 DD 문의 처리 및 데이터 셋의 할당과 같은 일이 정상적으로 수행이
되고 있는지 알아보기 위한 용도로 사용될 수 있다. 혹은 데이터 셋을 신규로 생성하거나 삭제하는 처리만
수행하는 목적의 JOB STEP인 경우에도 사용할 수 있다.
DD 설정
JDJDUMMY 유틸리티 프로그램을 실행하기 위해서 특별히 요구되는 DD는 없다.
126 OpenFrame 유틸리티 참조 안내서
다만 해당 JOB STEP에 기술된 모든 DD문에 대해서 JOB STEP에서 프로그램을 호출하기 이전에 이루어
지는 할당 작업이 수행되므로 이러한 처리 방식을 활용해 데이터 셋을 신규로 생성하거나 삭제하기 위하
여 필요한대로 DD 문을 기술할 수 있다.
명령어 설정
JDJDUMMY 유틸리티 프로그램을 실행하기 위해서 입력해야 하는 명령어는 없다.
사용예제
다음은 DATASET1을 새로 생성하고 DATASET2를 삭제하는 예이다. EXEC 문에 프로그램을 지정하지
않으면 JCL 문법에 위배되기 때문에 이를 피하기 위해서 JDJDUMMY 프로그램을 지정한다.
//NEWDEL JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP01 EXEC PGM=JDJDUMMY
//NEW DD DSNAME=DATASET1,DISP=(NEW,KEEP),
// DCB=(RECFM=FB,LRECL=100,BLKSIZE=1000)
//DEL DD DSNAME=DATASET2,DISP=(OLD,DELETE)
유의사항
JDJDUMMY 유틸리티 프로그램은 항상 0을 반환한다.
3.5. PGMRTS00Shared Object로 컴파일된 Batch 애플리케이션을 JCL로 실행시키려고 할 때 OpenFrame/Batch 엔진 모
듈인 JCL Runner에 의해 간접적으로 실행되는 실행 환경 제어 유틸리티 프로그램이다.
JCL의 EXEC 구문에서 PGM 파라미터 값으로 Shared Object로 컴파일된 Batch 애플리케이션을 지정할
경우 JCL Runner가 PGMRTS00 유틸리티 프로그램을 우선 실행시킨다. 실행된 PGMRTS00 유틸리티 프
로그램은 Shared Object로 컴파일된 Batch 애플리케이션을 동적으로 메모리에 LOAD하여 엔트리 포인트
를 찾아 호출한 후 애플리케이션을 실행시켜준다.
다음은 PGMRTS00 유틸리티 프로그램의 동작방법이다.
제3장 기타 유틸리티 127
[그림 3.2] PGMRTS00 동작 구조
1. JCL Runner는 실행시키려는 애플리케이션의 바이너리 형식을 검사한다.
2. 애플리케이션의 바이너리 형식이 Shared Object인 경우 JCL Runner는 PGMRTS00 유틸리티 프로그
램을 실행하고 애플리케이션을 동적으로 실행시킨다.
3. 애플리케이션의 바이너리 형식이 Shared Object가 아닌 경우 JCL Runner는 PGMRTS00 유틸리티 프
로그램을 통하지 않고 바로 애플리케이션을 실행시킨다.
DD 설정
PGMRTS00 유틸리티 프로그램에서 단독으로 사용하는 DD 설정은 없으며 최종적으로 실행되는 Batch
애플리케이션에서 필요로 하는 DD를 자동으로 설정해준다.
명령어 설정
PGMRTS00 유틸리티 프로그램에서 따로 설정해야 하는 명령어는 없다.
사용예제
사용자가 PGMRTS00 유틸리티 프로그램을 직접 JCL에 기술해서 사용하는 경우는 없다.
128 OpenFrame 유틸리티 참조 안내서
유의사항
PGMRTS00 유틸리티 프로그램이 Batch 애플리케이션을 실행한 결과는 다음과 같다.
● 정상적으로 실행한 경우
Batch 애플리케이션에서 받은 코드를 반환한다.
● 에러가 발생한 경우
해당 에러 메시지를 SYSPRINT DD에 출력하고 에러에 해당하는 코드를 반환한다.
PGMRTS00 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.
설명코드
Unrecoverable 형태의 에러로, 다음의 경우가 해당된다.12
- 데이터 셋 인증관련 준비과정 실패
- 프로그램 파라미터 개수 지정 에러
- 실행시켜야할 애플리케이션을 찾지 못하는 에러
- 지원하지 않는 애플리케이션 바이너리 형식
- 동적 메모리 LOAD(dlopen) 실패
- 엔트리 포인트 검색(dlsym) 실패
시스템과 관련된 에러로, 다음의 경우가 해당된다.16
- OpenFrame 시스템 라이브러리 초기화 실패
- 애플리케이션의 바이너리 형식 체크 에러
- 프로세스 분기(fork) 실패
- I/O 리다이렉트 실패
제3장 기타 유틸리티 129
관련 환경설정
JCL Runner의 설정 파일인 tjclrun.conf 파일에서 PGMRTS00 유틸리티 프로그램에 대한 설정을 할 수 있
다.
Shared Object로 만들어진 Batch 애플리케이션을 JCL에서 직접 실행할 수 있도록 하기 위해서는 해당 설
정 파일의 [PGM]에 다음과 같은 항목을 추가한다.
[PGM] USE_PGMRTS00=YES
USE_PGMRTS00 항목이 별도로 설정되지 않은 경우 기본값으로 NO가 설정된다.
참고
유사한 유틸리티 프로그램으로는 IKJEFT01(TSO Terminal Monitoring Program)과 DFSRRC00(HiDB
Region Control Program)이 있다.
3.6. SDSF사용자가 입력한 명령어를 스크립트 형태로 작성하여 Batch JOB을 컨트롤할 수 있는 유틸리티 프로그램
이다.
SDSF에서는 HOLD 상태의 JOB을 검색하여 JOB을 START 시키는 기능을 지원한다.
참고
TSO 환경의 ISPF는 지원하지 않는다.
DD 설정
DD 설정 항목은 다음과 같다.
설명항목
SDSF에서 출력하는 메시지를 저장할 데이터 셋을 지정한다.ISFOUT DD
SDSF에서 사용할 스크립트를 지정한다.ISFIN DD
명령어 설정
HOLD 상태의 JOB을 검색하여 JOB을 START 시키기 위한 명령어이다.
설명항목
ISPF의 입력 패널에서 실행 전의 JOB의 상태를 보여준다.I
130 OpenFrame 유틸리티 참조 안내서
설명항목
HOLD 상태의 JOB을 검색하기 위하여 PREFIX 패턴으로 주어진 문자열을 기반으로
일차적인 검색을 시작한다.
PREFIX 패턴
PREFIX 패턴으로 검색한 JOB 중에서 FIND 패턴으로 주어진 문자열을 기반으로 실
제 구동시킬 HOLD 상태의 JOB을 찾는다.
FIND 패턴
HOLD 상태의 JOB을 실제로 START시킨다.++A
사용예제
다음은 SDSF00라는 JOB을 구동하면서, SDSFHOLD라는 HOLD 상태의 JOB을 START시키는 예이다.
#############################################################
## SDSF00 - start a holded job via
SDSF ##
#############################################################
//*
#############################################################
## SDSFHOLD - dummy job for sdsf test. submitted as
hold ##
#############################################################
//SDSFHOLD JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),TYPRUN=HOLD
//STEP1 EXEC PGM=IEFBR14
//*
#############################################################
## SDSF00 - start a holded job via
SDSF ##
#############################################################
//SDSF00 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//START EXEC PGM=SDSF
//SYSOUT DD SYSOUT=*
//ISFOUT DD SYSOUT=*
//ISFIN DD *
I
PREFIX SDSF
FIND SDSFHOLD
++A
/*
제3장 기타 유틸리티 131
색인
JJDJDUMMY
DD 설정, 126
반환 코드, 127
사용예제, 127
JSCVSUT
ALTER, 8
BLDINDEX, 11
CANCEL, 53
CHECKCAT, 12
DD 설정, 6
DEFINE, 14
DEFINE ALIAS, 17
DEFINE ALTERNATEINDEX, 18
DEFINE CLUSTER, 20
DEFINE GDG, 23
DEFINE NONVSAM, 25
DEFINE PATH, 26
DEFINE USERCATALOG/MASTERCATALOG, 28
DELETE, 30
EXPORT, 31
EXTRACT, 32
IF-THEN-ELSE, 51
IMPORT, 33
LISTCAT, 35
LISTENT, 39
LISTST, 40
Null, 52
PRINT, 41
REPRO, 44
SET, 53
SPLITMRG, 46
SRCHCAT, 48
VERIFY, 50
관련 환경설정, 55
기능 명령어, 8
보조 명령어, 51
컨디션 코드, 54
JSCVSUT 보조 명령어, 51
JSDEDIT
DD 설정, 64
EDIT, 64
반환 코드, 68
사용예제, 65
JSDPCPY
COPY, COMPRESS, EXPAND, 69
DD 설정, 69
EMPTY, 70
EXCLUDE, 71
INDD, 71
SELECT, 70
명령어 약어, 77
반환 코드, 76
사용예제, 71
JSDPRNT
DD 설정, 77
EXITS, 81
LABELS, 81
MEMBER, 80
PRINT, 78
RECORD, 80
TITLE, 81
반환 코드, 82
사용예제, 81
JSDSCPY
DD 설정, 83
EXITS, 86
GENERATE, 83
LABELS, 86
MEMBER, 85
RECORD, 84
반환 코드, 88
사용예제, 86
JSDUPDT
ADD, REPL, REPRO, CHANGE, 90
ALIAS, 92
DD 설정, 89
ENDUP, 92
LABEL, 92
색인 133
MASK, 92
NUMBER, DELETE, 91
반환 코드, 95
사용예제, 92
JSFCTLG
CATLG, 97
DD 설정, 96
SCRATCH, 96
UNCATLG, 97
반환 코드, 99
사용예제, 98
JSFDCDP
COMP, 103
DD 설정, 100
DUMP, 100
PRINT, 103
RESTORE, 102
반환 코드, 104
사용예제, 103
JSFILST
DD 설정, 105
LISTPDS, 105
LISTVTOC, 106
반환 코드, 108
사용예제, 106
JSFMOVE
DD 설정, 110
EXCLUDE, 115
INCLUDE, 114
MOVE(COPY) DSGROUP, 111
MOVE(COPY) DSNAME, 110
MOVE(COPY) PDS, 112
MOVE(COPY) VOLUME, 113
REPLACE, 115
SELECT, 115
기능 명령어, 110
반환 코드, 118
보조 명령어, 114
사용예제, 116
134 OpenFrame 유틸리티 참조 안내서