128
OpenFrame 데이터 안내서 OpenFrame/Base v5.1 Copyright © 2009 TmaxSoft Co., Ltd. All Rights Reserved.

OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

OpenFrame

데이터 셋 안내서

OpenFrame/Base v5.1

Copyright © 2009 TmaxSoft Co., Ltd. All Rights Reserved.

Page 2: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

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-12-12

소프트웨어 버전: OpenFrame/Base v5.1

안내서 버전: v2.1.3

Page 3: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

내용 목차

안내서에 대하여 .......................................................................................................................... vii

제1장 데이터 셋 소개 .................................................................................................................. 1

1.1. 액세스 메소드 .............................................................................................................. 1

1.2. 데이터 셋 이름 ............................................................................................................. 3

1.3. 스토리지 관리 .............................................................................................................. 4

1.3.1. 스토리지 클래스 ................................................................................................ 4

1.3.2. 매니지먼트 클래스 ............................................................................................. 4

1.3.3. 데이터 클래스 ................................................................................................... 5

1.4. 카탈로그 등록 .............................................................................................................. 5

1.5. 데이터 셋 관리 ............................................................................................................. 6

1.5.1. 액세스 메소드 서비스 ........................................................................................ 6

1.6. 데이터 셋 처리 ............................................................................................................. 8

1.6.1. Allocation/Unallocation ....................................................................................... 8

1.6.2. Open/Close ....................................................................................................... 9

1.6.3. Open Mode ....................................................................................................... 9

1.6.4. 액세스 모드 ..................................................................................................... 10

1.6.5. 레코드 접근 ..................................................................................................... 11

제2장 Non-VSAM 데이터 셋 ...................................................................................................... 13

2.1. 레코드 포맷 ................................................................................................................ 13

2.2. DCB 구조체 ............................................................................................................... 15

2.3. 순차 데이터 셋 ........................................................................................................... 16

2.4. 분할 데이터 셋 ........................................................................................................... 18

2.5. 세대 데이터 그룹 ........................................................................................................ 20

2.5.1. 절대 세대번호 .................................................................................................. 21

2.5.2. 상대 세대번호 .................................................................................................. 22

2.5.3. 다중 Step 작업에서의 유의사항 ........................................................................ 22

제3장 VSAM 데이터 셋 ............................................................................................................. 23

3.1. VSAM 데이터 포맷 ..................................................................................................... 23

3.2. VSAM 데이터 셋 유형 ................................................................................................. 25

3.2.1. KSDS ............................................................................................................. 26

3.2.2. ESDS ............................................................................................................. 26

3.2.3. RRDS ............................................................................................................. 27

3.2.4. VRDS ............................................................................................................. 27

3.3. 보조 인덱스와 스피어 ................................................................................................. 28

3.3.1. 보조 인덱스 ..................................................................................................... 28

3.3.2. 스피어 ............................................................................................................ 29

3.4. VSAM 데이터 셋 관리 ................................................................................................. 29

제4장 통합 카탈로그 ................................................................................................................. 35

4.1. 카탈로그 소개 ............................................................................................................ 35

OpenFrame iii

Page 4: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

4.1.1. 카탈로그 구조 .................................................................................................. 35

4.1.2. 카탈로그 검색 순서 .......................................................................................... 36

4.1.3. 마스터 카탈로그 .............................................................................................. 36

4.1.4. 카탈로그에 등록되는 항목 ................................................................................ 37

4.1.5. 카탈로그에 저장되는 내용 ................................................................................ 38

4.2. 카탈로그 구조 ............................................................................................................ 38

4.3. 카탈로그 관리 ............................................................................................................ 40

4.4. 관련 툴 프로그램 ........................................................................................................ 43

Appendix A. 설정 파일 ............................................................................................................. 45

A.1. unit.conf .................................................................................................................... 45

A.2. volume.conf ............................................................................................................... 47

A.3. sms.conf .................................................................................................................... 48

A.4. acs.conf .................................................................................................................... 50

A.5. ds.conf ...................................................................................................................... 52

A.6. keyseq.conf ............................................................................................................... 61

Appendix B. 카탈로그 관리 API ................................................................................................ 65

B.1. Volume Information .................................................................................................... 66

B.2. Catalog Search .......................................................................................................... 67

B.3. File Path Resolution ................................................................................................... 71

B.4. Entry Management ..................................................................................................... 72

Appendix C. 데이터 셋 I/O API ................................................................................................. 75

C.1. File Open/Close ......................................................................................................... 75

C.2. Record Access .......................................................................................................... 78

C.3. File Status Code ........................................................................................................ 83

Appendix D. DCB Handling API ............................................................................................... 85

D.1. Allocation Handle ....................................................................................................... 86

D.2. DCB Information ........................................................................................................ 88

D.3. Get Attributes ............................................................................................................. 91

D.4. Set Attributes ............................................................................................................. 95

Appendix E. FCD Handling API ............................................................................................... 99

E.1. File Open Session .................................................................................................... 100

E.2. Record Access ......................................................................................................... 102

E.3. Special Operations ................................................................................................... 106

색인 .......................................................................................................................................... 111

iv OpenFrame 데이터 셋 안내서

Page 5: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

그림 목차

[그림 2.1] 고정 길이 레코드 ........................................................................................................ 14

[그림 2.2] 가변 길이 레코드 ........................................................................................................ 14

[그림 2.3] 분할 데이터 셋 구조 ................................................................................................... 18

[그림 3.1] Control Interval .......................................................................................................... 24

[그림 3.2] 보조 인덱스 ............................................................................................................... 28

[그림 4.1] 카탈로그 구조 ............................................................................................................ 40

OpenFrame v

Page 6: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에
Page 7: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

안내서에 대하여

안내서의 대상

본 안내서는 리호스팅 솔루션인 Tmax OpenFrame®(이하 OpenFrame)/Base 시스템을 사용하는 사용자

를 대상으로 기술한다.

안내서의 전제 조건본 안내서를 정확히 사용하려면 OpenFrame/Base의 개념을 이해하고 있어야 한다. OpenFrame/Base에

대한 이해를 돕기 위해 “OpenFrame Base 안내서”를 먼저 숙지할 것을 권장한다.

안내서의 제한 조건본 안내서에서는 데이터 셋에서 현재 지원하지 않는 기능/옵션/파라미터에 대해서 별도로 표기하였으며

이에 대한 설명은 생략한다.

안내서에 대하여 vii

Page 8: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

안내서 구성

데이터 셋 안내서는 총 4개의 장과 Appendix로 구성되어 있다.

각 장의 주요 내용은 다음과 같다.

● 제1장: 데이터 셋 소개

데이터 셋 액세스 메소드, 데이터 셋 이름, SMS 클래스, 카탈로그 등록과 관리 그리고 데이터 셋 처리

등 데이터 셋 전반에 대해서 기술한다.

● 제2장: Non-VSAM 데이터 셋

레코드 포맷, DCB 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 Non-VSAM 데이터 셋

의 특징과 종류에 대해서 기술한다.

● 제3장: VSAM 데이터 셋

VSAM 데이터 포맷, VSAM 데이터 셋 유형, 보조 인덱스와 스피어 그리고 VSAM 데이터 셋을 관리하는

방법에 대해서 기술한다.

● 제4장: 통합 카탈로그

카탈로그의 구조, 검색 순서, 마스터 카탈로그 등 카탈로그에 대한 전반적인 사항에 대해 알아보고, 카

탈로그 구조와 카탈로그 관리방법에 대하여 기술한다. 마지막으로 카탈로그 관련 툴 프로그램에 대하

여 설명한다.

● Appendix. A : 설정 파일

OpenFrame 데이터 셋에서 필요로 하는 각종 설정 파일과 설정 항목에 대해서 기술한다.

● Appendix. B : 카탈로그 관리 API

카탈로그 관리 API의 인터페이스를 사용하여 카탈로그 항목과 데이터 셋을 관리하는 방법에 대해서 기

술한다.

● Appendix. C : 데이터 셋 I/O API

데이터 셋 I/O API의 인터페이스를 사용하여 C로 작성된 애플리케이션 프로그램에서 데이터 셋의 레코

드에 대해 읽기/쓰기를 수행하는 방법에 대해서 기술한다.

● Appendix. D : DCB Handling API

DCB Handling API의 인터페이스를 사용하여 JCL에서 할당된 DD에 대한 속성정보를 조회하거나 일부

속성을 변경하는 방법에 대해서 기술한다.

● Appendix. E : FCD Handling API

viii OpenFrame 데이터 셋 안내서

Page 9: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

FCD Handling API의 인터페이스를 사용하여 Main COBOL 애플리케이션 프로그램에서 OPEN된 데이

터 셋을 C로 작성된 서브 프로그램에서 읽기/쓰기를 수행하는 방법에 대해서 기술한다.

안내서에 대하여 ix

Page 10: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

안내서 규약

의미표기

프로그램 소스 코드의 파일명, 디렉터리<AaBbCc123>

Ctrl과 C를 동시에 누름<Ctrl>+C

GUI의 버튼 또는 메뉴 이름[Button]

강조진하게

다른 관련 안내서 또는 안내서 내의 다른 장 및 절 언급" "(따옴표)

화면 UI에서 입력 항목에 대한 설명'입력항목'

메일계정, 웹 사이트하이퍼링크

메뉴의 진행 순서>

하위 디렉터리 또는 파일 있음+----

하위 디렉터리 또는 파일 없음|----

참고 또는 주의사항참고

그림 이름[그림 1.1]

표 이름[표 1.1]

명령어, 명령어 수행 후 화면에 출력된 결과물, 예제코드AaBbCc123

필수 인수 값{ }

옵션 인수 값[ ]

선택 인수 값|

x OpenFrame 데이터 셋 안내서

Page 11: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

시스템 사용 환경

요구 사항

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

안내서에 대하여 xi

Page 12: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

관련 안내서

설명안내서

OpenFrame 솔루션을 개념적으로 이해하는데 도움이 되도록 작성된 안내서

이다.

OpenFrame

시작하기 안내서

OpenFrame/Base 제품의 설치와 환경 설정에 대한 부분을 기술한 안내서이

다.

OpenFrame

Base 설치 안내서

Base 시스템을 구성하는 요소와 전반적인 기능에 대해 기술한 안내서이다.OpenFrame

Base 안내서

VSAM에 대응하는 제품인 TSAM에 대한 소개와 데이터 셋 종류 및 관리 방

법, 데이터 셋 처리 방법에 대해 기술한 안내서이다.

Tibero

TSAM 안내서

OpenFrame 엔진과 함께 제공되는 다양한 유틸리티 프로그램에 대해 기술된

안내서이다.

OpenFrame

유틸리티 참조 안내서

OpenFrame 시스템을 운용하는데 사용하는 다양한 툴 프로그램에 대해 기술

된 안내서이다.

OpenFrame

툴 참조 안내서

Mainframe 환경의 리소스를 OpenFrame 환경으로 마이그레이션 할 때 필요

한 정보와 전환절차 또는 주의사항 등에 대해 기술된 안내서이다.

OpenFrame

마이그레이션 안내서

제품 사용 중에 발생할 수 있는 에러에 대한 정보 및 에러 대응방법이 기술된

안내서이다.

OpenFrame

에러 메시지 참조 안내서

참고 문헌

안내서제품

z/OS DFSMS: Using Data SetsIBM Mainframe

z/OS DFSMS: Managing Catalogs

z/OS DFSMS: Access Method Services for Catalogs

VOS3 데이터 관리 해설Hitachi Mainframe

VOS3 데이터 형식

VOS3 VSAM 해설

xii OpenFrame 데이터 셋 안내서

Page 13: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

연락처

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

안내서에 대하여 xiii

Page 14: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

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

xiv OpenFrame 데이터 셋 안내서

Page 15: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

제1장 데이터 셋 소개

논리적으로 연결된 데이터 레코드의 집합을 데이터 셋이라 하며, 레코드는 애플리케이션에서 사용되는

정보의 기본 단위이다. 데이터 셋과 UNIX 파일과의 근본적인 차이점은 데이터 셋을 사용하는 경우에는

레코드 단위의 I/O를 지원해주는 액세스 메소드가 제공된다는 점이다.

데이터 셋은 하드디스크나 마그네틱 테이프와 같은 이차 저장장치에 저장되며, 저장장치의 기본 단위는

볼륨이다. 하드디스크에는 모든 종류의 데이터 셋이 저장될 수 있지만, 마그네틱 테이프에는 순차 데이터

셋(SDS)만 저장될 수 있다.

OpenFrame에서는 마그네틱 테이프 디바이스를 실제로 지원하지 않고, 대신에 하드디스크의 특정 영역

을 마그네틱 테이프 볼륨으로 Mapping하는 방법을 제공하며, 옵션에 따라서 마그네틱 테이프 볼륨에 저

장된 데이터 셋을 압축해서 보관할 수 있다.

1.1. 액세스 메소드데이터를 레코드 단위로 읽어 들이고 저장하는데 사용되는 기술로서, 각 액세스 메소드는 자신만의 데이

터 셋 구조를 가지고 데이터를 저장하며, 데이터 셋을 처리하는 인터페이스와 유틸리티 프로그램을 가지

고 있다.

각 데이터 셋을 처리하는데 사용되는 액세스 메소드는 그 데이터 셋의 구조로 식별된다. 예를 들면 순차

데이터 셋을 처리하려면 BSAM이나 QSAM을 사용해야 한다.

다음은 데이터 셋의 액세스 메소드 종류와 그에 대한 설명이다.

● BDAM (Basic Direct Access Method)

프로그램에서 원하는 대로 데이터 레코드를 저장하며, 0부터 시작하는 데이터 레코드의 상대 주소로 직

접 접근한다. BDAM 데이터 셋에서는 한 블록 크기만큼의 데이터를 하나의 레코드로 인식한다.

BDAM 액세스 메소드는 가장 기본적인 형태의 엑세스 메소드로 사용상의 제약이 많아서 최근의 업무

프로그램에서는 많이 사용되지 않는 편이다.

● BSAM (Basic Sequential Access Method)

데이터 레코드를 입력된 순서대로 저장하는 방식으로 구성된 데이터 셋을 순차 데이터 셋이라고 한다.

프로그램은 여러 레코드들을 하나의 블록으로 구성하여 저장하며, BSAM은 블록 단위로 데이터를 읽거

나 쓸 수 있다.

OpenFrame에서는 순차 데이터 셋을 처리하기 위해서, 데이터 블록에 대한 버퍼 관리를 사용자에게 맡

기는 BSAM 액세스 메소드 대신, 액세스 메소드에서 사용자를 대신해 버퍼를 관리해 주는 QSAM 액세

스 메소드를 제공한다.

제1장 데이터 셋 소개 1

Page 16: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● QSAM (Queued Sequential Access Method)

BSAM과 마찬가지로 입력된 순서대로 레코드를 저장한다. QSAM은 I/O 성능향상을 위해 버퍼링 기법

을 사용하며, 사용자를 대신해 버퍼를 관리해 준다.

즉, GET 인터페이스는 입력 버퍼로부터 다음 순차 레코드를 읽고, PUT 인터페이스로 다음 순차 레코드

를 출력 버퍼에 기록한다. 디스크에 있는 데이터를 입력 버퍼로 읽어들이거나, 출력 버퍼에 있는 데이터

를 디스크에 저장하는 역할은 액세스 메소드가 수행한다.

● ISAM (Indexed Sequential Access Method)

ISAM으로 처리되는 데이터 셋은 색인 순차 데이터 셋이라고 불린다. ISAM은 키 필드의 순서대로 레코

드를 저장하며, 키 필드로 데이터 레코드를 조회한다.

OpenFrame에서는 ISAM 데이터 셋을 내부적으로 VSAM의 KSDS 데이터 셋으로 매핑해서 지원한다.

하지만 향후 데이터 셋 관리의 통일성을 위해서는 VSAM의 KSDS 데이터 셋으로 전환해서 사용할 것을

권장한다.

● BPAM (Basic Partitioned Access Method)

데이터를 분할 데이터 셋(PDS: Partitioned Data Set)의 멤버로서 저장한다. 분할 데이터 셋 각각의 멤

버는 하나의 순차 데이터 셋으로 볼 수 있다.

분할 데이터 셋은 데이터 셋 내부에 각각의 멤버 이름으로 데이터 주소를 찾을 수 있는 디렉터리 정보를

포함한다. OpenFrame에서 분할 데이터 셋은 UNIX 파일 시스템의 디렉터리로 구성된다.

● VSAM (Virtual Storage Access Method)

VSAM은 디스크에 저장된 고정 길이 레코드나 가변 길이 레코드에 대한 직접 처리(Direct Processing)

또는 순차 처리(Sequential Processing)를 하는데 사용된다. 그리고 VSAM에 의해 구성된 데이터는 빠

른 접근을 위해 반드시 카탈로그에 등록되어야 한다.

VSAM 데이터 셋은 다음과 같이 4가지 유형으로 분류된다.

설명유형

입력된 순서대로 레코드를 저장하며, 새로운 레코드는 데이터

셋의 뒷부분에 추가된다. 레코드에 대한 순차 처리가 가능하고

ESDS(Entry-Sequenced Data Set)

상대 주소(RBA: Relative Byte Address)를 사용한 직접 처리도

가능하다.

레코드는 키 필드의 오름차순으로 저장되며, 키 필드로 레코드

에 대한 직접 처리를 할 수 있다. TSAM에서는 상대 주소로

KSDS 데이터 셋에 대한 직접 처리는 할 수 없다.

KSDS(Key-Sequenced Data Set)

레코드 번호(RRN: Relative Record Number) 순서대로 레코드

를 저장하며, 이 레코드 번호로만 레코드에 대한 직접 처리가

RRDS(Relative Record Data Set)

가능하다. RRDS에는 고정 길이 RRDS와 가변 길이 RRDS의

2가지 종류가 있다.

2 OpenFrame 데이터 셋 안내서

Page 17: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명유형

LDS는 데이터를 레코드 단위가 아닌 블록 단위로 저장한다.

LDS는 다른 VSAM 데이터 셋과는 다르게 어떠한 컨트롤 정보

LDS(Linear Data Set)

도 데이터 셋 안에 담고 있지 않다. TSAM에서는 LDS를 지원하

지 않는다.

참고

1. OpenFrame에서는 VSAM에 대응되는 제품으로 TSAM을 제공한다. TSAM에 대한 자세한 내용은

"Tibero TSAM 안내서"를 참고한다.

2. Hitachi Mainframe에서는 LDS 유형을 FDS(Flat Data Set) 유형으로 구분한다.

3. VSAM 데이터 셋 유형에 대한 자세한 내용은 “3.2. VSAM 데이터 셋 유형”을 참고한다.

액세스 메소드를 선택할 때에는 사용하려는 데이터 셋의 유형과 저장 장치의 종류를 고려해서 선택해야

한다. VSAM 데이터 셋과 PDS, ISAM 데이터 셋은 하드디스크 볼륨에만 저장되고, 순차 데이터 셋은 하드

디스크 볼륨이나 마그네틱 테이프 볼륨에 저장된다.

새로운 데이터 셋에 대한 액세스 메소드를 선택하려면 순차처리를 할 것인지 아니면 직접처리를 할 것인

지 그리고 어떤 종류의 처리를 원하는지 등을 먼저 고려해야 한다.

예를 들면 RRDS는 직접처리만 하는 애플리케이션이나 직접 처리 또는 순차 처리를 하는 애플리케이션에

적합하다. BSAM(순차 데이터 셋)이나 VSAM ESDS 데이터 셋은 순차 처리를 하는 애플리케이션에 적합

하다.

1.2. 데이터 셋 이름새로운 데이터 셋을 생성할 때마다 사용자는 데이터 셋에 유일한 이름을 작성해야 한다. (일반적으로 데이

터 셋의 이름은 JCL에서 dsname으로 주어진다.)

데이터 셋의 이름은 하나의 이름 세그먼트 또는 여러 개의 연결된 이름 세그먼트로 구성되며, 각각의 이름

세그먼트는 Qualification으로 레벨을 나타낸다.

예를 들어 TPLAB.IGKANG.TEST3이라는 데이터 셋 이름은 3개의 이름 세그먼트로 구성되어 있다. 1번째

이름 세그먼트인 TPLAB은 최상위 Qualifier(High Level Qualifier)라고 불리고, 마지막 이름 세그먼트인

TEST3은 최하위 Qualifier(Low Level Qualifier)라고 불린다.

데이터 셋 이름은 다음과 같은 규칙을 가져야 한다.

● 이름 세그먼트당 최대 8개의 문자로 구성된다.

● 세그먼트의 1번째 문자는 알파벳(A-Z)이나 기호문자(@,#,$) 중 하나로 시작한다.

● 세그먼트의 나머지 7개의 문자는 알파벳(A-Z), 숫자(0-9), 기호문자(@,#,$) 또는 하이픈(-) 중 선택한다.

제1장 데이터 셋 소개 3

Page 18: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 이름 세그먼트를 구분하기 위해 마침표(.)를 사용한다.

● 전체 데이터 셋 이름은 이름 세그먼트와 마침표 문자를 포함하여 44문자로 제한한다.

1.3. 스토리지 관리새로운 데이터 셋을 생성할 때마다 JOB을 실행시키는 사용자가 데이터 셋이 저장되어야 하는 UNIT이나

볼륨 시리얼을 JCL에 직접 기술하는 방식은 매우 비효율적이다. 또 JOB을 실행시키는 각 사용자에게 스

토리지 관리를 맡겨버린다면, 스토리지 관리에 대한 체계가 없어서 시간이 지남에 따라 스토리지를 관리

하기가 더욱 힘들어질 것이다.

따라서 본 절에서는 OpenFrame 시스템에서 SMS 클래스들(스토리지 클래스, 매니지먼트 클래스, 데이터

클래스)을 사용하여 효과적으로 스토리지를 관리할 수 있는 방법에 대해서 설명한다.

1.3.1. 스토리지 클래스

스토리지 관리자는 현재 시스템에서 사용 가능한 모든 스토리지에 대해 각 스토리지 디바이스의 성능과

용량을 기준으로 용도를 구분한 뒤, 구분된 스토리지 디바이스들을 sms.conf 파일에 스토리지 클래스로

등록한다.

시스템에 스토리지 클래스가 등록된 이후에는 JCL의 DD 문장에 UNIT이나 VOL 파라미터로 직접 볼륨 시

리얼을 지정하는 방법 대신, JCL의 DD 문장에 스토리지 클래스를 지정해 줄 수 있다. 스토리지 클래스가

지정된 데이터 셋은 해당 스토리지 클래스로 분류된 스토리지 볼륨 시리얼 중 한 곳에 데이터 공간이 할당

된다.

데이터 셋의 이름에서 데이터 셋의 속성을 유추할 수 있다면 JCL의 DD 문장에 직접 스토리지 클래스를

지정하지 않고서도, 자동으로 스토리지 클래스가 지정되게 할 수 있다.

스토리지 관리자가 acs.conf 파일에 ACS(Automatic Class Selection) 규칙을 등록하게 되면, 해당 ACS 규

칙에 부합하는 데이터 셋은 스토리지 관리자가 설정한 스토리지 클래스로 지정되고, 그 스토리지 클래스

로 미리 분류된 볼륨 시리얼 중 한 곳에 데이터 셋의 데이터 공간이 할당된다.

sms.conf와 acs.conf 파일에 대한 자세한 내용은 “Appendix A. 설정 파일”을 참고한다.

1.3.2. 매니지먼트 클래스

스토리지 관리에는 신규 데이터 셋에 대한 데이터 공간의 할당뿐만 아니라 만기가 지난 데이터 셋에 대한

삭제 작업도 포함한다.

스토리지 관리자는 데이터 셋의 보관기간에 따라 데이터 셋의 클래스를 분류한 뒤, sms.conf 파일에 매니

지먼트 클래스로 등록한다. 이렇게 등록된 매니지먼트 클래스는 앞에서 설명한 스토리지 클래스와 마찬

가지로 JCL의 DD 문장에 직접 기술해서 사용하거나 또는 ACS 규칙을 등록해서 자동으로 데이터 셋에 매

니지먼트 클래스가 지정되도록 설정할 수 있다.

4 OpenFrame 데이터 셋 안내서

Page 19: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

매니지먼트 클래스가 지정된 데이터 셋은 만기일이 지나면 OpenFrame 데이터 셋 관리 서버인 ofrdmsvr

에 의해 자동으로 삭제된다.

1.3.3. 데이터 클래스

데이터 클래스는 공통적으로 많이 사용되는 데이터 셋의 속성을 기준으로 클래스를 등록한다. 데이터 클

래스를 사용하면 사용자가 보다 쉽게 JCL을 작성할 수 있다.

데이터 클래스로 정의된 데이터 셋의 속성은 앞에서 설명한 스토리지 클래스나 매니지먼트 클래스와는

달리 JCL 파라미터로 변경할 수 있다.

다음의 예제는 JCL을 사용해서 새로운 데이터 셋을 생성하는 방법을 보여준다. 이 예제에서는 ACS 규칙

을 사용하지 않고 JCL에 직접 SMS 클래스를 지정해서 데이터 셋을 생성한다. (아래 예제에서는 스토리지

클래스가 직접 지정되었기 때문에 VOL 파라미터와 UNIT 파라미터는 무시된다.)

//MYJOB JOB

//STEP1 EXEC PGM=IEFBR14

//MKDS1 DD DSNAME=IGKANG.TEST.DS0001,DISP=(NEW,CATLG),

// DATACLAS=TEST,MGMTCLAS=NEVER,

// STORCLAS=SECURE,VOL=SER=XXXXXX,UNIT=SYSDA

1.4. 카탈로그 등록데이터 셋의 물리적인 저장장소를 관리하기 위해 OpenFrame 시스템은 VTOC(Volume Table of Contents)

와 카탈로그를 사용한다.

VTOC는 한 볼륨 안에 있는 데이터 셋의 목록을 관리하고, 데이터 셋에 대한 기본적인 정보와 물리적인 디

스크 주소 그리고 데이터 셋의 크기를 관리한다.

카탈로그는 데이터 셋의 여러 가지 속성과 데이터 셋이 위치한 볼륨에 대한 정보를 기술한다.

데이터 셋은 다음의 여러 가지 방법을 통해 카탈로그에 등록된다.

● JCL(Job Control Language)의 DISP 파라미터

● AMS(Access Method Service)의 ALLOCATE 또는 DEFINE 명령

● TSO(Time Sharing Option)의 ALLOCATE 명령

카탈로그에 등록되지 않았지만, 이미 존재하는 데이터 셋은 IDCAMS(혹은 JSCVSUT) 유틸리티의 DEFINE

RECATALOG 명령을 통해 카탈로그에 등록할 수 있다.

제1장 데이터 셋 소개 5

Page 20: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

참고

1. 카탈로그에 대한 보다 자세한 내용은 “제4장 통합 카탈로그”의 내용을 참고한다.

2. IDCAMS(혹은 JSCVSUT) 유틸리티에 대한 자세한 내용은 OpenFrame 안내서 중 "유틸리티 참조

안내서"를 참고한다.

1.5. 데이터 셋 관리다음은 데이터 셋에 대한 관리작업에 대한 설명이다.

● 데이터 셋의 생성

사용자가 애플리케이션이나 유틸리티 프로그램 등을 이용하여 데이터 셋을 사용하려면 그 전에 사용자

또는 관리자에 의해 사용될 데이터 셋을 미리 생성해 두어야 한다.

● 데이터 셋의 삭제

더 이상 사용하지 않는 데이터 셋을 삭제한다.

● 데이터 셋에 대한 조사 및 속성 변경

기존에 생성된 데이터 셋에 대해서 속성을 조사하거나 일부 속성을 변경할 수 있다. 데이터 셋에 레코드

가 적재되어 있는 경우 또는 데이터 셋의 현재 상태에 따라 변경할 수 있는 속성의 종류는 제한된다.

● 데이터 셋의 적재 및 복사

애플리케이션에서 처리할 레코드들을 미리 데이터 셋에 적재하거나 백업 등을 위하여 다른 데이터 셋

으로 복사하는 작업이다.

위와 같은 데이터 셋 관리작업을 수행하기 위하여 사용자 또는 관리자는 직접 라이브러리 API를 사용해서

프로그램을 작성할 수도 있지만, 일반적인 목적의 관리 작업 대부분은 명령어 처리 방식의 IDCAMS(혹은

JSCVSUT) 유틸리티를 사용해서 간단하게 관리작업을 수행할 수 있다.

1.5.1. 액세스 메소드 서비스

다음은 IDCAMS(혹은 JSCVSUT) 유틸리티 명령어에 대한 간단한 설명이다.

● DEFINE NONVSAM

DEFINE NONVSAM 명령을 사용해서 Non-VSAM 데이터 셋 (Physical Sequence Data set)을 정의한다.

정의된 Non-VSAM 데이터 셋은 이 후의 REPRO 작업에 사용될 수 있다.

● DEFINE GENERATIONDATAGROUP

DEFINE GENERATIONDATAGROUP 명령은 세대 데이터 그룹을 정의한다.

6 OpenFrame 데이터 셋 안내서

Page 21: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● DEFINE CLUSTER

DEFINE CLUSTER 명령을 사용해서 VSAM 데이터 셋을 정의한다. VSAM 데이터 셋을 정의하기 위한

필수적인 속성과 부가적인 속성들을 함께 지정할 수 있다.

● DEFINE ALTERNATEINDEX

DEFINE ALTERNATEINDEX 명령을 사용해서 보조 인덱스 데이터 셋을 정의한다. 보조 인덱스 데이터

셋은 특정 데이터 셋(베이스 클러스터)에 대한 별도의 인덱싱 방법을 제공한다.

VSAM 액세스 메소드는 베이스 클러스터에 레코드가 추가 혹은 삭제되는 경우, 연관된 보조 인덱스들

에 대해서도 자동적으로 내용을 갱신하여 보조 인덱스가 지속적으로 베이스 클러스터에 대한 별도의

인덱싱을 제공할 수 있도록 해 준다.

● DEFINE PATH

DEFINE ALTERNATEINDEX 명령을 통해서 정의된 보조 인덱스와 베이스 클러스터와의 관계는 DEFINE

ALTERNATEINDEX 명령의 RELATE 파라미터에 의해서 설정된다. 하지만 보조 인덱스를 사용하여 베

이스 클러스터에 접근하기 위해서는 DEFINE PATH 명령을 사용해서 베이스 클러스터 접근 경로를 설

정해야 한다.

DEFINE PATH 명령은 이미 정의된 보조 인덱스와 베이스 클러스터 사이의 경로를 설정한다. 여기서

PATH는 하나의 베이스 클러스터에 대해서 보조 인덱스를 사용한 접근 경로라는 뜻으로 볼 수 있다.

PATH는 논리적인 성격만을 지니는 가상적인 카탈로그 항목이다.

● DELETE

VSAM 데이터 셋이나 Non-VSAM 데이터 셋 또는 카탈로그된 데이터 셋 항목을 삭제하려면 DELETE

명령을 사용한다.

DELETE 명령어를 이용하여 삭제하고자 하는 데이터 셋이나 카탈로그 항목 이름 그리고 해당 항목이

저장되어 있는 카탈로그 이름을 제공하여 이미 존재하는 카탈로그 항목을 삭제할 수 있다.

● REPRO

DEFINE 명령을 통해서 데이터 셋이 이미 정의되어 있다면, REPRO 명령을 이용해서 VSAM 및 Non-

VSAM 데이터 셋의 내용을 다른 데이터 셋에 복사할 수 있다. 이 명령에 사용되는 VSAM 데이터 셋은

카탈로그에 등록되어 있어야 하며, Non-VSAM 데이터 셋은 카탈로그에 등록되어 있지 않아도 된다.

Mainframe의 카탈로그는 일반적으로 하나의 KSDS 클러스터에 저장되어 있기 때문에 REPRO 명령은

카탈로그 내용 자체를 복사하는 용도로도 사용될 수 있다. 물론, REPRO 명령을 사용하지 않고 일반적

인 애플리케이션을 작성해서 해당 데이터 셋에 레코드를 적재하는 경우도 매우 일반적이다.

반면, REPRO 명령어는 주로 레코드의 내용에 상관하지 않고 관리 목적으로 데이터 셋을 복사해 두는

경우에 많이 사용된다.

● LISTCAT

제1장 데이터 셋 소개 7

Page 22: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

LISTCAT 명령을 사용하면 카탈로그에 정의된 데이터 셋에 대한 다양한 정보를 출력할 수 있다. 출력되

는 내용은 다음과 같은 그룹으로 관련정보를 정리해서 보여준다.

– 카탈로그 항목의 속성

– 생성, 변경, 만료 시간 정보

– 보안(Protection)관련 정보

– 데이터 셋 접근 통계 정보

– 저장공간 할당 정보

– 데이터 셋의 구조에 관한 정보

참고

IDCAMS(혹은 JSCVSUT) 유틸리티에 대한 자세한 내용은 OpenFrame 안내서 중 "유틸리티 참조 안

내서"를 참고한다.

1.6. 데이터 셋 처리OpenFrame 환경에서 모든 프로그램은 다음의 순서대로 데이터 셋을 처리한다.

1. 데이터 셋을 할당해서 프로그램과 데이터 셋을 연결한다. (Allocate)

2. DDNAME을 사용해서 데이터 셋을 식별하고 데이터 셋을 연다. (Open)

3. 액세스 메소드를 사용해서 데이터를 읽거나 기록한다. (Read/Write)

4. 사용한 데이터 셋을 닫는다. (Close)

5. 할당된 데이터 셋을 해제한다. (Unallocate)

1.6.1. Allocation/Unallocation

사용자가 기존에 있는 데이터 셋에 접근하려고 할 때, 시스템은 물리적인 저장장치의 주소를 찾기 위해

JCL에서 사용자가 제공한 데이터 셋에 대한 정보와 카탈로그에 등록된 데이터 셋에 대한 정보를 활용한

다.

마찬가지로 사용자가 새로운 데이터 셋을 생성할 때, 시스템은 사용자가 제공한 데이터 셋에 대한 정보로

디스크에 데이터 셋의 저장공간을 확보한다.

8 OpenFrame 데이터 셋 안내서

Page 23: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

이처럼 기존에 존재하는 데이터 셋에 대한 저장장치의 주소를 찾는 작업 또는 새로운 데이터 셋에 대한 저

장공간을 확보하는 작업을 할당(Allocate)이라고 한다.

시스템은 데이터 셋을 처리하기 위해 데이터 셋을 할당할 때, DCB(Data Control Block)라고 불리는 구조

체를 준비한다. 이 DCB 구조체는 하나의 데이터 셋을 처리하기 위해 필요한 정보와 실시간으로 I/O 리포

트를 하기 위한 버퍼로 이루어져 있다.

데이터 셋이 처리되기 전에 반드시 할당되어야 하듯이 데이터 셋이 처리된 이후에는 할당이 해제(Unallocate)

되어야 한다.

JCL에서 기술되는 데이터 셋 후처리(disposition)는 시스템이 데이터 셋을 할당 해제할 때 어떻게 처리해

야 하는지를 지정해 준다. 예를 들어 임시 데이터 셋에 대한 처리는 작업이 끝날 때까지 데이터 셋을 유지

해야 하는지, 아니면 바로 삭제되어야 하는지를 결정하고, 영구 데이터 셋에 대한 처리는 마스터 카탈로그

에 등록되어야 하는지 또는 사용자 카탈로그에 등록되어야 하는지에 대해 결정한다.

1.6.2. Open/Close

애플리케이션은 특정 데이터 셋에 접근하기 전에 반드시 OPEN 인터페이스를 사용해서 데이터 셋을 열어

야 한다. OPEN 인터페이스는 DCB를 통해 애플리케이션과 액세스 메소드 (Access Method) 그리고 데이

터 셋 사이를 논리적으로 연결시켜 준다.

OPEN 인터페이스는 데이터 셋 I/O를 수행하기 위한 DCB 구조체를 최종 완성하고, 데이터 셋 처리에 필

요한 내부 버퍼를 준비한다.

DCB 구조체는 다음의 3가지 정보로부터 완성된다.

● 카탈로그 정보

● JCL DD 문장

● 애플리케이션

데이터 셋이 닫힐 때 시스템은 다음과 같은 작업을 한다.

● 물리적으로 기록되지 않는 데이터를 디스크에 기록한다.

● 애플리케이션과 데이터 셋 사이의 연결을 끊는다.

1.6.3. Open Mode

데이터 셋을 열 때에는 Open Mode를 지정해야 한다. Open Mode는 애플리케이션이 데이터 셋을 읽고 있

는지, 데이터 셋에 기록을 하고 있는지, 아니면 데이터 셋을 읽고 쓰기를 모두하고 있는지를 설정하기 위

한 모드이다.

제1장 데이터 셋 소개 9

Page 24: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

데이터 셋은 다음의 4가지 Open Mode 중 하나의 모드로 지정된다.

● 입력 모드

입력 모드를 지정하면 데이터 셋을 읽기만 할 수 있다. 레코드를 기록하거나 수정 또는 삭제하여 데이터

셋을 변경하려고 시도하면 에러가 발생한다.

● 출력 모드

출력 모드를 지정하면 애플리케이션이 레코드를 기록할 수 있는 새로운 데이터 셋을 생성한다. 데이터

셋에서 레코드를 읽으려고 시도하면 에러가 발생하고, 이미 존재하는 데이터 셋을 기록하기 위해 출력

모드로 데이터 셋을 열면 기존의 모든 레코드는 삭제된다.

● 입출력 모드

입출력 모드를 지정하면 데이터 셋을 읽고 쓰기를 모두 할 수 있다.

● 확장 모드

확장 모드는 데이터 셋에 쓰기만을 할 수 있는 출력 모드와 비슷하지만, 이 모드는 이미 존재하는 데이

터 셋에 쓰기를 할 때 사용된다. 애플리케이션은 새로운 레코드를 파일의 끝 부분에 기록한다.

1.6.4. 액세스 모드

데이터 셋의 액세스 모드는 데이터 셋에 있는 레코드를 처리하는 순서를 의미하며, 데이터 셋 자체의 속성

이 아니라 애플리케이션에서 데이터 셋을 사용하려고 하는 방식을 나타낸다.

데이터 셋은 다음의 3가지 액세스 모드 중 하나의 모드로 지정된다.

● 순차 접근

순차 액세스 메소드는 레코드를 1번째 레코드부터 마지막 레코드까지 순차적으로 읽거나 쓰는 방법을

의미한다.

순차적으로 구성된 데이터 셋은 순차적으로만 접근할 수 있다. ESDS, RRDS 또는 KSDS 데이터 셋은

모두 레코드에 대한 순서가 존재하기 때문에 순차적으로 접근할 수 있다. RRDS의 경우에 순서는 레코

드 번호(RRN)에 의해서 정해지고, KSDS의 경우에 순서는 영문자(Alphanumeric) 키를 통해서 정해진

다.

● 임의 접근

임의 액세스 메소드는 원하는 순서대로 레코드를 처리하는 것을 의미한다.

RRDS나 KSDS 모두 임의 액세스 메소드를 지원한다. 이러한 유형의 데이터 셋에서는 레코드를 읽거나

쓰기 전에 애플리케이션에서 미리 키 값을 지정해야 한다.

● 동적 접근

10 OpenFrame 데이터 셋 안내서

Page 25: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

동적 액세스 메소드는 애플리케이션을 실행하는 동안 데이터 셋에서 순차 액세스 메소드와 임의 액세

스 메소드 모두를 사용할 수 있다는 것을 의미한다. RRDS나 KSDS 모두 동적 액세스 메소드를 지원한

다.

1.6.5. 레코드 접근

데이터 셋이 열린 후에는 액세스 메소드에서 제공하는 다양한 인터페이스를 통해서 데이터 셋에 있는 레

코드를 처리할 수 있다.

예를 들면 READ 인터페이스를 통해서 데이터 셋에 있는 레코드를 읽을 수 있고, WRITE 인터페이스를 통

해서 데이터 셋에 새로운 레코드를 추가할 수 있다.

● WRITE(레코드 추가)

순차 데이터 셋의 모든 레코드는 데이터 셋의 마지막에 추가된다.

VSAM ESDS에는 새로운 레코드를 중간에 추가할 수 없으며, VSAM KSDS나 RRDS의 경우에는 레코

드 키를 통해 추가되는 위치를 지정해 줄 경우 레코드를 중간에 추가할 수 있다. 해당하는 레코드 키에

이미 레코드가 있는 경우에는 DUPLICATE RECORD 에러코드가 반환된다.

● READ(레코드 읽기)

애플리케이션이 데이터 셋에 처음으로 순차 접근을 시도하면 액세스 메소드에 따라 항상 1번째 레코드

부터 읽기 시작한다.

만약 이전에 데이터 셋에 임의 접근을 한 경우라면 내부 레코드 포인터가 변경되어있을 수 있으므로 항

상 START 인터페이스를 사용해서 레코드 포인터를 초기화한 다음 순차 접근 인터페이스를 사용한다.

VSAM KSDS나 RRDS는 레코드 키를 통해 임의 액세스 메소드를 지원한다. 임의 액세스 메소드는 내

부 레코드 포인터에 영향을 받지 않는다. 읽고자 하는 레코드를 찾기 위해서는 다음 중에서 하나를 제공

해 주어야 한다.

– 레코드의 정확한 키 정보 (Equal)

– 레코드의 키 필드보다 작거나 같은 근사한 키 정보 (Greater than or Equal)

– 레코드 키의 일부분 (Generic)

● REWRITE(레코드 수정)

액세스 메소드에서 제공하는 REWRITE 인터페이스를 사용하면 레코드의 내용을 수정할 수 있다. 단,

VSAM KSDS 데이터 셋의 레코드를 수정할 때에는 기본(primary) 키의 내용은 수정할 수 없다.

● DELETE(레코드 삭제)

제1장 데이터 셋 소개 11

Page 26: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

액세스 메소드의 DELETE 인터페이스를 사용하면 데이터 셋의 레코드를 삭제할 수 있다. VSAM RRDS

데이터 셋에서 레코드를 삭제하면, 삭제된 레코드가 사용하던 공간을 재사용할 수 있다. 단, VSAM ESDS

데이터 셋에서는 레코드를 삭제할 수 없다.

12 OpenFrame 데이터 셋 안내서

Page 27: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

제2장 Non-VSAM 데이터 셋

Non-VSAM 데이터 셋이란 IBM Mainframe에서 VSAM 데이터 셋이 나오기 이전에 사용되던 모든 데이터

셋을 Non-VSAM 데이터 셋이라고 한다. 따라서 VSAM 데이터 셋이 아닌 데이터 셋은 모두 Non-VSAM 데

이터 셋이다.

OpenFrame에서 Non-VSAM 데이터 셋은 UNIX의 파일 시스템으로 대응되고, 각각의 데이터 셋 유형에

따른 액세스 메소드(Access Method)는 별도의 OpenFrame 인터페이스로 제공된다.

2.1. 레코드 포맷OpenFrame에서는 다음과 같은 4가지 형태의 레코드 포맷을 지원한다.

● 고정 길이 (RECFM=F)

● 가변 길이 (RECFM=V)

● 라인 순차 (RECFM=L)

● 불확정 (RECFM=U)

라인 순차 레코드 포맷과 불확정 레코드 포맷을 제외한 나머지 레코드 포맷은 RECFM 파라미터에 ‘B’를

추가함으로써 블록 I/O를 할 수 있다. 데이터 블록은 디스크 볼륨에 데이터가 기록되기 전 여러 개의 레코

드를 묶어서 하나의 블록으로 구성한 것을 의미한다.

OpenFrame에서는 RECFM 파라미터에 'B'가 별도로 지정되어 있지 않아도, 실제 디스크에 I/O을 수행할

때에는 내부 버퍼를 이용한 버퍼링을 수행한다.

고정 길이 레코드 포맷

한 데이터 셋에 있는 모든 레코드의 크기는 동일하고 블록 I/O(RECFM=FB)를 지원한다. 블록 I/O가 아닌

경우에 하나의 레코드는 하나의 블록으로 간주된다.

각각의 레코드는 한 블록 안에서 별도의 레코드 분리자(record separator)없이 연속적으로 저장된다. 순차

적으로 레코드를 읽는 경우 한 블록 안에서 한 번에 레코드의 크기 만큼씩 읽어낸다.

선택 제어 문자(Optional Control Character)는 각 레코드를 프린터로 출력할 때 캐리지를 제어하는 문자

이다. 그리고 선택 테이블 참고 문자(Optional Table Reference Character)는 레코드를 출력할 때 폰트를

선택하기 위해 사용되는 코드이다.

제2장 Non-VSAM 데이터 셋 13

Page 28: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

[그림 2.1] 고정 길이 레코드

가변 길이 레코드 포맷

가변 길이 데이터 셋에 포함되어 있는 각각의 레코드는 서로 길이가 다를 수 있다. 가변 길이 레코드 포맷

의 경우 블록 I/O(RECFM=VB)와, Spanned 포맷(RECFM=VS)을 같이 사용할 수 있다.

Spanned 포맷은 논리 레코드의 길이가 지정된 블록 크기보다 큰 경우에 세그먼트 단위로 잘라서 디스크

에 저장하는 포맷이다.

OpenFrame에서 Spanned 포맷이 지정되어 있는 경우 논리 레코드의 길이가 블록 크기보다 큰 경우에도

읽기/쓰기 동작이 문제없이 지원된다. 이것은 논리 레코드를 세그먼트 단위로 잘라서 저장하기 때문이 아

니라, Mainframe과는 다른 방식으로 블록 I/O를 구현했기 때문이다.

[그림 2.2] 가변 길이 레코드

14 OpenFrame 데이터 셋 안내서

Page 29: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

가변 길이 블록은 BDW(Block Descriptor Word)와 하나 이상의 논리 레코드로 구성되어 있다. BDW는 해

당 블록을 부가적으로 설명하는 4 Byte 크기의 필드이다. OpenFrame에서 BDW는 사용되지 않는다.

가변 길이 레코드는 RDW(Record Descriptor Word)와 데이터로 구성되어 있다. RDW는 해당 레코드를 부

가적으로 설명하는 4 Byte 크기의 필드이다. RDW의 1번째 2 Byte는 RDW를 포함한 논리 레코드의 길이

를 저장하고 3번째와 4번째 Byte는 모두 0으로 설정되어있다.

라인 순차 레코드 포맷

라인 순차 레코드 포맷은 UNIX의 텍스트 파일과 동일한 형태의 레코드 포맷을 의미한다. 블록 단위의 I/O

는 지원하지 않고 한 데이터 셋 안의 각각의 레코드는 라인피드 문자로 구분된다.

OpenFrame/Batch 작업에서 사용되는 인스트림 데이터 셋이나 SPOOL 출력 데이터 셋은 라인 순차 레코

드 포맷을 사용한다.

불확정 레코드 포맷

불확정 레코드 포맷은 특별히 정해진 포맷없이 I/O를 하기 위한 레코드 포맷이다. 불확정 레코드 포맷에서

하나의 블록은 하나의 레코드로 간주된다.

선택 제어 문자

JCL의 DD 문장이나 DCB 파라미터에는 데이터 셋 레코드의 일부로서 선택 제어 문자가 포함되어 있는지

여부를 표시할 수 있다. 각각의 레코드 앞에 있는 1 Byte의 출력 제어 문자는 데이터 셋이 출력될 때에 캐

리지 컨트롤을 담당한다. 이 1Byte의 문자는 데이터 셋에 저장된 레코드의 일부이지만 출력될 때에는 나

타나지 않는다.

이 제어 문자의 유무를 결정하는 것은 데이터 컨트롤 블록(DCB)의 RECFM 필드에 ‘M’ 또는 ‘A’라는 문자

로 표기된다. ‘M’은 Machine 코드를 의미하고 ‘A’는 ANSI 코드를 의미한다.

2.2. DCB 구조체OpenFrame에서는 애플리케이션이 데이터 셋을 열기 전에 처리하려고 하는 모든 데이터 셋에 대해 미리

데이터 컨트롤 블록(DCB)이 준비되어야 한다. 데이터 컨트롤 블록은 데이터 셋에 대한 적절한 처리 정보

가 담겨있는 구조체로서 JCL의 DD문이나 카탈로그에서 정보를 추출하여 구성된다.

일반적인 JCL Batch JOB을 실행하면 애플리케이션에서 필요로 하는 모든 데이터 셋에 대한 컨트롤 블록

은 JCL의 DD 문장으로부터 시스템 내부적으로 생성되어 애플리케이션에 전달된다. 하지만 동적 할당을

사용하는 IDCAMS(혹은 JSCVSUT) 유틸리티와 같은 몇몇 유틸리티 프로그램의 경우에는 유틸리티 프로

그램에서 직접 데이터 컨트롤 블록을 생성할 수도 있다.

제2장 Non-VSAM 데이터 셋 15

Page 30: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

다음은 데이터 컨트롤 블록에 지정되는 데이터 셋 정보의 일부이다.

설명항목

입력과 출력을 하기 위한 데이터 블록의 최대크기를 지정한다. 특별히 지정

되지 않으면 디바이스의 종류에 따라 32 KB나 64 KB가 기본적인 블록 사이

즈로 사용된다.

Block Size (BLKSIZE)

OpenFrame에서는 Block Size 파라미터를 형식적으로 지원하지만, 실제 디

스크에 I/O를 수행할 때에는 ds.conf 파일에 등록되어 있는 버퍼 사이즈만큼

버퍼링을 한다.

데이터 셋의 구조를 지정한다.Data Set Organization

(DSORG)다음과 같은 유형의 데이터 셋 구조를 지정할 수 있다.

- PS (Physical Sequential)

- IS (Indexed Sequential)

- PO (Partitioned)

- DA (Direct)

RECFM은 다음과 같은 레코드의 특징을 나타낸다.Record Format (RECFM)

- 고정 길이(F)

- 가변 길이(V)

- 라인 순차(L)

- 불확정(U)

블록 단위의 I/O를 지원하면 RECFM은 FB, VB와 같이 사용되고, Spanned

레코드를 지원하면 RECFM은 VS, VBS와 같이 사용된다.

LRECL은 데이터 셋 레코드의 길이를 지정한다. 만약 가변 길이 레코드 포맷

또는 불확정 레코드 포맷인 경우에는 최대 레코드 길이가 지정되어야 한다.

Record Length (LRECL)

2.3. 순차 데이터 셋순차 데이터 셋은 OpenFrame 시스템에서 가장 일반적인 데이터 셋으로서 레코드가 저장된 순서대로 데

이터 처리가 가능한 데이터 셋을 의미한다. 순차 데이터 셋은 하드 디스크 볼륨이나 테이프 디바이스 볼륨

에 저장될 수 있다.

16 OpenFrame 데이터 셋 안내서

Page 31: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

순차 데이터 셋의 생성

QSAM 또는 BSAM 액세스 메소드를 사용하면, 다음과 같은 절차를 거쳐 순차 데이터 셋을 생성할 수 있

다.

1. DCB 파라미터에 DSORG=PS라고 지정한다.

2. DD 문장에 데이터 셋의 속성에 대해 기술한다.

3. 데이터 셋을 열고 PUT 또는 WRITE API를 실행한 후 닫는다.

순차 데이터 셋의 검색

순차 데이터 셋에서 레코드를 읽기 위해서는 다음과 같은 절차를 따라 한다.

1. DCB 파라미터에 DSORG=PS라고 지정한다.

2. DD 문장에 데이터 셋의 위치를 지정한다.

3. 데이터 셋을 열고 GET 또는 READ API를 사용한 후 닫는다.

순차적으로 연결된 데이터 셋

OpenFrame 시스템에서는 2개 이상의 데이터 셋을 붙여서 마치 하나의 데이터 셋처럼 연속적으로 검색할

수 있는 방법을 제공한다. 이것을 순차 연결(Sequential Concatenation)이라고 말한다.

순차 연결된 데이터 셋은 거꾸로 읽을 수 없으며, VSAM 데이터 셋은 순차 연결을 지원하지 않는다.

아래의 예에서는 BSAM을 이용해 여러 개의 데이터 셋을 순차 연결해서 사용하는 예를 보여준다.

//INPUT DD *

... (instream data set)

// DD DSN=IGKANG.MAIN.DATA,DISP=SHR

// DD DSN=IGKANG.SUPL.DATA,UNIT=3390,DISP=OLD,

BLKSIZE=4096

순차 데이터 셋의 변경

순차 데이터 셋을 변경하는 방법은 다음과 같이 2가지가 있다.

● 기존 레코드의 내용 변경 (Update in place)

제2장 Non-VSAM 데이터 셋 17

Page 32: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

기존에 있는 레코드의 내용을 변경하려면 먼저 레코드의 내용을 읽고 처리한 다음 변경된 레코드의 내

용을 원래 위치에 써야 한다.

이 때 다음과 같은 규칙이 동일하게 적용된다.

– 기존의 레코드를 삭제할 수 없다.

– 새로운 레코드를 추가할 수 없다.

– 데이터 셋은 하드 디스크 볼륨에 있어야 한다.

● 데이터 셋의 끝 부분에 새로운 레코드 추가 (Extends the data set)

데이터 셋의 끝 부분에 새로운 레코드를 추가하기 위해서는 DD 문장에 DISP=MOD를 지정해 주어야

하고, 데이터 셋을 열 때 OUTPUT 모드로 열어야 한다. 그리고 나서 PUT이나 WRITE API를 사용할 수

있다.

2.4. 분할 데이터 셋분할 데이터 셋(PDS)은 여러 개의 순차 구조를 가지는 멤버들과 각각의 멤버를 기술하는 디렉터리 항목

으로 구성되며 하드 디스크 볼륨에만 저장된다.

각각의 멤버는 최대 8개의 문자로 이루어진 유일한 이름을 가지고 있으며, 멤버의 각 레코드는 순차적으

로 읽기/쓰기가 가능하다.

[그림 2.3] 분할 데이터 셋 구조

분할 데이터 셋의 주요 장점은 전체 데이터 셋을 검색하지 않고도 개별 멤버에 대한 접근이 가능하다는 점

이다. 예를 들면 프로그램 라이브러리의 경우, PDS 각각의 멤버는 개별적으로 실행 가능한 프로그램이나

서브루틴이다. 필요에 따라서 각각의 멤버는 추가되거나 삭제가 가능하다.

18 OpenFrame 데이터 셋 안내서

Page 33: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

OpenFrame에서는 분할 데이터 셋을 UNIX 파일 시스템의 디렉터리로 Mapping하고, 멤버는 해당 디렉터

리 안에 존재하는 개별 파일로서 관리한다.

분할 데이터 셋의 생성

BSAM, QSAM, 또는 BPAM 액세스 메소드를 이용해서 분할 데이터 셋이나 PDS의 멤버를 생성할 수 있다.

다음은 데이터 셋을 생성하고 멤버를 추가하는 방법을 나타낸 예이다.

1. DCB 파라미터에 DSORG=PS라고 지정한다.

2. DD 문장에서 데이터가 새로운 PDS의 멤버로 저장될 것이라고 지정해 준다. 즉,

DSNAME=name(membername) 그리고 DISP=NEW라고 지정한다.

3. 데이터 셋을 열고 PUT이나 WRITE API를 실행한 후 닫는다.

다음은 분할 데이터 셋을 생성하는 JCL 예제이다.

//PDSDD DD ---,DSNAME=MASTFILE(MEMBERK),SPACE=(TRK,(100,5,7)),

// DISP=(NEW,CATLG),DCB=(DSORG=PS,RECFM=FB,LRECL=80),---

앞에서 DSORG=PS 대신 DSORG=PO를 지정하고, PUT API나 WRITE API 대신 STOW API를 사용하면

BPAM 액세스 메소드를 사용해서 PDS를 생성할 수 있다.

기존에 존재하는 PDS에 새로운 멤버를 추가하기 위해서는 앞에서와 동일한 단계를 실행하되, Disposition

을 변경으로 지정해야 한다. (DISP=MOD)

한 번에 여러 개의 멤버를 추가하고 싶은 경우에는 다음의 단계를 따라 한다.

1. DCB 파라미터에 DSORG=PO라고 지정한다.

2. DD 문장에서 PDS 전체 데이터 셋에 대한 위치를 지정한다.

3. 데이터 셋을 열고 STOW API를 사용해서 새로운 멤버를 추가한다.

PDS의 멤버 처리

PDS의 멤버는 일반 순차 데이터 셋과 동일하기 때문에 순차 데이터 셋을 처리하는 방법과 동일하게 PDS

의 멤버에 대한 I/O를 수행할 수 있다. 하지만 디렉터리 항목에 대한 관리나 멤버에 대한 검색 등의 작업을

수행하기 위해 OpenFrame에서는 다음과 같은 별도의 API를 제공한다.

BLDL API를 사용하면 PDS의 디렉터리 항목에 대한 정보를 모두 조사해서 메모리에 읽어 온다. FIND API

를 사용하면 레코드 포인터를 지정된 멤버의 위치로 이동시켜 준다. 반면에 STOW API는 새로운 멤버를

추가하거나, 기존의 멤버를 삭제하거나, 멤버의 이름을 변경할 수 있게 해준다.

제2장 Non-VSAM 데이터 셋 19

Page 34: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

위의 API를 사용하기 위해서는 DCB 파라미터에 DSORG=PO를 지정해 주어야 한다.

다음은 BPAM 액세스 메소드의 각 API에 대한 설명이다.

● BLDL – 디렉터리 리스트 구성

BLDL API를 사용하면 디렉터리 항목에 대한 정보를 메모리에 읽어 온다. BLDL API는 이후의 FIND API

에 영향을 준다.

● FIND – 멤버의 시작주소 위치

특정한 멤버의 맨 앞으로 레코드 포인터를 이동시키기 위해서는 FIND API를 사용한다. 이후의 I/O 작업

은 FIND에 의해 지정된 위치부터 수행된다.

● STOW – 디렉터리 업데이트

하나 이상의 멤버를 PDS에 추가하고 싶으면 STOW API를 사용해서 멤버에 해당하는 디렉터리 항목을

직접 PDS 디렉터리에 추가할 수 있다. STOW API를 사용하려면 DCB 파라미터에 반드시 DSORG=PO

를 지정해 주어야 한다.

PDS의 멤버 검색

PDS에서 특정한 멤버를 검색하고 싶은 경우, 다음과 같이 BSAM이나 QSAM을 이용해서 작업을 수행할

수 있다.

1. DCB 파라미터에 DSORG=PS라고 지정한다.

2. DD 문장에서 기존에 있는 PDS의 멤버에 대해 기술한다. 즉, DSNAME=name(membername) 그리고

DISP=OLD, DISP=SHR, 또는 DISP=MOD라고 지정한다.

3. 데이터 셋을 열고 GET이나 READ API를 사용한 후 닫는다.

다음은 PDS의 멤버에 대해 처리하는 JCL 예제이다.

//PDSDD DD ---,DSN=MASTFILE(MEMBERK),

// DISP=SHR,DCB=(DSORG=PS),---

2.5. 세대 데이터 그룹OpenFrame에서는 서로 관련이 있는 연속적인 데이터 셋을 카탈로깅하는 방법을 제공한다. 이것을 세대

데이터 그룹(GDG: Generation Data Group)이라고 말한다. GDG 안에 포함되어 있는 각각의 데이터 셋은

세대 데이터 셋(GDS: Generation Data Set) 또는 세대라고 말한다.

세대 데이터 셋은 순차 데이터 셋으로만 구성될 수 있으며 분할 데이터 셋이나 VSAM 데이터 셋은 세대

데이터 셋이 될 수 없다.

20 OpenFrame 데이터 셋 안내서

Page 35: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

서로 관련이 있는 데이터 셋을 세대 데이터 그룹으로 묶음으로서 다음과 같은 장점을 얻을 수 있다.

● 같은 그룹에 있는 데이터 셋은 같은 이름으로 참고될 수 있다.

● 시스템은 데이터 셋의 세대를 순서대로 관리할 수 있다.

● 오래된 세대의 데이터 셋은 자동으로 시스템에서 삭제된다.

세대 데이터 셋은 자신의 연령을 의미하는 절대 이름과 상대 이름을 가지고 있다. 카탈로그 관리 시스템은

절대 세대 이름만을 사용한다. 연령이 많은 데이터 셋은 작은 절대 숫자를 가지고 있다. 상대 이름의 경우,

가장 최신의 데이터 셋은 (0), 그 다음 최신 데이터 셋은 (-1) 등과 같이 숫자로 표시된다. 상대 이름은 새로

운 세대(+1)을 카탈로깅하기 위해서도 사용될 수 있다.

세대 데이터 그룹(GDG) BASE는 세대 데이터 셋이 카탈로깅되기 전에 카탈로그에 등록되어야 한다. 각

세대 데이터 그룹은 카탈로깅되어 있는 GDG BASE 항목에 의해 대표된다. gdgcreate 툴 프로그램을 사

용하면 GDG BASE를 카탈로그에 등록할 수 있다.

참고

gdgcreate 프로그램에 대한 자세한 내용은 OpenFrame 안내서 중 "툴 참조 안내서"를 참고한다.

2.5.1. 절대 세대번호

절대 세대번호와 버전번호는 GDG의 특정한 세대를 표현하기 위해 사용된다. 절대 세대번호와 버전번호

는 GxxxxVyy와 같은 형태를 가지고 있다. 여기에서 xxxx는 네 자리 세대번호(0001부터 9999까지)이고 yy

는 2자리 버전번호(00부터 99까지)를 의미한다.

절대 세대번호와 버전번호에 대한 예를 들면 아래와 같다.

예) A.B.C.G0001V00

A.B.C라는 세대 데이터 그룹에서 세대 번호 1, 버전 번호 0번의 데이터 셋을 의미한다.

예) A.B.C.G0009V01

A.B.C라는 세대 데이터 그룹에서 세대 번호 9, 버전 번호 1번의 데이터 셋을 의미한다.

시스템은 세대번호를 자동으로 관리해준다. 유지되는 세대의 최대 개수는 GDG BASE에 정의된 한도

(Limit)에 따라 결정된다. 예를 들어 한도가 10인 GDG인 경우에는 최대 10개의 항목이 GDG에 의해 관리

된다.

버전번호는 GDG에 의한 세대 관리를 방해하지 않으면서 일반적인 데이터 셋 처리작업을 할 수 있도록 해

준다. 예를 들어 3개의 세대가 관리되는 GDG에서 2번째 세대를 업데이트하고 싶은 경우, G0002번 세대

V00번 버전을 G0002번 세대 V01번 버전으로 바꿀 수 있다. 한 세대에는 오직 한 버전만 GDG에 의해 관

리된다.

제2장 Non-VSAM 데이터 셋 21

Page 36: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

세대 데이터 셋을 카탈로그에 등록하는 경우에는 절대 이름과 상대 이름을 둘 다 사용할 수 있다. 세대가

등록된 경우에는 그 세대의 세대 번호와 버전 번호가 GDG 엔트리에 등록된다. 버전 번호가 V00 이외의

세대 데이터 셋을 등록하려면 절대 세대와 버전 번호를 사용해야 한다.

2.5.2. 상대 세대번호

세대를 지정할 때 절대 세대와 버전번호를 사용해서 지정하는 방법 대신 상대적인 세대번호를 사용할 수

있다. 상대 세대번호를 사용하려면 GDG 이름 뒤에 괄호로 둘러쌓인 숫자를 지정해 주면 된다. 예를 들면

A.B.C(-1), A.B.C(+1), A.B.C(0)과 같다.

상대 세대번호가 주어지면 시스템은 가장 최근에 등록된 절대 세대번호를 참고해서 주어진 상대 세대번

호에 해당하는 절대 세대번호를 찾는다. 예를 들어, 이전 작업에서 A.B.C.G0005V00이 마지막으로 카탈

로깅된 세대 데이터 셋이라면, A.B.C(+1)이 주어진 경우 시스템은 A.B.C.G0006V00의 절대 번호를 할당

할 것이다.

2.5.3. 다중 Step 작업에서의 유의사항

다중 Step 작업에서 데이터 셋을 카탈로깅 하거나 언카탈로깅 할 때에는 IEHPROGM이나 다른 사용자 프

로그램을 사용하지 않고, 순전히 JCL만을 이용해야 한다. IEHPROGM 프로그램이나 사용자 프로그램 실

행 중에 할당된 데이터 셋은 데이터 셋 할당 관리시스템에게 보고가 되지 않아, 이후의 작업 스텝에서 데

이터 셋의 현재 상태를 잃어버리게 되어서 충돌이 생기는 등 문제가 발생할 수 있다.

이전에 카탈로깅된 세대 데이터 셋의 상대번호를 이용해서 참고하게 되면 상대번호는 다음과 같은 의미

를 가진다.

● A.B.C(0)은 가장 최근에 등록된 항목을 가리킨다

● A.B.C(-1)은 가장 최근에 등록된 항목의 이전 항목이다.

JCL을 사용해서 데이터 셋의 카탈로깅 작업이 일어나면, 모든 실제 카탈로깅은 JOB STEP이 종료될 때

수행된다. 하지만 상대 세대 번호는 실제 작업이 종료될 때까지 유지된다. 따라서 다음과 같은 현상이 일

어날 수 있다.

● JCL에서 사용되는 상대 세대 번호는 Batch JOB 수행 중에는 항상 동일한 세대 데이터 셋을 가리킨다.

● 세대 데이터 셋에 대해 성공적으로 GDG에 카탈로깅이 끝난 스텝을 재실행 시킬 경우에, JCL을 submit

하기 전에 상대 세대번호를 모두 변경해야 한다. 예를 들어, Step을 재시작하기 전, A.B.C(+1)은 A.B.C(0)

으로, A.B.C(0)은 A.B.C(-1)로, 그리고 A.B.C(-1)은 A.B.C(-2)로 바꾸어 주어야 한다.

22 OpenFrame 데이터 셋 안내서

Page 37: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

제3장 VSAM 데이터 셋

1970년대 IBM은 3가지 데이터 셋 구조(Sequential, Indexed, Direct-Access)를 통합한 새로운 액세스 메

소드와 관련 유틸리티 프로그램을 개발한다. 이 새로운 액세스 메소드는 그 당시 가상 스토리지 운영체제

(Virtual Storage Operating System)인 OS/VS1 그리고 OS/VS2와 연관되어 VSAM(Virtual Storage Access

Method)이라고 불린다.

VSAM은 데이터가 저장되고 검색되는데 사용되는 기술인 액세스 메소드 중의 하나이다. VSAM은 GET/PUT

인터페이스를 사용해서 디스크 디바이스와 애플리케이션 사이에 데이터를 전송해 준다. 모든 VSAM 데이

터 셋은 카탈로그에 등록되어야 하며, 테이프 디바이스 볼륨에는 저장될 수 없다.

OpenFrame에서는 VSAM에 대응되는 제품으로 TSAM을 지원한다. Tibero TSAM은 내부적으로 사용되

는 스토리지 기술에 따라 2가지 버전이 제공된다.

● TSR-Oracle

TSAM의 하부 스토리지 기술로 Oracle 데이터베이스 서버를 사용한다.

TSR-Oracle은 스토리지 서버와 통신을 하기 위해 Oracle에서 제공한 인터페이스인 OCI(Oracle Call

Interface) 라이브러리를 사용한다. 하지만, TSAM의 레코드 I/O 인터페이스는 표준 SQL 문으로 변환되

어 실행되기 때문에 대량 배치작업의 경우 성능 문제가 발생할 수 있다.

● TSAM-Tibero

TSAM의 하부 스토리지 기술로 Tibero 데이터베이스를 사용한다.

TSAM 클라이언트와 스토리지 서버 사이에는 별도로 작성된 TSAM 통신 프로토콜을 사용하기 때문에

SQL 오버헤드가 없다. 또한 대량 배치작업의 경우 최적의 통신 프로토콜을 통해 성능 문제를 제거할 수

있다.

3.1. VSAM 데이터 포맷모든 VSAM 데이터 셋에 저장되는 데이터 구조는 논리 레코드라는 단위로 정렬된다. 논리 레코드는 VSAM

인터페이스를 통해 사용자에게 전달되는 사용자 레코드이다.

VSAM 데이터 셋에서 논리 레코드가 저장되는 방식은 Non-VSAM 데이터 셋과 다르다. VSAM은 레코드

를 Control Interval에 저장한다. Control Interval은 VSAM이 데이터 레코드와 레코드 제어 정보를 저장하

는 디스크 디바이스의 연속적인 영역이다. VSAM 레코드를 읽을 때에는 해당 레코드가 포함되어 있는 전

체 Control Interval을 메모리에 있는 VSAM I/O 버퍼에 읽어 들인다.

제3장 VSAM 데이터 셋 23

Page 38: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

[그림 3.1] Control Interval

Control Interval

각각의 VSAM 데이터 셋의 Control Interval 크기는 서로 다르지만 한 데이터 셋에 있는 모든 Control Interval

의 크기는 같다. 액세스 메소드 서비스의 DEFINE 명령어를 사용해서 VSAM 데이터 셋의 Control Interval

의 크기를 지정할 수 있다.

Control Interval은 다음과 같이 구성되어 있다.

● 논리 레코드(Logical Records)

● 여유 공간(Free Space)

● 제어 정보(Control Information)

제어 정보는 하나의 CIDF(Control Interval Definition Field)와 하나 또는 그 이상의 RDFs(Record Definition

Fields)로 구성된다. CIDF는 4 Byte로 여유 공간의 크기와 위치가 기록된다. RDFs는 3 Byte로 각 레코드

의 크기 정보가 저장된다.

다음은 Control Interval에서 사용하는 주요 용어에 대한 설명이다.

설명용어

VSAM 데이터 셋의 연속적인 Control Interval을 여러 개 묶어서 Control Area라

고 부른다. 실제 VSAM 데이터 셋은 하나 또는 그 이상의 Control Area로 구성된

Control Area

다. 한 Control Area 안에 있는 Control Interval의 개수는 VSAM에 의해 결정된

다.

여유공간이 없는 Control Interval에 레코드를 추가해야 하는 경우 해당 Control

Interval에는 split이 일어난다. 해당 CI에 저장되어 있던 레코드의 절반 정도가 다

른 CI로 옮겨지고 새로운 레코드는 원래 CI에 추가된다.

Splits

Control Interval의 크기보다 큰 레코드를 Spanned 레코드라 일컬으며, 이러한

Spanned 레코드는 VSAM 데이터 셋을 정의할 때 SPANNED라는 파라미터를

사용하여 한 레코드가 여러 Control Interval에 걸쳐서 저장되도록 한다.

Spanned Records

24 OpenFrame 데이터 셋 안내서

Page 39: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명용어

데이터 레코드의 크기가 빈번하게 변동되는 데이터 셋이나 평균 레코드의 크기

가 Control Interval 크기에 비해 큰 데이터 셋에서 Spanned 레코드를 사용하면

디스크 스페이스의 낭비를 줄일 수 있다.

VSAM 데이터 셋을 구성하는 개별 파트를 컴포넌트라고 한다. 컴포넌트에는 데

이터 컴포넌트와 인덱스 컴포넌트가 있다.

Component

KSDS와 VRDS는 데이터 컴포넌트와 인덱스 컴포넌트를 가지고 있고, ESDS와

RRDS는 데이터 컴포넌트만을 가지고 있다.

모든 VSAM 데이터 셋은 클러스터로 정의된다. 클러스터는 최대 2개로 이루어

진 관련된 컴포넌트의 집합이다. KSDS의 경우에 하나의 클러스터는 하나의 데

이터 컴포넌트와 하나의 인덱스 컴포넌트로 이루어진다.

Cluster

RRDS와 ESDS 데이터 셋은 인덱스 컴포넌트가 없는 클러스터로 간주되고, 일

관성을 유지하기 위해서 데이터 셋을 처리하는 데에 클러스터 이름이 사용된다.

OpenFrame에서는 TSAM의 하부 스토리지 기술로 관계 데이터베이스를 사용하기 때문에 앞에서와 같은

Control Interval이나 Control Area 등의 기술이 사용되지는 않는다.

아래 표에서는 Tibero TSAM에서 VSAM 데이터 셋을 지원하기 위해 사용되는 데이터베이스 요소를 보여

준다.

설명Tibero TSAMMainframe VSAM

볼륨별 테이블 스페이스 Mapping테이블 스페이스스토리지 볼륨

클러스터 당 하나의 테이블테이블클러스터

한 레코드는 한 ROW로 MappingROW레코드

3.2. VSAM 데이터 셋 유형VSAM은 인덱스나 레코드 번호 혹은 상대 주소 순서에 따라 데이터 레코드를 저장하고 처리한다. 또한 고

정길이 레코드와 가변길이 레코드에 대한 순차처리와 직접처리도 할 수 있다.

VSAM은 다음의 4가지 방식으로 데이터 셋을 구성한다.

설명방식

키 순서 데이터 셋이다.KSDS(Key Sequenced Data Set)

입력 순서 데이터 셋이다.ESDS(Entry Sequenced Data Set)

레코드 번호별 데이터 셋이다RRDS(Relative Record Data Set)

RRDS는 레코드의 길이에 따라 다음의 2가지로 나뉜다.

제3장 VSAM 데이터 셋 25

Page 40: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명방식

- RRDS(Fixed-length Relative Record Data Set): 고정길이 RRDS

- VRDS(Variable-length Relative Record Data Set): 가변길이 RRDS

리니어 데이터 셋이다.LDS(Linear Data Set)

참고

1. Tibero/TSAM에서는 LDS는 지원하지 않는다.

2. Hitachi Mainframe에서는 LDS 유형을 FDS(Flat Data Set) 유형으로 구분한다.

3.2.1. KSDS

KSDS의 레코드들은 레코드의 키 순서에 따라서 데이터 셋에 저장된다.

KSDS의 키는 레코드의 특정 필드를 말하며 다음과 같은 특성을 갖는다.

● 모든 레코드의 키 길이와 키 위치는 동일하다.

● 같은 키 값을 갖는 2개 이상의 레코드를 저장할 수 없다.

● 키 값이 저장된 이후에는 레코드의 키 값을 변경할 수 없다.

KSDS는 고정 길이의 레코드나 가변 길이의 레코드 모두를 지원한다. 새로운 레코드를 추가하는 경우, 레

코드는 키 값의 오름차순 순서에 맞는 위치에 삽입된다.

KSDS를 효율적으로 관리하기 위해서 VSAM은 데이터 셋에 대해 데이터 자체를 저장하는 데이터 컴포넌

트와 키 값의 순서로 레코드를 빠르게 접근하는 역할을 하는 인덱스 컴포넌트를 생성한다.

3.2.2. ESDS

ESDS는 레코드가 들어온 순서대로 저장된다는 점에서 Non-VSAM 데이터 셋과 비슷한 점이 많다. 새로

추가되는 모든 레코드는 데이터 셋의 맨 끝에 저장된다.

ESDS에 일단 저장된 레코드는 삭제가 불가능하다. 삭제하려면 삭제하고자 하는 레코드의 내용 일부에

삭제 표시를 남기는 방법으로 해당 레코드를 애플리케이션에서 논리적으로 삭제 처리할 수 있다.

또한 ESDS에서 레코드의 갱신은 가능하지만, 레코드의 길이는 변경될 수 없다. 레코드의 길이를 반드시

변경해야 하는 경우라면 앞에서 설명한 것처럼 애플리케이션 수준에서의 레코드 삭제를 표시하고 새로운

길이의 레코드를 데이터 셋의 맨 뒤에 추가하는 방법을 사용해야 한다. 하지만 이와 같은 처리가 빈번할

것으로 예상되는 애플리케이션에서 사용되는 데이터 셋이라면 처음부터 KSDS의 사용을 검토한다.

ESDS는 인덱스 컴포넌트를 포함하고 있지는 않지만, 보조 인덱스를 사용하는 것은 허용된다.

26 OpenFrame 데이터 셋 안내서

Page 41: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

참고

보조 인덱스에 대해서는 “3.3. 보조 인덱스와 스피어”를 참고한다.

3.2.3. RRDS

고정 길이 레코드를 위한 RRDS는 레코드들을 미리 구획 지어진 슬롯에 저장한다. 각 슬롯마다 번호가 부

여되고, 레코드는 레코드에 주어진 번호에 해당하는 슬롯에 저장된다.

RRDS의 데이터 블록 하나에는 여러 개의 고정 길이 슬롯이 만들어진다.

데이터 블록의 크기를 지정할 때에는 (레코드의 고정 길이 x 한 블록에 저장할 레코드의 개수 + 블록 관리

에 사용되는 오버헤드 크기)만큼을 지정해 주는 것이 좋다. 그렇지 않으면 RRDS 데이터 셋 내부에 사용

될 수 없는 공간이 생긴다. 하지만 이 공간의 크기는 1개의 고정 길이 레코드보다 크지는 않기 때문에 큰

문제가 발생하지는 않는다.

RRDS는 고정 길이로 레코드를 저장하기 때문에 레코드의 번호만 알면 간단한 계산만으로 해당 레코드가

존재하는 위치를 알 수 있기 때문에 데이터 레코드로의 접근이 효율적이다. 하지만 저장되는 레코드의 길

이가 고정되어 있다는 점과 레코드 번호를 가지고 데이터 레코드를 구분한다는 개념이 애플리케이션의

도메인에 적합하지 않은 경우가 많기 때문에 주로 한정된 수의 개체를 관리하는 특별한 경우에만 한하여

사용된다.

3.2.4. VRDS

VRDS는 가변 길이 레코드를 저장할 수 있는 RRDS이다. 사용자 관점에서 VRDS을 사용하는 방식은 RRDS

을 사용하는 방식과 동일하다. 즉 사용 가능한 액세스 메소드와 레코드를 지정하기 위해서 제공해야 하는

인자가 동일하다. 하지만 VSAM 내부적인 입장에서는 VRDS 데이터 셋을 처리하는 데에는 오히려 KSDS

과 유사하게 인덱스 컴포넌트와 데이터 컴포넌트를 이용해서 레코드를 관리한다.

인덱스 컴포넌트가 필요한 이유는 각 레코드의 길이가 고정되어 있지 않기 때문에 레코드 번호만을 가지

고 간단하게 원하는 레코드가 저장된 위치를 알아내는 것이 불가능하기 때문이다. 반면, KSDS의 관리와

다른 점은 KSDS에 대해서는 인덱스 컴포넌트의 키로 레코드의 일부인 키 영역을 사용하지만, VRDS에서

는 레코드와는 별도로 사용자가 제공하는 레코드 번호를 인덱스 컴포넌트의 키로 사용한다. 인덱스 레코

드의 인덱스 정보는 KSDS와 동일한 레코드 시작위치 주소(RBA)를 사용한다.

제3장 VSAM 데이터 셋 27

Page 42: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

3.3. 보조 인덱스와 스피어

3.3.1. 보조 인덱스

액세스 메소드 서비스를 사용하면 KSDS나 ESDS(베이스 클러스터)에 보조 인덱스(AIX: Alternate Index)

를 정의할 수 있다. 보조 인덱스는 베이스 클러스터 레코드에 기본 키 이외의 키 필드로 접근할 수 있는 방

법을 제공한다.

[그림 3.2] 보조 인덱스

보조 인덱스를 사용하면 서로 다른 애플리케이션을 위해 동일한 정보를 담고 있는 데이터 셋을 여러 개 복

사해서 관리해야 하는 번거로움을 없애준다.

베이스 클러스터 레코드의 어느 부분이라도 보조 인덱스의 키가 될 수 있다. 심지어 베이스 레코드의 동일

한 부분을 보조 키로 사용하는 여러 개의 보조 인덱스를 만드는 것도 가능하다.

보조 키는 베이스 클러스터 자체의 기본 키와는 달리 한 데이터 셋 안의 레코드들 사이에서 유일할 필요는

없다. 즉, 하나의 보조 키에 대해서 여러 개의 레코드가 대응될 수 있다.

보조 인덱스는 사실 인덱스 컴포넌트와 데이터 컴포넌트로 구성된 독립적인 KSDS이다. 보조 인덱스의

레코드에는 보조 키와 베이스 클러스터의 데이터를 가리키는 포인터 정보를 담고 있다.

보조 인덱스 접근경로

보조 인덱스를 사용해서 KSDS나 ESDS를 처리하기 전에 먼저 접근경로(Path)가 정의되어야 한다. 접근

경로는 보조 인덱스를 이용해서 베이스 클러스터를 처리할 때 사용되는 카탈로그 항목이다.

접근경로는 IDCAMS(혹은 JSCVSUT) 유틸리티의 DEFINE PATH 명령을 이용해서 정의할 수 있다. 각 보

조 인덱스에 대해 적어도 1개 이상의 접근경로가 정의되어야 보조 인덱스를 통해 베이스 클러스터를 처리

할 수 있다. 접근경로는 개념적으로 베이스 클러스터와 보조 인덱스의 쌍으로 볼 수 있다.

28 OpenFrame 데이터 셋 안내서

Page 43: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

애플리케이션이 처리를 위해 경로를 사용하게 되면 베이스 클러스터와 보조 인덱스 데이터 셋이 함께 열

린다. 베이스 클러스터와 이와 연관된 모든 보조 인덱스의 집합을 스피어라고 부른다.

3.3.2. 스피어

베이스 클러스터와 이 베이스 클러스터에 대한 보조 인덱스들의 집합을 스피어(Sphere)라고 한다. 베이스

클러스터에 대한 보조 인덱스는 자체적으로 하나의 보조 키와 다수 개의 기본 키를 갖는 레코드로 구성된

KSDS 클러스터이다.

스피어 개념을 도입하게 되면, 베이스가 되는 데이터 셋에 대한 추가적인 액세스 메소드가 추가된다. 순차

액세스 메소드나 직접 액세스 메소드와 같은 구분이 아닌 베이스 데이터 셋의 기본 키가 아닌 다른 키에

의한 액세스 메소드가 생긴다. 이것을 데이터에 대한 여러 개의 접근경로가 존재한다고 말한다.

실례로 COBOL 애플리케이션의 ALTERNATE KEY 구문에 의한 데이터 셋의 사용을 대표적인 예로 볼 수

있다. VSAM 액세스 메소드는 KSDS나 ESDS에 대해 여러 개의 보조 키를 사용한 순차 및 직접 접근방법

을 제공한다. 이와 같은 액세스 메소드를 접근경로를 이용한 액세스 메소드라고 부른다.

3.4. VSAM 데이터 셋 관리VSAM 데이터 셋은 액세스 메소드 서비스의 명령어를 사용해서 정의될 수 있다.

다음은 VSAM 데이터 셋을 관리하는 방법에 대한 설명이다.

1. 모든 VSAM 데이터 셋은 카탈로그에 등록되어야 한다. 만약 새로운 카탈로그를 사용하고 싶다면 액세

스 메소드 서비스의 DEFINE USERCATALOG 명령어를 사용해서 새로운 카탈로그를 생성한다.

2. VSAM 데이터 셋은 액세스 메소드 서비스의 DEFINE CLUSTER 명령어를 사용하면 카탈로그에 정의

할 수 있다. OpenFrame에서는 JCL을 사용해서 VSAM 데이터 셋을 생성하는 방법을 지원하지 않는다.

3. 액세스 메소드 서비스의 REPRO 명령어를 사용하거나, 별도의 사용자 프로그램을 작성해서 VSAM 데

이터 셋에 데이터를 적재한다.

4. 선택적으로 보조 인덱스를 베이스 클러스터에 연결해서 사용하길 원하면 액세스 메소드 서비스의 DEFINE

ALTERNATEINDEX, DEFINE PATH 그리고 BLDINDEX 명령어를 사용한다.

앞의 모든 Step에서 VSAM 데이터 셋에 대한 작업결과를 확인하기 위해서는 액세스 메소드 서비스의

LISTCAT이나 PRINT 명령어를 사용한다. LISTCAT이나 PRINT 명령어는 VSAM 데이터 셋과 관련된 문

제를 발견하고 수정하는 데에 유용하게 사용된다.

클러스터 개념

KSDS인 경우 클러스터는 데이터 컴포넌트와 인덱스 컴포넌트의 조합이다. 클러스터는 인덱스와 데이터

컴포넌트를 마치 하나의 컴포넌트인 것처럼 다룰 수 있도록 해준다. 고정길이 RRDS나 ESDS의 경우에는

제3장 VSAM 데이터 셋 29

Page 44: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

인덱스 컴포넌트없이 데이터 컴포넌트 만으로 클러스터로 간주되나, 다른 데이터 셋과의 통일성을 기하

기 위해 데이터 셋을 처리하기 위해 클러스터 이름이 주어지게 된다.

VSAM 데이터 셋 정의

액세스 메소드 서비스의 DEFINE CLUSTER 명령어를 이용해서 VSAM 데이터 셋을 정의할 수 있다. 클러

스터가 정의될 때, 클러스터를 기술하기 위해 다음의 카탈로그 항목들이 등록된다.

● 클러스터를 하나의 컴포넌트인 것처럼 사용하기 위한 클러스터 항목

● 클러스터의 데이터 컴포넌트를 기술하기 위한 데이터 항목

● KSDS인 경우, 클러스터의 인덱스 컴포넌트를 기술하기 위한 인덱스 항목

클러스터의 모든 속성이 카탈로그에 기록된다. 카탈로그에는 데이터 셋을 관리하거나 레코드 I/O를 하기

위한 모든 정보를 담아서 제공한다.

액세스 메소드 서비스를 이용해서 VSAM 데이터 셋을 정의할 때, 다음과 같은 파라미터를 지정할 수 있다.

설명파라미터

VSAM 데이터 셋의 유형을 지정한다.INDEXED|NOINDEXED|NUMBERED

- Key-Sequenced

- Entry-Sequenced

- Relative Record

평균 또는 최대 데이터 레코드의 길이를 지정한다. 고정

길이 데이터 셋인 경우 평균 레코드 길이와 최대 레코드

길이를 같게 지정한다.

RECORDSIZE

KSDS에서 레코드 내 키의 위치와 길이를 지정한다.KEYS

클러스터가 정의될 카탈로그 이름을 지정한다.CATALOG

클러스터를 위한 공간이 할당될 볼륨 시리얼을 지정한다.VOLUMES

클러스터를 위한 디스크 공간의 크기를 지정한다.RECORDS|KILOBYTES|MEGABYTES|

TRACKS|CYLINDERS

VSAM이 사용할 컨트롤 인터벌의 크기를 지정한다.CONTROLINTERVALSIZE

레코드가 컨트롤 인터벌에 걸쳐서 저장될 수 있는지 여부

를 결정한다.

SPANNED

30 OpenFrame 데이터 셋 안내서

Page 45: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

VSAM 데이터 셋 적재

VSAM 데이터 셋이 정의되면, 소스 데이터 셋으로부터 정의된 VSAM 데이터 셋에 레코드를 적재할 수 있

다. 적재되는 VSAM 데이터 셋의 유형에 따라 소스 데이터 셋은 특정한 순서대로 정렬되어 있어야 한다.

● ESDS 데이터 셋에 적재되는 데이터 레코드

특별히 정해진 순서가 없다. 레코드의 특정 필드에 의해서가 아니라 레코드가 추가된 순서대로 정렬된

다.

● KSDS 데이터 셋에 적재되는 데이터 레코드

입력 데이터 셋에 중복되는 키 없이 오름차순으로 정렬되어 있어야 한다.

● RRDS 데이터 셋에 적재되는 데이터 레코드

오름차순으로 정렬되어 있어야 한다. 만약 순차적으로 적재되는 경우에는 VSAM이 순서대로 상대 레코

드 번호를 부여한다.

데이터 셋 적재 방법에는 다음의 2가지가 있다.

● REPRO를 이용한 데이터 셋 적재

액세스 메소드 서비스의 REPRO 명령을 사용하면 순차 데이터 셋이나 VSAM 데이터 셋으로부터 레코

드를 추출해서 모든 VSAM 데이터 셋에 적재할 수 있다.

● 프로그램을 작성해서 데이터 셋 적재

프로그램을 작성해서 KSDS 데이터 셋에 적재하기 위해서는 우선 데이터 레코드를 키 순서대로 정렬한

후, 순차적으로 저장한다.

데이터 셋 복사

여러 가지 이유로 데이터 셋을 복사하거나 2개의 데이터 셋을 하나로 합칠 필요가 있다. 예를 들면, 테스

트용 복사 데이터 셋을 만들 경우, 다른 목적으로 2개의 복사본을 만들 경우가 있다. 혹은 데이터 셋을 갱

신하기 전에 백업용으로 복사를 해둘 필요도 있다. 이런 경우에 액세스 메소드 서비스의 REPRO 명령을

사용해서 데이터 셋을 복사할 수 있다.

다음과 같은 경우에 REPRO를 이용하여 데이터 셋을 복사할 수 있다.

● VSAM 데이터 셋을 복사해서 새로운 VSAM 데이터 셋을 만들 경우

● 순차 데이터 셋을 복사해서 새로운 순차 데이터 셋을 만들 경우

● 순차 데이터 셋을 복사해서 VSAM 데이터 셋으로 변환하는 경우

제3장 VSAM 데이터 셋 31

Page 46: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● VSAM 데이터 셋을 복사해서 순차 데이터 셋으로 변환하는 경우

● VSAM 데이터 셋을 복사해서 자동으로 REORGANIZE하는 경우

● PDS나 PDSE(Partitioned DataSet Extended)의 개별 멤버를 복사하는 경우

KSDS 데이터 셋으로 복사하는 경우 입력 데이터 셋의 데이터 레코드는 중복되는 키 없이 오름차순으로

정렬되어 있어야 한다.

VSAM 데이터 셋이 키 순서대로 복사되는 경우, 다음과 같은 재구성(reorganization)이 자동으로 수행된

다.

● 논리 레코드의 물리적인 위치 정렬

● 데이터 셋 내부적인 여유공간의 분배

● VSAM 인덱스 컴포넌트의 재구성

보조 인덱스 정의

보조 인덱스는 연관된 베이스 레코드의 보조키 순서대로 인덱스 항목을 저장하고 있는 또 하나의 KSDS

데이터 셋이다. 보조 인덱스는 클러스터의 데이터 컴포넌트에 있는 레코드를 찾아가는 또다른 방법을 제

공한다.

보조 인덱스는 KSDS 클러스터나 ESDS 클러스터에 대해 정의될 수 있다. 보조 인덱스를 구성하는 절차

는 아래와 같다.

1. DEFINE CLUSTER 명령어를 사용해서 베이스 클러스터를 정의한다.

2. REPRO 명령을 사용하거나 프로그램을 작성해서 베이스 클러스터를 적재한다.

3. DEFINE ALTERNATEINDEX 명령을 사용해서 보조 인덱스를 정의한다.

4. DEFINE PATH 명령을 이용해 보조 인덱스를 베이스 클러스터에 연결한다.

5. BLDINDEX 명령을 이용해 보조 인덱스를 구성한다.

VSAM은 보조 인덱스를 기술하기 위해 다음 3개의 카탈로그 항목을 이용한다.

● 보조 인덱스를 KSDS 데이터 셋으로 기술하기 위한 보조 인덱스 항목

● 보조 인덱스의 데이터 컴포넌트를 기술하기 위한 데이터 항목

32 OpenFrame 데이터 셋 안내서

Page 47: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 보조 인덱스의 인덱스 컴포넌트를 기술하기 위한 인덱스 항목

유일하지 않는 키를 갖는 보조 인덱스의 레코드 크기:

유일하지 않는 키를 갖는 보조 인덱스를 정의할 때에는 레코드 크기를 최대한 크게 지정하여 모든 유일하

지 않는 키를 처리할 수 있도록 해야 한다. 같은 보조 키를 갖는 모든 레코드들의 기본 키 값들은 하나의

보조 인덱스 레코드에 저장된다.

보조 인덱스의 관리

VSAM은 보조 인덱스가 항상 베이스 클러스터와 동기화되어 있다고 생각한다. 그래서 매번 데이터 셋을

열 때마다 동기화되어 있는지 여부를 체크하지 않는다.

보조 인덱스를 정의할 때 UPGRADE 속성을 지정한 경우, 보조 인덱스와 연결된 베이스 클러스터가 변경

될 때, 보조 인덱스도 같이 변경해 준다. 이 경우 베이스 클러스터가 출력 모드로 열릴 때, 자동으로 베이

스 클러스터에 연관된 모든 보조 인덱스도 같이 열린다.

접근경로 정의

보조 인덱스가 정의된 후, DEFINE PATH 명령을 이용해서 베이스 클러스터와 보조 인덱스와의 관계를 만

들어야 한다. 접근경로는 베이스 클러스터와 보조 인덱스의 쌍을 지칭한다. 접근경로를 통해서 데이터 셋

에 접근하는 경우 JCL의 DSNAME 파라미터에 접근경로명을 적는다.

사용자 프로그램에서 접근경로로 데이터를 처리하는 경우, 보조 인덱스와 베이스 클러스터가 동시에 열

린다. 베이스 클러스터의 데이터는 보조 인덱스의 키를 통해서 읽히거나 쓰여진다.

카탈로그 항목 리스트

VSAM 데이터 셋이 정의되고 난 후, 액세스 메소드 서비스의 LISTCAT 명령어를 사용하면 카탈로그에 등

록된 항목의 일부 혹은 전부를 조회할 수 있다.

LISTCAT 명령어는 카탈로그에 등록된 다음과 같은 정보를 보여준다.

● SMS 속성을 포함한 모든 객체의 속성

● 생성일자와 만료일자

● 데이터 셋의 구조

● 데이터 셋 사용에 대한 통계

제3장 VSAM 데이터 셋 33

Page 48: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 공간 할당 정보 및 볼륨 정보

데이터 셋 출력

데이터 셋을 사용하는 중에 문제가 발생한 경우, 액세스 메소드 서비스의 PRINT 명령어를 사용하면 VSAM

데이터 셋의 일부 혹은 전체 레코드를 출력해 볼 수 있다.

출력은 논리 레코드의 데이터 내용만이 출력되며, 시스템이 관리하는 제어 필드는 출력되지 않는다. 출력

되는 각각의 레코드는 다음 중 하나의 방법으로 구분된다.

● ESDS 데이터 셋인 경우 상대 Byte 주소(RBA)

● KSDS 데이터 셋인 경우 키 값(KEY)

● RRDS 데이터 셋인 경우 레코드 번호(RRN)

데이터 셋 삭제

액세스 메소드 서비스의 DELETE 명령어를 사용하면 데이터 셋 또는 카탈로그를 삭제할 수 있다. DELETE

명령어는 데이터 셋이 있던 볼륨에서 데이터 셋을 제거하고 카탈로그에서 데이터 셋 항목을 삭제한다.

34 OpenFrame 데이터 셋 안내서

Page 49: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

제4장 통합 카탈로그

OpenFrame에서는 데이터 셋에 대한 메타 정보를 관리하기 위해 통합 카탈로그 모듈과 관련 툴 프로그램

을 제공한다. 카탈로그는 OpenFrame에서 데이터 셋에 대한 중앙 정보 창구의 역할을 담당한다.

VSAM 데이터 셋을 사용하려면 해당 데이터 셋이 반드시 카탈로그에 등록되어야 한다. Non-VSAM 데이

터 셋은 카탈로그에 등록되지 않고도 사용될 수 있다. 카탈로그에 등록되지 않은 Non-VSAM 데이터 셋을

사용하려면, JCL에 해당 데이터 셋에 대한 모든 정보를 기술해 주어야 한다.

4.1. 카탈로그 소개카탈로그는 다른 데이터 셋에 대한 메타 정보를 담고 있는 데이터 셋이다. 카탈로그는 데이터 셋의 구체적

인 저장 위치를 모르더라도 이름만으로 데이터 셋을 사용할 수 있게 해 준다.

데이터 셋을 카탈로깅함으로써 사용자들은 시스템 스토리지 설정 등에 대해 잘 모르더라도 데이터 셋을

사용하는데 문제가 되지 않게 해준다.

4.1.1. 카탈로그 구조

카탈로그는 BCS 데이터 셋과 VVDS 데이터 셋이라는 2가지 종류의 서로 다른 데이터 셋으로 구성된다.

BCS 데이터 셋은 카탈로그 그 자체로 생각될 수 있고, VVDS 데이터 셋은 VTOC의 확장으로 볼 수 있다.

설명종류

BCS 데이터 셋은 데이터 셋의 이름을 키로 가지는 VSAM KSDS 데

이터 셋이다. BCS 데이터 셋에는 데이터 셋에 대한 기본 속성, 볼륨

정보, 사용 권한, 다른 항목과의 관계 등의 정보를 담는다.

BCS (Basic Catalog Structure)

VVDS 데이터 셋은 시스템에서 사용하는 모든 볼륨에 대해 정의가

되어 있어야 한다. VVDS 데이터 셋에는 BCS에 등록된 데이터 셋의

볼륨과 관련된 정보들이 저장되는 VSAM ESDS 데이터 셋이다.

VVDS (VSAM Volume Data Set)

VTOC은 Mainframe의 모든 볼륨에 존재하는 시스템 데이터 셋이다.

VTOC은 해당 볼륨의 공간 할당 정보와 확장 정보를 관리한다. VTOC

VTOC (Volume Table of Contents)

은 새로운 데이터 셋에 대한 빈 공간을 찾거나 기존 데이터 셋에 대

한 디스크 위치를 알아내기 위해서 사용된다.

제4장 통합 카탈로그 35

Page 50: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

참고

OpenFrame에서 VTOC 데이터 셋은 카탈로깅 되지 않은 데이터 셋에 대한 기본 속성을 관리하기 위

해 사용된다. 카탈로그의 구조 및 저장되는 내용에 대한 더 자세한 정보는 “4.2. 카탈로그 구조”와

“4.1.5. 카탈로그에 저장되는 내용”을 참고한다.

4.1.2. 카탈로그 검색 순서

사용자가 카탈로그에 등록된 데이터 셋을 사용할 때 또는 카탈로그에 등록될 데이터 셋을 생성할 때, 적합

한 카탈로그를 찾기 위해서 여러 개의 카탈로그가 검색된다.

카탈로그 검색 순서는 카탈로그에 정의된 Alias나 카탈로그의 이름 그리고 Alias 검색 레벨에 따라서 결정

된다. Alias 검색 레벨은 데이터 셋 이름의 상위 Qualifier를 몇 개까지 조사해 볼 것인가를 결정하는 시스

템 설정이다.

대부분의 카탈로그 검색은 카탈로그 Alias에 기초한다. 모든 카탈로그에 적당한 Alias가 정의되어 있다면

데이터 셋 이름의 상위 Qualifier가 특정 카탈로그의 Alias와 같고, 사용자의 요청을 처리할 적당한 카탈로

그를 쉽게 찾을 수 있다.

하지만 앞의 경우와 달리 특별하게 카탈로그를 지정하는 방법이 있는데, JCL에서 JOBCAT이나 STEPCAT

을 사용한다거나, 액세스 메소드 서비스에서 CATALOG 파라미터를 사용하는 방법 등이 있다.

데이터 셋을 찾거나 정의할 때 사용되는 카탈로그의 검색 순서는 다음과 같다.

1. IDCAMS(혹은 JSCVSUT) 유틸리티의 CATALOG 파라미터로 지정된 카탈로그를 찾는다.

2. GDS 데이터 셋인 경우 GDG BASE가 정의된 카탈로그를 찾는다.

3. JCL에서 STEPCAT이나 JOBCAT으로 지정된 카탈로그를 찾는다.

4. 상위 Qualifier가 특정 카탈로그의 Alias인 경우 그 카탈로그를 찾는다.

5. 마지막으로 마스터 카탈로그를 찾는다.

4.1.3. 마스터 카탈로그

마스터 카탈로그는 구조적으로는 사용자 카탈로그와 다를 것이 없다. 마스터 카탈로그가 사용자 카탈로

그와 다른 점은 어떻게 사용되는가와 어떤 데이터 셋이 카탈로그 되는가이다. OpenFrame 시스템에는 한

순간에 하나의 마스터 카탈로그만이 사용될 수 있다.

마스터 카탈로그에는 시스템에 등록된 모든 사용자 카탈로그와 사용자 카탈로그를 가리키는 Alias 항목이

등록되어 있다. 그 외 시스템이 사용하는 시스템 데이터 셋이 등록된다.

마스터 카탈로그에 등록되는 항목은 다음과 같다.

36 OpenFrame 데이터 셋 안내서

Page 51: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명카탈로그 항목

시스템에 등록된 모든 사용자 카탈로그이다.사용자 카탈로그

시스템에 등록된 사용자 카탈로그를 가리키는 Alias 항목이다.Alias 항목

LINKLIB, PARMLIB 등의 시스템 라이브러리이다.시스템 라이브러리

JOBQ, OUTPUTQ, DSLOCK, VVDS 등의 시스템 데이터 셋이다.시스템 데이터 셋

마스터 카탈로그의 백업과 복구를 쉽게 하기 위해서 사용자 데이터 셋은 가급적이면 마스터 카탈로그에

등록하지 않는 것이 좋다.

마스터 카탈로그는 OpenFrame 시스템을 초기 설치할 때 OpenFrame 바이너리와 같이 제공되는 mascat

툴 프로그램으로 생성된다.

4.1.4. 카탈로그에 등록되는 항목

OpenFrame 통합 카탈로그에 등록되는 항목의 유형과 각 카탈로그 항목에 대한 설명은 다음과 같다.

설명카탈로그 항목

Non-VSAM 데이터 셋에 대한 카탈로그 항목이다. 카탈로그에 등록된 Non-VSAM

데이터 셋은 데이터 셋의 이름만으로 데이터 셋의 속성 값을 모두 카탈로그에서

Non-VSAM Data Set

찾을 수 있다. VVDS 데이터 셋에는 해당 Non-VSAM 데이터 셋이 할당 받은 볼

륨에 대한 정보가 저장된다.

세대 데이터 그룹에 대한 카탈로그 항목이다. GDG LIMIT 등의 GDG 속성 정보

와 해당 세대 데이터 그룹과 관련된 GDS 데이터 셋 이름들이 관리된다.

GDG

세대 데이터 셋에 대한 카탈로그 항목이다. 기본적으로 저장되는 데이터의 내용

은 Non-VSAM 데이터 셋 항목과 동일하다. 연관 항목으로 세대 데이터 그룹 이

GDS

름이 저장된다. VVDS 데이터 셋에는 해당 Non-VSAM 데이터 셋이 할당받은 볼

륨에 대한 정보가 저장된다.

VSAM 클러스터 카탈로그 항목이다. VSAM 데이터 컴포넌트와 인덱스 컴포넌

트를 하나의 이름으로 관리하기 위해서 카탈로그에 등록된다. 연관 항목으로 데

이터 컴포넌트와 인덱스 컴포넌트의 이름이 저장된다.

VSAM Cluster

VSAM 데이터 컴포넌트 카탈로그 항목이다. VSAM 데이터 셋의 실질적인 레코

드 데이터가 저장되는 오브젝트에 대한 항목으로 VVDS 데이터 셋에는 해당

VSAM 데이터 컴포넌트가 공간을 할당 받을 때의 볼륨에 대한 정보가 저장된다.

Data Component

VSAM 인덱스 컴포넌트 카탈로그 항목이다. VSAM 데이터 셋의 기본 키를 빨리

검색하기 위한 바이너리 트리 오브젝트에 대한 항목으로 VVDS 데이터 셋에는

Index Component

해당 VSAM 인덱스 컴포넌트가 공간을 할당 받을 때의 볼륨에 대한 정보가 저장

된다.

보조 인덱스 카탈로그 항목이다. 기본적으로 카탈로그에서 관리되는 정보의 내

용은 VSAM 클러스터와 동일하고 항목의 유형만 다르다. 연관 항목으로는 데이

Alternate Index

제4장 통합 카탈로그 37

Page 52: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명카탈로그 항목

터 컴포넌트의 이름, 인덱스 컴포넌트의 이름, 그리고 베이스 클러스터의 이름이

저장된다.

보조 인덱스 경로 카탈로그 항목이다. 보조 인덱스를 통한 베이스 클러스터로의

접근 경로를 정의하며, 연관 항목으로는 보조 인덱스 이름 그리고 베이스 클러스

터 이름이 저장된다.

Path Entry

사용자 카탈로그에 대한 카탈로그 항목이다. 사용자 카탈로그도 마스터 카탈로

그에 카탈로깅이 되어야 하며, 저장되는 정보는 기본적으로 VSAM 클러스터와

유사하다.

User Catalog

카탈로그 Alias에 대한 카탈로그 항목이다. 사용자 카탈로그에는 여러 개의 Alias

항목이 등록될 수 있고, 등록된 Alias를 사용해서 카탈로그 검색순서가 조정된다.

Alias Entry

4.1.5. 카탈로그에 저장되는 내용

OpenFrame 통합 카탈로그에서 관리하는 정보의 종류는 다음과 같이 정보 그룹 별로 분류된다. 다음의 정

보 그룹 중, Allocation Group과 Statistics Group 정보는 VVDS 데이터 셋에 저장되고, 그 외 나머지 정보

는 모두 BCS 데이터 셋에 저장된다.

설명정보 그룹

항목 이름, 항목 유형, 생성 일자, 만료 일자, Owner ID가 저장된다.History Group

스토리지 클래스, 매니지먼트 클래스 그리고 데이터 클래스가 저장된다.SMS Group

보안 설정과 패스워드가 저장된다. (현재 OpenFrame에서는 사용되지 않는다.)Protection Group

볼륨 시리얼과 디바이스 유형이 저장된다.Volumes Group

CI 크기, 평균 레코드 크기, 최대 레코드 크기, 키 위치, 키 길이, VSAM 유형,

VSAM 속성, AIX 속성과 공유옵션이 저장된다.

Attribute Group

GDG limit와 GDG 속성 그리고 최종 변경일자가 저장된다.GDG Group

DSORG, RECFM, 레코드 크기, 블록 사이즈 및 Non-VSAM 속성이 저장된다.Non-VSAM Group

최초 공간크기, 확장 공간크기, 최대 사용공간 및 확장 횟수, 최종 변경일자가 저

장된다.

Allocation Group

INSERT 횟수, RETRIEVE 횟수, UPDATE 횟수, DELETE 횟수 및 총 레코드 수

등이 저장된다.

Statistics Group

연관된 항목 수와 항목 이름 그리고 항목 유형 등이 저장된다.Association Group

4.2. 카탈로그 구조OpenFrame에서 카탈로그는 BCS 데이터 셋과 VVDS 데이터 셋, 2가지 종류의 데이터 셋으로 구성되어

있다. 볼륨에 대한 빈 공간을 확인하고 데이터 셋에 대한 디스크 위치를 알아내기 위한 VTOC는 UNIX의

파일 시스템으로 기능을 대체한다.

38 OpenFrame 데이터 셋 안내서

Page 53: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● BCS 데이터 셋

BCS 데이터 셋은 VSAM KSDS 데이터 셋으로 구성되어 있으며, 데이터 셋의 이름으로 데이터 셋의 정

보를 저장하고 획득한다. BCS 데이터 셋에 저장되는 정보는 데이터 셋에 대한 기본 속성, 볼륨 정보, 사

용 권한, 다른 항목과의 관계 등을 담고 있다.

일반적으로 마스터 카탈로그나 사용자 카탈로그라고 하면 해당 카탈로그에 대응되는 BCS 데이터 셋을

의미한다. 마스터 카탈로그는 OpenFrame을 초기 설치할 때 mascat 이라는 툴 프로그램으로 생성한다.

하지만 사용자 카탈로그는 액세스 메소드 서비스의 DEFINE USERCATALOG라는 명령으로 정의한다.

● VVDS 데이터 셋

VVDS 데이터 셋은 VSAM ESDS 데이터 셋으로 구성되어 있으며, VVDS 데이터 셋은 시스템에서 사용

하는 모든 볼륨마다 하나씩 만들어져야 한다. VVDS 데이터 셋에는 데이터 셋에 대한 통계정보와 볼륨

과 관련된 정보들이 저장된다.

VSAM 데이터 셋에 대한 VVDS 레코드는 VVR(VSAM Volume Record)이라고 불린다. 마찬가지로 Non-

VSAM 데이터 셋에 대한 VVDS 레코드는 NVR(Non-VSAM Volume Record)이라고 불린다. 또 BCS 데

이터 셋 자체도 사실은 VSAM 데이터 셋이기 때문에 VVDS 데이터 셋에 VVR 레코드를 가지게 된다.

VVDS 데이터 셋은 OpenFrame 초기 설치 시에 voladd 이라는 툴 프로그램으로 정의된다. 시스템에 등

록된 모든 볼륨마다 voladd 프로그램으로 VVDS 데이터 셋을 정의해야 한다.

[그림 4.1] 카탈로그 구조에서는 2개의 BCS 데이터 셋과 2개의 VVDS 데이터 셋과의 연결관계를 나타낸

다.

SYS1.MASTER.ICFCAT라는 BCS 데이터 셋은 2개의 서로 다른 볼륨에 있는 데이터 셋 항목을 가지고 있

고, USR1.MYCAT이라는 BCS 데이터 셋은 B 볼륨에 있는 2개의 데이터 셋 항목을 가지고 있다.

SYS1.MASTER.ICFCAT 데이터 셋은 A 볼륨에 위치해 있기 때문에 SYS1.VVDS.VA라는 VVDS 데이터

셋 안에 SYS1.MASTER.ICFCAT을 가리키는 항목이 존재한다. 마찬가지로 USR1.MYCAT 데이터 셋은 B

볼륨에 위치해 있기 때문에 SYS1.VVDS.VB라는 VVDS 데이터 셋 안에 USR1.MYCAT을 가리키는 항목

이 존재한다.

한 VVDS에는 해당 볼륨에 저장된 모든 데이터 셋에 대한 항목이 등록된다. 모든 VVDS 데이터 셋과 사용

자 카탈로그는 SYS1.MASTER.ICFCAT라는 마스터 카탈로그에 등록된다.

제4장 통합 카탈로그 39

Page 54: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

[그림 4.1] 카탈로그 구조

다음은 [그림 4.1] 카탈로그 구조에 있는 항목에 대한 설명이다.

설명항목

마스터 카탈로그이다.SYS1.MASTER.ICFCAT

사용자 카탈로그이다.USR1.MYCAT

볼륨 A의 VVDS 데이터 셋이다.SYS1.VVDS.VA

볼륨 B의 VVDS 데이터 셋이다.SYS1.VVDS.VB

4.3. 카탈로그 관리

사용자 카탈로그 정의

액세스 메소드 서비스의 DEFINE USERCATALOG 명령을 사용하면 새로운 사용자 카탈로그를 정의할

수 있다. DEFINE USERCATALOG 명령을 사용할 때에는 ICFCATALOG라는 파라미터를 명시해야 한다.

다음은 SYS1.ICFCAT.TEST라는 사용자 카탈로그를 SYS305라는 볼륨에 생성하는 예이다. (아래의 예에

서 IDCAMS 유틸리티는 JSCVSUT 유틸리티로 대체가 가능하다.)

//DEFCAT EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=A

//SYSIN DD *

DEFINE USERCATALOG -

( NAME(SYS1.ICFCAT.TEST) -

40 OpenFrame 데이터 셋 안내서

Page 55: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

MEGABYTES(15 15) -

VOLUME(SYS305) -

ICFCATALOG -

FREESPACE(10 10) -

STRNO(3) ) -

DATA( CISZ(4096) -

BUFND(4) ) -

INDEX( BUFNI(4) )

/*

카탈로그 Alias 정의

카탈로그를 사용하려면 시스템은 특정 데이터 셋을 어떤 카탈로그에 등록해야 하는지 결정해야 하며, 이

러한 결정을 가장 쉽게 할 수 있는 방법이 카탈로그에 Alias를 정의하는 것이다.

잘못 만들어진 Alias로 인해 사용자가 데이터 셋에 접근하지 못하는 경우도 있으므로, Alias를 정의할 때에

는 새로운 Alias가 기존의 데이터 셋에 어떠한 영향을 미치는지를 고려해야 한다.

액세스 메소드 서비스의 DEFINE USERCATALOG 명령을 사용해서 사용자 카탈로그를 정의하고 난 뒤,

DEFINE ALIAS 명령을 사용하면 카탈로그에 대한 Alias를 정의할 수 있다. 카탈로그 Alias는 사용자 카탈

로그와 마찬가지로 마스터 카탈로그에 정의되어야 한다.

다음은 SYS1.ICFCAT.TEST 이라는 사용자 카탈로그에 USER0001과 PROJECTA라는 2개의 Alias를 정

의하는 예이다. (아래의 예에서 IDCAMS 유틸리티는 JSCVSUT 유틸리티로 대체가 가능하다.)

//ALIAS EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=A

//SYSIN DD *

DEFINE ALIAS -

( NAME(USER0001) -

RELATE(SYS1.ICFCAT.TEST) )

DEFINE ALIAS -

( NAME(PROJECTA) -

RELATE(SYS1.ICFCAT.TEST) )

/*

VVDS 데이터 셋 정의

다음의 2가지 방법으로 VVDS 데이터 셋을 정의할 수 있다.

● voladd 전용 툴 프로그램을 사용해서 정의한다.

● IDCAMS(혹은 JSCVSUT) 유틸리티의 DEFINE CLUSTER 명령으로 정의한다.

제4장 통합 카탈로그 41

Page 56: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

VVDS 데이터 셋은 항상 SYS1.VVDS.Vvolser이라는 이름으로 정의된다. volser은 VVDS가 포함되어 있

는 볼륨 시리얼을 의미한다.

다음은 IDCAMS를 사용해서 볼륨 SER003에 VVDS 데이터 셋을 등록하는 예를 보여준다. (아래의 예에

서 IDCAMS 유틸리티는 JSCVSUT 유틸리티로 대체가 가능하다.)

//DEFINE EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=A

//SYSIN DD *

DEFINE CLUSTER -

( NAME(SYS1.VVDS.VSER003) -

TRACKS(10 10) -

VOLUMES(SER003) -

NONINDEXED )

/*

참고

OpenFrame에서는 voladd 툴 프로그램을 사용해서 VVDS 데이터 셋을 정의할 것을 권장한다.

카탈로그 항목 리스팅

액세스 메소드 서비스의 LISTCAT 명령을 사용하여 카탈로그 레코드 리스트를 출력하고 카탈로그 데이터

셋에 대한 정보를 점검할 수 있다.

시스템이 BCS 데이터 셋에 대한 통계정보를 업데이트 하지 않으므로 사용자 카탈로그에 대한 LISTCAT

I/O 통계정보는 정확하지 않다.

다음은 LISTCAT을 사용해서 특정 사용자 카탈로그에 연관된 모든 Alias를 알아보는 예를 보여준다. Alias

는 Associations Group 절에 표시된다. (아래의 예에서 IDCAMS 유틸리티는 JSCVSUT 유틸리티로 대체

가 가능하다.)

//LSTALIAS EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=A

//SYSIN DD *

LISTCAT ALL ENTRIES(SYS1.ICFCAT.TEST)

/*

사용자 카탈로그 삭제

액세스 메소드 서비스의 DELETE 명령을 사용하면 사용자 카탈로그나 카탈로그된 데이터 셋 그리고 그

밖의 모든 카탈로그 항목을 삭제할 수 있다.

42 OpenFrame 데이터 셋 안내서

Page 57: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

일반적으로 사용자 카탈로그를 삭제하려면 사용자 카탈로그에 등록된 항목이 없어야 하지만 굳이 원한다

면 옵션을 사용하여 카탈로그 항목이 포함되어 있는 사용자 카탈로그를 삭제할 수 있다.

BCS 데이터 셋이 비어있다면 DELETE USERCATALOG 명령으로 사용자 카탈로그를 삭제할 수 있다. 이

명령은 BCS 데이터 셋을 물리적으로 제거하고 마스터 카탈로그에 등록된 항목을 삭제한다.

BCS 데이터 셋이 비어있지 않다면 DELETE USERCATALOG 명령을 사용할 때 FORCE 옵션을 사용한

다. FORCE 옵션을 사용하면 BCS 데이터 셋과 연관된 Alias가 삭제되고 해당 BCS에 등록되어 있는 모든

데이터 셋과 카탈로그 항목이 삭제된다.

4.4. 관련 툴 프로그램관련 툴 프로그램에는 IDCAMS(혹은 JSCVSUT), mascat, voladd, icfdump, icfload 등이 있다.

● IDCAMS(혹은 JSCVSUT)

액세스 메소드 서비스를 사용하면 사용자 카탈로그를 정의하거나 카탈로그 항목을 쉽게 관리할 수 있

다.

다음은 액세스 메소드 서비스의 명령의 기능에 대한 설명이다.

기능명령어

이전에 등록된 카탈로그 항목에 대한 속성을 변경한다.ALTER

새로운 카탈로그 항목을 정의한다.DEFINE

새로운 사용자 카탈로그를 정의한다.DEFINE USERCATALOG

데이터 셋이나 사용자 카탈로그를 삭제한다.DELETE

카탈로그 항목을 조회한다.LISTCAT

데이터 셋이나 카탈로그의 레코드를 출력한다.PRINT

카탈로그의 내용을 선별해서 다른 카탈로그로 복사한다.REPRO

● mascat

OpenFrame 제품을 초기 설치할 때 마스터 카탈로그 데이터 셋을 처음 생성하는 마스터 카탈로그 정의

프로그램이다. 마스터 카탈로그의 생성 절차가 재귀적이므로 IDCAMS(혹은 JSCVSUT) 유틸리티가 아

닌 별도의 툴 프로그램으로 마스터 카탈로그를 생성한다.

● voladd

OpenFrame 제품을 초기 설치할 때 VVDS 데이터 셋을 생성하고 마스터 카탈로그에 등록하는 VVDS

데이터 셋 생성 프로그램이다. 그리고 OpenFrame 제품을 운용 중에 볼륨을 추가하려고 하는 경우에도

사용된다.

● icfdump

제4장 통합 카탈로그 43

Page 58: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

OpenFrame 제품을 운용하면서 관리되는 카탈로그 정보에 대한 백업파일을 생성하여 차후에 문제가

발생했을 경우 복구할 수 있도록 해주는 카탈로그 백업 프로그램이다.

● icfload

icfdump 프로그램으로 백업을 한 카탈로그 덤프 데이터를 사용해서 현재 카탈로그 시스템을 백업할 당

시의 시점으로 복구하는 카탈로그 복구 프로그램이다.

icfload 프로그램을 사용해서 카탈로그 시스템을 복구하는 과정 중에 카탈로그 데이터 셋을 초기화시키

는 과정이 포함되어 있어서 사용되지 않은 카탈로그 레코드가 정리되어 카탈로그 데이터 셋의 크기가

작아지는 효과가 있다.

참고

1. IDCAMS(혹은 JSCVSUT) 유틸리티에 대한 자세한 설명은 OpenFrame 안내서 중 "유틸리티 참조

안내서"를 참고한다.

2. mscat, voladd, icfdump, icfload 프로그램에 대한 자세한 설명은 "OpenFrame 툴 참조 안내서"를

참고한다.

44 OpenFrame 데이터 셋 안내서

Page 59: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

Appendix A. 설정 파일

데이터 셋과 관련된 설정 파일들의 종류와 이에 대한 간단한 설명은 다음과 같다.

설명설정 파일

OpenFrame 시스템에서 사용되는 I/O 디바이스 정보와 시스템 UNIT 정보를 저장하

는 설정 파일이다.

unit.conf

OpenFrame 시스템에 등록되어 있는 모든 볼륨에 대한 정보를 저장하는 설정 파일이

다.

volume.conf

스토리지 관리 시스템에서 사용하는 SMS 클래스들에 대한 정의를 저장하는 설정 파

일이다.

sms.conf

스토리지 관리 시스템에서 사용하는 SMS 클래스 선택 규칙에 대한 정보를 저장하는

설정 파일이다.

acs.conf

OpenFrame 시스템에서 사용하는 데이터 셋에 대한 일반적인 설정을 저장하는 설정

파일이다.

ds.conf

OpenFrame 시스템에서 사용하는 데이터 셋의 Key Sequence 설정을 저장하는 설정

파일이다.

keyseq.conf

A.1. unit.confunit.conf 파일에는 OpenFrame 시스템의 I/O 디바이스 정보와 시스템 UNIT 정보에 대한 설정을 저장한다.

이 설정 파일에 저장된 UNIT 정보는 JCL의 DD 문장의 UNIT 파라미터에서 직접 사용되거나, 다음 장에서

설명할 volume.conf 파일에서 사용된다.

사용법

unit.conf 파일은 [DEVICE] 절과 [ESOTERIC] 절로 구성된다.

● [DEVICE] 절

OpenFrame 시스템에서 사용되는 I/O 디바이스에 대한 설정을 저장한다.

JCL에서 DD 문장의 UNIT 파라미터에 디바이스 번호를 사용할 수 있다.

DeviceNumber=NumberOfDevices,DeviceType,SpaceLimit

Appendix A. 설정 파일 45

Page 60: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명항목

I/O 디바이스 번호이며, 16진수로 0000부터 FFFF까지 지정 가능하다.DeviceNumber

같은 속성을 갖는 디바이스의 개수를 지정한다.NumberOfDevices

이후 연속적인 I/O 디바이스 번호는 같은 속성을 갖는 디바이스로 간주된다.

3380/3390/3390A/3480 등의 디바이스 유형을 지정한다.DeviceType

최대 저장 공간을 MB 단위로 지정한다.SpaceLimit

0은 무제한을 의미한다. (OpenFrame 시스템에서 해당 디바이스에 생성된

데이터 셋의 크기가 무제한적으로 증가하는 것을 방지한다.)

● [ESOTERIC] 절

Esoteric 디바이스 그룹은 관리자가 설정한 그룹에 속한 I/O 디바이스의 집합을 의미한다.

JCL에서 DD 문장의 UNIT 파라미터에 Esoteric 그룹명을 직접 사용할 수 있다.

GroupName=DeviceNumber1,DeviceNumber2-DeviceNumber3,...

설명항목

정의하려고 하는 Esoteric 디바이스 그룹 이름을 지정한다.GroupName

[DEVICE] 절에 정의된 I/O 디바이스 번호를 지정한다.DeviceNumber

- 여러 개의 디바이스 번호: 콤마(,)로 분리해서 지정한다.

- 연속적인 디바이스 번호: 하이픈(-)으로 지정한다.

사용예제

다음은 unit.conf 파일의 예이다.

###########################################################################

# TMAX OPENFRAME UNIT CONFIGURATION #

# - unit.conf #

###########################################################################

[DEVICE]

0001=3,3380,2048

0004=1,3480,0

01C1=1,3390,2048

FFFF=1,0000,2048

46 OpenFrame 데이터 셋 안내서

Page 61: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

[ESOTERIC]

SYSDA=0001-0003,01C1

DISKA=01C1

TAPEA=0004

A.2. volume.confvolume.conf 파일에는 OpenFrame 시스템에 등록되어 있는 모든 볼륨 정보를 저장한다.

이 설정 파일에서 사용되는 디바이스 번호는 unit.conf 파일에 미리 정의되어 있어야 한다.

사용법

volume.conf 파일은 [VOLUME] 절로 구성된다.

현재 OpenFrame 시스템에 등록되어 있는 볼륨에 대한 정보를 기술한다.

각각의 볼륨 항목에서는 연결되어 있는 디바이스 번호, 볼륨에 대한 속성 그리고 해당 볼륨이 마운트된

UNIX 경로를 지정해 준다.

VolumeSerial=DeviceNumber,UseAttr,MountAttr,UnixPath

설명항목

시스템에 할당된 유니크한 볼륨 시리얼 번호를 1글자에서 6글자 사이의 알파

벳 또는 숫자로 지정한다.

VolumeSerial

unit.conf 파일에 등록된 디바이스 번호를 지정한다.DeviceNumber

사용 속성(PRIVATE/PUBLIC/STORAGE)을 지정한다.UseAttr

마운트 속성(PERMANENT/REMOVABLE)을 지정한다.MountAttr

해당 볼륨에 마운트된 UNIX 디렉터리 경로를 지정한다.UnixPath

참고

현재 OpenFrame 시스템에서는 UseAttr, MountAttr 속성을 사용하지 않는다.

사용예제

다음은 volume.conf 파일의 예이다.

###########################################################################

# TMAX OPENFRAME VOLUME CONFIGURATION #

# - volume.conf #

###########################################################################

Appendix A. 설정 파일 47

Page 62: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

[VOLUME]

DEFVOL=0001,PUBLIC,PERMANENT,${OPENFRAME_HOME}/volume_100000

200000=0002,PRIVATE,PERMANENT,${OPENFRAME_HOME}/volume_200000

300000=0003,PRIVATE,PERMANENT,${OPENFRAME_HOME}/volume_300000

400000=0004,STORAGE,REMOVABLE,${OPENFRAME_HOME}/volume_400000

500000=0004,STORAGE,REMOVABLE,${OPENFRAME_HOME}/volume_500000

600000=0004,STORAGE,REMOVABLE,${OPENFRAME_HOME}/volume_600000

700000=01C1,PUBLIC,PERMANENT,${OPENFRAME_HOME}/volume_700000

VSPOOL=FFFF,PUBLIC,PERMANENT,${OPENFRAME_HOME}/spool

A.3. sms.confsms.conf 파일은 OpenFrame 스토리지 관리 시스템에서 사용하는 SMS 클래스에 대한 정의를 저장한다.

이 설정 파일에는 3가지 SMS 클래스(데이터 클래스, 매니지먼트 클래스, 스토리지 클래스)에 대한 설정

을 모두 저장하고 있다. 이 설정 파일에 정의된 SMS 클래스들은 JCL의 파라미터로 직접 사용되거나, 다

음 장에서 설명할 acs.conf 파일에서 사용된다.

사용법

sms.conf 파일은 [DATACLAS] 절, [MGMTCLAS] 절, [STORCLAS] 절로 구성된다.

● [DATACLAS] 절

데이터 클래스를 정의한다.

DataClas=(Keyword1=Value1,Keyword2=Value2,...)

설명항목

등록할 데이터 클래스 이름을 지정한다.DataClas

유효한 키워드를 지정한다.Keyword

DataClas에 설정할 수 있는 유효한 키워드와 의미는 다음과 같다.

의미키워드

레코드 포맷이다.RECFM

논리 레코드 크기이다.LRECL

Space Scaling Factor이다. (U/K/M)AVGREC

평균 레코드 크기이다.AVGVAL

Primary Allocation Quantity이다.PRIMARY

48 OpenFrame 데이터 셋 안내서

Page 63: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

의미키워드

Secondary Allocation Quantity이다.SECONDARY

PDS의 Directory Block 수이다.DIRECTORY

데이터 셋 만료 일자이다. (YYYYMMDD)EXPDT

데이터 셋 보유 기간이다. (생성일로부터)RETPD

볼륨 개수이다.VOLCNT

데이터 셋 이름 유형이다. (EXT/HFS/LIB/PDS)DSNTYPE

압축 여부이다. (Y/N/T/G)COMPACT

Spanned 여부이다. (S/N)SPANNED

VSAM 데이터 셋 종류이다. (KS/ES/RR/LS)RECORG

키 길이이다. (in Bytes)KEYLEN

키 오프셋이다. (for KSDS)KEYOFF

데이터 컴포넌트 CISIZE이다.CISIZE

CI의 %Free Space이다.FRSPAC[0]

CA의 %Free Space이다.FRSPAC[1]

리전의 Share Option이다.SHOPTS[0]

시스템의 Share Option이다.SHOPTS[1]

● [MGMTCLAS] 절

매니지먼트 클래스를 정의한다.

MgmtClas=(Keyword1=Value1,Keyword2=Value2,...)

설명항목

등록할 매니지먼트 클래스 이름을 지정한다.MgmtClas

유효한 키워드를 지정한다.Keyword

MgmtClas에 설정할 수 있는 유효한 키워드와 의미는 다음과 같다.

의미키워드

데이터 셋 만료 일자이다. (YYYYMMDD)EXPDT

데이터 셋 보유 기간이다. (생성일로부터)RETPD

데이터 셋 보유 기간이다. (최종 참고일로부터)RETPD_NOUSE

최대 데이터 셋 보유 기간 한도이다.RETPD_LIMIT

● [STORCLAS] 절

Appendix A. 설정 파일 49

Page 64: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

스토리지 클래스를 정의한다.

StorClas=VolumeSerial1,VolumeSerial2-VolumeSerial3,...

설명항목

등록할 스토리지 클래스 이름을 지정한다.StorClas

스토리지 클래스에 등록할 볼륨시리얼 번호를 지정한다.VolumeSerial

사용예제

다음은 sms.conf 파일의 예이다.

###########################################################################

# TMAX OPENFRAME SMS CONFIGURATION #

# - sms.conf #

###########################################################################

[DATACLAS]

DCLAS001=(RECFM=FB,LRECL=80)

DCLAS002=(RECFM=VB,LRECL=32760)

DCLAS003=(RECORG=KS,CISIZE=4096,KEYOFF=0,KEYLEN=8,EXPDT=20091231)

[MGMTCLAS]

MCLAS001=(EXPDT=99991231,RETPD=NOLIMIT)

MCLAS002=(RETPD=30,RETPD_NOUSE=7)

MCLAS003=(RETPD_LIMIT=365)

[STORCLAS]

SCLAS001=DEFVOL

SCLAS002=DEFVOL,200000-300000

SCLAS003=400000-600000

A.4. acs.confacs.conf 파일은 OpenFrame 스토리지 관리 시스템에서 사용하는 SMS 클래스 선택 규칙에 대한 정보를

저장한다.

SMS 클래스는 다음과 같이 3가지 규칙을 사용하여 선택된다.

● 데이터 셋 이름을 이용한다.

● 데이터 셋 이름의 앞 부분을 이용한다.

● 데이터 셋 이름의 뒷 부분을 이용한다.

50 OpenFrame 데이터 셋 안내서

Page 65: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

만약 한 데이터 셋의 이름이 위의 3가지 규칙에 모두 적합한 경우에는 데이터 셋 이름을 이용하여 SMS 클

래스를 지정하는 방법이 우선순위가 가장 높고, 데이터 셋 이름의 뒷 부분만을 이용하여 SMS 클래스를

지정하는 방법이 우선순위가 가장 낮다.

또한 한 데이터 셋의 이름이 한 규칙 내의 여러 항목에 대응이 되는 경우에는 대응되는 항목 중 가장 많은

글자가 매칭되는 항목이 선택된다.

이 설정 파일에서 사용되는 SMS 클래스 이름들은 sms.conf 파일에 미리 정의되어 있어야 한다.

사용법

acs.conf 파일은 [DSNAME] 절, [PREFIX] 절, [SUFFIX] 절로 구성된다.

● [DSNAME] 절

데이터 셋의 이름과 UNIT으로 SMS 클래스를 선택한다.

DsName[+Unit]=[DataClas],[MgmtClas],[StorClas]

설명항목

와일드 카드 문자(%, *)를 포함한 데이터 셋 이름을 지정한다.DsName

- '%' : 정확하게 한 글자의 알파벳 혹은 숫자와 대응된다.

- '*' : 한 Qualifier 안에서 하나 또는 그 이상의 문자와 대응된다.

JCL의 DD 문장에 기술된 UNIT 이름을 지정한다.Unit

지정될 데이터 클래스를 지정한다.DataClas

지정될 매니지먼트 클래스를 지정한다.MgmtClas

지정될 스토리지 클래스를 지정한다.StorClas

● [PREFIX] 절

데이터 셋 이름의 앞 부분과 UNIT으로 SMS 클래스를 선택한다.

Prefix[+Unit]=[DataClas],[MgmtClas],[StorClas]

설명항목

데이터 셋 이름의 앞 부분을 지정한다.Prefix

JCL의 DD 문장에 기술된 UNIT 이름을 지정한다.Unit

지정될 데이터 클래스를 지정한다.DataClas

지정될 매니지먼트 클래스를 지정한다.MgmtClas

지정될 스토리지 클래스를 지정한다.StorClas

Appendix A. 설정 파일 51

Page 66: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● [SUFFIX] 절

데이터 셋 이름의 뒷 부분과 UNIT으로 SMS 클래스를 선택한다.

Suffix[+Unit]=[DataClas],[MgmtClas],[StorClas]

설명항목

데이터 셋 이름의 뒷 부분을 지정한다.Suffix

JCL의 DD 문장에 기술된 UNIT 이름을 지정한다.Unit

지정될 데이터 클래스를 지정한다.DataClas

지정될 매니지먼트 클래스를 지정한다.MgmtClas

지정될 스토리지 클래스를 지정한다.StorClas

사용예제

다음은 acs.conf 파일의 예이다.

###########################################################################

# TMAX OPENFRAME ACS CONFIGURATION #

# - acs.conf #

###########################################################################

[DSNAME]

CTAPE.S*.%%%%%%D3.*=,MCLAS001,SCLAS003

CTAPE.S*.%%%%%%W1.*=,MCLAS002,SCLAS003

CTAPE.S*.%%%%%%W2.*=,MCLAS003,SCLAS003

[PREFIX]

AAA.BBB=DCLAS001,MCLAS001,SCLAS002

AAA.BBB+DISKA=DCLAS001,MCLAS002,SCLAS002

+TAPEA=,,SCLAS003

[SUFFIX]

DATA.A1=DCLAS001,MCLAS001,SCLAS002

DATA.A2=DCALS002,MCLAS001,SCLAS002

DATA.A3=DCALS003,MCLAS001,SCLAS002

A.5. ds.confds.conf 파일에는 OpenFrame 시스템에서 사용하는 데이터 셋에 대한 일반적인 설정을 저장한다.

52 OpenFrame 데이터 셋 안내서

Page 67: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

사용법

ds.conf 파일은 다음의 14개의 절로 구성된다.

● [DATASET_DIRECTORY] 절

데이터 셋과 관련된 디렉터리를 지정한다.

SCHEMA_DIR=schema_directory

설명항목

데이터 셋을 마이그레이션 할 때 사용되는 데이터 셋 스키마 정보를 저장하

는 디렉터리를 지정한다.

SCHEMA_DIR

dsmigin, dsmigout 툴 프로그램 등에서 사용된다.

● [DATASET_RESOURCE] 절

데이터 셋에 대한 각종 리소스를 정의한다.

DATASET_SHMKEY=shared_memory_key

설명항목

데이터 셋을 할당할 때 사용하는 공유 메모리의 키를 10진수로 지정한다.DATASET_SHMKEY

16진수로 키를 지정하고 싶은 경우 앞에 '0x' 첨자를 붙인다.

● [DATASET_DEFAULT] 절

데이터 셋에 대한 기본 설정을 지정한다.

DEFAULT_VOLSER=volserial

DEFAULT_MGMTCLAS=mgmtclassname

DEFAULT_STORCLAS=storageclassname

SPOOL_VOLSER=spoolvolserial

NVSM_BUFFER_SIZE=bufsize

NVSM_EXTENT_LIMIT=ext_limit

VOLUME_SELECT_METHOD=AMPLE/FIRST

DEFAULT_DS_KEYSEQ=ASCII/EBCDIC

DSALC_SLOT_COUNT=slot_count

DATASET_SIZE_LIMIT=size_limit

설명항목

기본 볼륨 시리얼을 지정한다.DEFAULT_VOLSER

기본 매니지먼트 클래스를 지정한다.DEFAULT_MGMTCLAS

Appendix A. 설정 파일 53

Page 68: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명항목

기본 스토리지 클래스를 지정한다.DEFAULT_STORCLAS

스풀 볼륨 시리얼을 지정한다.SPOOL_VOLSER

Non-VSAM 데이터 셋 버퍼의 크기를 KByte 단위로 지정한다.NVSM_BUFFER_SIZE

Non-VSAM 데이터 셋의 최대 Extent 숫자를 지정한다.NVSM_EXTENT_LIMIT

신규 데이터 셋을 할당할 때 볼륨이 여러 개 주어진 경우, 데이터 셋이

생성되는 볼륨을 선택하는 방법을 지정한다.

VOLUME_SELECT_METHOD

AMPLE 혹은 FIRST 중에서 선택한다. 기본값은 AMPLE이다.

색인 데이터 셋에 대한 키 정렬 순서를 지정한다.DEFAULT_DS_KEYSEQ

ASCII 혹은 EBCDIC 중에서 선택한다. 기본값은 ASCII 순서이다.

최대 데이터 셋 할당 슬롯의 개수를 지정한다.DSALC_SLOT_COUNT

256부터 65535까지의 값을 지정한다. 기본값은 8192이다.

Non-VSAM 데이터 셋의 최대 허용 크기를 KByte 단위로 지정한다.DATASET_SIZE_LIMIT

지정하지 않는 경우 데이터 셋에 대한 크기 제한을 하지 않는다.

● [LOCK_SERVER] 절

데이터 셋 Lock을 관리하는 ofrlmsvr과 ofrlmwrk 서버에 대한 설정이다.

LOCK_DATASET=dataset_name

LOG_DATASET=dataset_name

SEQNO_FILE=filepath

RECOVERY_TIME=number of hours

LOG_CLEANUP_INTERVAL=number of minutes

설명항목

Lock 서버가 Lock 정보를 저장하는데 사용하는 Lock 데이터 셋을 지

정한다.

LOCK_DATASET

Lock 데이터 셋에는 데이터 셋 이름, Reference ID, JOIBID, 노드명,

Process ID, Lock Type의 레코드 정보가 저장된다.

Lock 서버가 Lock 요청을 구분하기 위해서 클라이언트에게 발행하

는 토큰정보를 저장하는데 사용하는 로그 데이터 셋을 지정한다.

LOG_DATASET

Lock 서버는 Lock을 요청하는 클라이언트에게 16자리 고유의 토큰

을 발행하며 이 토큰을 이용해서 클라이언트의 요청을 식별하게 된

다.

54 OpenFrame 데이터 셋 안내서

Page 69: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명항목

Lock 서버가 토큰을 발행할 때 사용하는 순차번호를 저장하는 파일

경로를 지정한다. 이 순차번호는 서버가 기동될 때마다 Lock 서버가

자동으로 증가시킨다.

SEQNO_FILE

현재 OpenFrame에서 사용되는 ds.conf 파일의 [LOCK_SERVER]

절의 항목 중 RECOVERY_TIME는 사용하지 않는다.

RECOVERY_TIME

로그 데이터 셋을 삭제(truncate)하는 주기가 분단위로 설정되어 있

다.

LOG_CLEANUP_INTERVAL

● [DATASET_LOCK] 절

Lock 클라이언트에 대한 설정이다.

LOCK_FLAG=[LOCK|NOLOCK]

REQUEST_RETRYINTERVAL=number of seconds

설명항목

Lock 클라이언트가 Lock 서버에 Lock, Unlock, Lock Clear, Lock 리

스트 조회 등의 Lock 관련 요청을 보낼지 여부를 지정한다.

LOCK_FLAG

- LOCK: Lock 서버에 Lock 관련 요청을 한다.

- NOLOCK: Lock 서버에 Lock 관련 요청을 하지 않는다.

Lock 클라이언트가 네트워크 불안이나 Lock 서버의 일시 정지 등의

이유로 Lock 관련 요청에 실패했을 때 재시도 간격을 초단위로 지정

한다. 기본 값은 3초이다.

REQUEST_RETRYINTERVAL

참고

최초로 OpenFrame이 설치된 후에 Lock 데이터 셋과 로그 데이터 셋을 생성할 때 Lock 처리없이 데

이터 셋을 조작하기 위해서 NOLOCK을 사용한다.

Appendix A. 설정 파일 55

Page 70: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● [TAPE_DEVICE] 절

테이프 디바이스에 저장된 데이터 셋에 대한 압축 방식을 결정한다.

WORK_DIR=temp_directory_path

POPEN_INPUT=load_commands

POPEN_OUTPUT=write_commands

TAPE_SIZE=tape_size_commands

설명항목

테이프 데이터 셋의 압축을 풀어서 작업할 임시 디렉터리를 지정한다. 지정

하지 않으면 데이터 셋 디렉터리가 사용된다.

WORK_DIR

압축된 데이터를 파이프를 이용해서 직접 Load하기 위한 명령어를 지정한다.POPEN_INPUT

예)

- gzip을 사용하는 경우 'cat %s | gzip -d'

- compress를 사용하는 경우 'cat %s | uncompress'

압축되지 않은 데이터를 파이프를 이용해서 Write하기 위한 명령어를 지정한

다.

POPEN_OUTPUT

예)

- gzip을 사용하는 경우 'cat | gzip -1 > %s'

- compress를 사용하는 경우 'cat | compress > %s'

압축된 데이터 셋의 크기를 구하는 명령어를 지정한다.TAPE_SIZE

예)

- gzip을 사용하는 경우 'gzip -dc %s | wc -c'

- compress를 사용하는 경우 'zcat %s | wc -c'

● [AMS_DEFAULT] 절

Access Method Service에 대한 기본 설정이다.

ERROR_LEVEL=[IGNORE|STRICT]

설명항목

오류가 발생한 경우의 대응방안을 지정한다.ERROR_LEVEL

- IGNORE: 데이터 셋을 삭제하다가 오류가 발생한 경우 오류를 무시한다.

(기본값)

56 OpenFrame 데이터 셋 안내서

Page 71: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명항목

- STRICT: 데이터 셋을 삭제하다가 오류가 발생한 경우 작업이 중단된다.

● [ICF_CATALOG] 절

통합 카탈로그에 대한 기본 설정이다.

MASCAT_VSER=mascat_volser

MASCAT_NAME=mascat_name

ALIAS_LEVEL=[1|2|3|4]

ERROR_LEVEL=[IGNORE|STRICT]

설명항목

마스터 카탈로그가 생성된 볼륨 시리얼을 지정한다.MASCAT_VSER

마스터 카탈로그의 데이터 셋 이름을 지정한다.MASCAT_NAME

데이터 셋의 Alias 단계(1에서 4사이의 값)를 지정한다.ALIAS_LEVEL

오류가 발생한 경우의 대응방안을 지정한다.ERROR_LEVEL

- IGNORE: 데이터 셋을 삭제하다가 오류가 발생한 경우 오류를 무시한다.

(기본값)

- STRICT: 데이터 셋을 삭제하다가 오류가 발생한 경우 작업이 중단된다.

● [ICF_STORAGE] 절

통합 카탈로그의 스토리지로 사용하는 TSAM 접속 정보를 설정한다.

USERNAME=username

PASSWORD=password

[ENPASSWD=enpasswd]

DATABASE=databasename

설명항목

데이터베이스에 접속하기 위한 사용자 계정을 지정한다.USERNAME

데이터베이스에 접속하기 위한 사용자의 비밀번호를 지정한다.PASSWORD

PASSWORD 대신 사용할 암호화된 비밀번호를 지정한다.ENPASSWD

접속하려는 데이터베이스 이름을 지정한다.DATABASE

Appendix A. 설정 파일 57

Page 72: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● [ICF_BACKUP] 절

통합 카탈로그의 TSAM 접속이 실패했을 때 사용하는 백업 접속 정보를 설정한다.

USERNAME=username

PASSWORD=password

[ENPASSWD=enpasswd]

DATABASE=databasename

RETRY_COUNT=retry_count

RETRY_INTERVAL=retry_interval

설명항목

데이터베이스에 접속에 실패한 경우 사용할 사용자 계정을 지정한다.USERNAME

데이터베이스에 접속에 실패한 경우 사용할 사용자의 비밀번호를 지정한다.PASSWORD

PASSWORD 대신 사용할 암호화된 비밀번호를 지정한다.ENPASSWD

접속하려는 데이터베이스 이름을 지정한다.DATABASE

접속 재시도 횟수를 지정한다. 기본값은 10회이다.RETRY_COUNT

접속 재시도 시간 간격을 초단위로 지정한다. 기본값은 10초이다.RETRY_INTERVAL

● [TSAM_CLIENT] 절

업무용 VSAM 데이터 셋에 대한 TSAM 접속 정보를 설정한다.

USERNAME=username

PASSWORD=password

[ENPASSWD=enpasswd]

DATABASE=databasename

설명항목

데이터베이스에 접속하기 위한 사용자 계정을 지정한다.USERNAME

데이터베이스에 접속하기 위한 사용자의 비밀번호를 지정한다.PASSWORD

PASSWORD 대신 사용할 암호화된 비밀번호를 지정한다.ENPASSWD

접속하려는 데이터베이스 이름을 지정한다.DATABASE

● [SYS1_CLIENT] 절

시스템 VSAM 데이터 셋(JOBQ 데이터 셋, OUTPUTQ 데이터 셋, LOCK 데이터 셋 등)에 대한 TSAM

접속 정보를 설정한다.

보통 업무용 VSAM 데이터 셋에 대한 TSAM 접속 정보와 동일하게 설정하지만, 특수한 운용상황에서

시스템 VSAM 데이터 셋에 대한 데이터베이스 인스턴스를 따로 관리하는 경우에는 접속 정보를 다르게

설정한다.

58 OpenFrame 데이터 셋 안내서

Page 73: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

USERNAME=username

PASSWORD=password

[ENPASSWD=enpasswd]

DATABASE=databasename

설명항목

데이터베이스에 접속하기 위한 사용자 계정을 지정한다.USERNAME

데이터베이스에 접속하기 위한 사용자의 비밀번호를 지정한다.PASSWORD

PASSWORD 대신 사용할 암호화된 비밀번호를 지정한다.ENPASSWD

접속하려는 데이터베이스 이름을 지정한다.DATABASE

● [SYS1_BACKUP] 절

시스템 데이터 셋에 대한 TSAM 접속이 실패했을 때 사용하는 백업 접속 정보를 설정한다.

USERNAME=username

PASSWORD=password

[ENPASSWD=enpasswd]

DATABASE=databasename

RETRY_COUNT=retry_count

RETRY_INTERVAL=retry_interval

설명항목

데이터베이스에 접속에 실패한 경우 사용할 사용자 계정을 지정한다.USERNAME

데이터베이스에 접속에 실패한 경우 사용할 사용자의 비밀번호를 지정한다.PASSWORD

PASSWORD 대신 사용할 암호화된 비밀번호를 지정한다.ENPASSWD

접속하려는 데이터베이스 이름을 지정한다.DATABASE

접속 재시도 횟수를 지정한다. 기본값은 10회이다.RETRY_COUNT

접속 재시도 시간 간격을 초단위로 지정한다. 기본값은 10초이다.RETRY_INTERVAL

● [FILE_HANDLER] 절

External File Handler에 대한 기본 설정이다.

CHECK_DSAUTH=[YES|NO]

설명항목

데이터 셋에 대한 권한 체크를 수행할 지를 설정하는 항목이다. 기본값은 NO

이다.

CHECK_DSAUTH

Appendix A. 설정 파일 59

Page 74: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

사용예제

다음은 전형적인 ds.conf 파일의 예이다.

###########################################################################

# TMAX OPENFRAME DATASET CONFIGURATION #

# - ds.conf #

###########################################################################

[DATASET_DIRECTORY]

SCHEMA_DIR=${OPENFRAME_HOME}/schema

[DATASET_RESOURCE]

DATASET_SHMKEY=0x805

[DATASET_DEFAULT]

DEFAULT_VOLSER=DEFVOL

DEFAULT_MGMTCLAS=

DEFAULT_STORCLAS=

SPOOL_VOLSER=VSPOOL

NVSM_BUFFER_SIZE=512

NVSM_EXTENT_LIMIT=50

[LOCK_SERVER]

LOCK_DATASET=SYS1.DSLOCK.DATA

LOG_DATASET=SYS1.DSLOCK.LOG

SEQNO_FILE=${OPENFRAME_HOME}/data/dslock_seqno.dat

RECOVERY_TIME=45

LOG_CLEANUP_INTERVAL=120

[DATASET_LOCK]

LOCK_FLAG=LOCK

REQUEST_RETRYINTERVAL=5

[TAPE_DEVICE]

WORK_DIR=${OPENFRAME_HOME}/temp

POPEN_INPUT=cat %s | gzip -d

POPEN_OUTPUT=cat | gzip -1 > %s

TAPE_SIZE=gzip -dc %s | wc -c

[AMS_DEFAULT]

ERROR_LEVEL=IGNORE

[ICF_CATALOG]

MASCAT_VSER=DEFVOL

MASCAT_NAME=SYS1.MASTER.ICFCAT

ALIAS_LEVEL=1

60 OpenFrame 데이터 셋 안내서

Page 75: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

ERROR_LEVEL=IGNORE

[ICF_STORAGE]

USERNAME=tsr

PASSWORD=tsr

DATABASE=ora92_obml1

[TSAM_CLIENT]

USERNAME=tsr

PASSWORD=tsr

DATABASE=ora92_obml1

[SYS1_CLIENT]

USERNAME=tsr

PASSWORD=tsr

DATABASE=ora92_obml1

[FILE_HANDLER]

CHECK_DSAUTH=NO

A.6. keyseq.confkeyseq.conf 파일은 OpenFrame 시스템에서 사용하는 색인 데이터 셋(VSAM KSDS 데이터 셋 혹은 ISAM

데이터 셋)의 Key Sequence 설정을 저장하는 설정 파일이다. Key Sequence 설정은 데이터 셋의 키 순서

를 ASCII 순서 혹은 EBCDIC 순서로 정렬할 것인지를 지정한다.

개별 데이터 셋에 대한 Key Sequence는 다음과 같이 3가지 규칙을 사용하여 선택된다.

● 데이터 셋 이름 이용한다.

● 데이터 셋 이름의 앞 부분을 이용한다.

● 데이터 셋 이름의 뒷 부분을 이용한다.

만약 한 데이터 셋의 이름이 위의 3가지 규칙에 모두 적합한 경우에는 데이터 셋 이름을 이용하여 Key

Sequence를 지정하는 방법이 우선순위가 가장 높고, 데이터 셋 이름의 뒷 부분만을 이용하여 Key Sequence

를 지정하는 방법이 우선순위가 가장 낮다.

또한 한 데이터 셋의 이름이 한 규칙 내의 여러 항목에 대응이 되는 경우에는 대응되는 항목 중 가장 많은

글자가 매칭되는 항목이 선택된다.

사용법

keyseq.conf 파일은 [DSNAME] 절, [PREFIX] 절, [SUFFIX] 절로 구성된다.

Appendix A. 설정 파일 61

Page 76: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● [DSNAME] 절

데이터 셋의 이름으로 Key Sequence를 결정한다.

DsName=ASCII|EBCDIC

설명항목

와일드 카드 문자(%, *)를 포함한 데이터 셋 이름을 지정한다.DsName

- ASCII: ASCII 순서로 레코드를 정렬한다.

- EBCDIC: EBCDIC 순서로 레코드를 정렬한다.

DsName에는 다음의 와일드 카드 문자를 사용할 수 있다.

- '%' : 정확하게 한 글자의 알파벳 혹은 숫자와 대응된다.

- '*' : 한 Qualifier 안에서 하나 또는 그 이상의 문자와 대응된다.

● [PREFIX] 절

데이터 셋 이름의 앞 부분으로 Key Sequence를 결정한다.

Prefix=ASCII|EBCDIC

설명항목

데이터 셋 이름의 앞 부분을 지정한다.Prefix

- ASCII: ASCII 순서로 레코드를 정렬한다.

- EBCDIC: EBCDIC 순서로 레코드를 정렬한다.

● [SUFFIX] 절

데이터 셋 이름의 뒷 부분으로 Key Sequence를 결정한다.

Suffix=ASCII|EBCDIC

설명항목

데이터 셋 이름의 뒷 부분을 지정한다.Suffix

- ASCII: ASCII 순서로 레코드를 정렬한다.

- EBCDIC: EBCDIC 순서로 레코드를 정렬한다.

62 OpenFrame 데이터 셋 안내서

Page 77: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

사용예제

다음은 keyseq.conf 파일의 예이다.

###########################################################################

# TMAX OPENFRAME DATASET KEY SEQUENCE CONFIGURATION #

# - keyseq.conf #

###########################################################################

[DSNAME]

# CTAPE.S*.%%%%%%D3.*=EBCDIC

# CTAPE.S*.%%%%%%W1.*=EBCDIC

# CTAPE.S*.%%%%%%W2.*=EBCDIC

[PREFIX]

SYS1.=ASCII

[SUFFIX]

# .DATA.A1=ASCII

Appendix A. 설정 파일 63

Page 78: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에
Page 79: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

Appendix B. 카탈로그 관리 API

OpenFrame에서 제공하는 카탈로그 관리 API의 인터페이스를 사용하여 카탈로그 항목 삭제와 조회 등

카탈로그와 데이터 셋에 대한 관리를 할 수 있다.

카탈로그 관리 API를 사용해서 프로그램을 작성하려면 OpenFrame 바이너리와 함께 배포되는 amsu.h

헤더 파일을 사용자 프로그램에 포함해야 하고, 사용자 프로그램을 컴파일할 때, libams.so 라이브러리를

링크해 주어야 한다.

카탈로그 관리 API의 인터페이스는 다음과 같이 분류할 수 있다.

Volume Information

설명API

시스템에 등록된 볼륨의 목록을 가져온다.amsu_volume_list()

시스템에 등록된 기본 볼륨을 가져온다.amsu_default_volume()

특정 볼륨에 대한 디렉터리 경로를 가져온다.amsu_volume_path()

Catalog Search

설명API

임의의 카탈로그 검색순서를 지정한다.amsu_use_catalogs()

카탈로그에서 특정 항목을 검색한다.amsu_search_entries()

시스템에 등록된 마스터 카탈로그 정보를 가져온다.amsu_master_catalog()

특정 데이터 셋을 카탈로깅하기 위한 후보 카탈로그를 검색한다.amsu_candidate_catalog()

File Path Resolution

설명API

특정 데이터 셋의 이름에 대해 UNIX 파일경로를 가져온다.amsu_filepath2()

특정 데이터 셋의 이름에 대해 파일이름을 가져온다.amsu_filename2()

Entry Management

설명API

카탈로그에 등록된 데이터 셋을 삭제한다.amsu_delete()

카탈로그에 등록된 항목 정보를 읽어온다.amsu_info()

카탈로그에 등록된 항목과 연관된 목록을 가져온다.amsu_assoc()

Appendix B. 카탈로그 관리 API 65

Page 80: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

B.1. Volume Information

amsu_volume_list()

시스템에 등록된 볼륨의 목록을 가져온다.

● 프로토타입

int amsu_volume_list(int *count, char *volser[]);

● 파라미터

설명파라미터

volser로 주어진 버퍼의 크기(IN), 등록된 볼륨의 개수이다. (OUT)count

등록된 볼륨 시리얼을 담기 위한 버퍼이다. (OUT)volser

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

amsu_default_volume()

시스템에 등록된 기본 볼륨을 가져온다.

● 프로토타입

int amsu_default_volume(char *volser);

● 파라미터

설명파라미터

기본 볼륨 시리얼을 담기 위한 버퍼이다. (OUT)volser

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

66 OpenFrame 데이터 셋 안내서

Page 81: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

amsu_volume_path()

특정 볼륨에 대한 디렉터리 경로를 가져온다.

● 프로토타입

int amsu_volume_path(char *volser, char *vpath);

● 파라미터

설명파라미터

디렉터리 경로를 알고 싶은 볼륨 시리얼이다. (IN)volser

디렉터리 경로를 담기 위한 버퍼이다. (OUT)vpath

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

B.2. Catalog Search

amsu_use_catalogs()

임의의 카탈로그 검색순서를 지정한다.

● 프로토타입

int amsu_use_catalogs(char **cat_names);

int amsu_use_catalog(char *cat_name);

● 파라미터

설명파라미터

카탈로그를 검색할 때 우선적으로 검색하려고 하는 카탈로그 이름 리스트이

다. (IN)

cat_names

카탈로그를 검색할 때 우선적으로 검색하려고 하는 카탈로그 이름이다. (IN)cat_name

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

Appendix B. 카탈로그 관리 API 67

Page 82: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

amsu_search_entries()

카탈로그에서 특정 항목을 검색한다. 카탈로그 검색순서는 아래와 같다.

1. amsu_use_catalogs()에 의해 지정된 카탈로그

2. filter_key에 의해 지정된 Alias 카탈로그

3. 앞에서 검색이 되지 않았을 경우 마스터 카탈로그

● 프로토타입

int amsu_search_entries(char *filter_key, char *entry_types, int *count,

amsu_result_t *result, int flags);

● 파라미터

설명파라미터

검색하려고 하는 카탈로그 항목 표현식이다. (IN - '*', '%' 등의 와일드 카드 문

자 포함)

filter_key

검색하려고 하는 카탈로그 항목 유형이다. (IN - NULL 이면 모두 검색)entry_types

result 버퍼의 크기(IN), 검색된 항목 개수이다. (OUT)count

검색된 항목을 담을 버퍼이다. (OUT)result

카탈로그 검색 옵션이다. (IN)flags

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

● 참고

다음은 카탈로그 항목 유형과 카탈로그 검색 옵션 매크로이다. 카탈로그 항목 유형과 카탈로그 검색 옵

션은 ams_user.h 헤더 파일에 정의된 매크로를 참고한다.

다음은 카탈로그 항목 유형 매크로이다.

설명항목 유형매크로

Non-VSAM이다.'A'AMSU_ENTRY_TYPE_NON

VSAM

세대 데이터 그룹이다.'B'AMSU_ENTRY_TYPE_GDG

VSAM 클러스터이다.'C'AMSU_ENTRY_TYPE_CLUSTER

데이터 컴포넌트이다.'D'AMSU_ENTRY_TYPE_DATA

68 OpenFrame 데이터 셋 안내서

Page 83: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명항목 유형매크로

보조 인덱스이다.'G'AMSU_ENTRY_TYPE_AIX

세대 데이터 셋이다.'H'AMSU_ENTRY_TYPE_GDS

인덱스 컴포넌트이다.'I'AMSU_ENTRY_TYPE_INDEX

접근경로이다.'R'AMSU_ENTRY_TYPE_PATH

사용자 카탈로그이다.'U'AMSU_ENTRY_TYPE_UCAT

Alias이다.'X'AMSU_ENTRY_TYPE_ALIAS

다음은 카탈로그 검색 옵션 매크로이다.

설명검색 옵션매크로

기본 검색 옵션이다.0x00AMSU_SEARCH_DEFAULT

클러스터 이름이 filter key와 일치하면 컴포넌트가 반

환된다.

0x01AMSU_SEARCH_CLS_COMPS

단 하나의 카탈로그만 검색된다.0x02AMSU_SEARCH_1_CATALOG

카탈로그를 검색해서 나온 결과는 다음과 같은 구조체에 담기게 된다.

/* -------------------------- catalog search result -------------------- */

typedef struct _amsu_result_t {

char catname[AMSU_ENTRY_NAME_LENGTH+1];

char entname[AMSU_ENTRY_NAME_LENGTH+1];

char enttype;

} amsu_result_t;

amsu_master_catalog()

시스템에 등록된 마스터 카탈로그 정보를 가져온다.

● 프로토타입

int amsu_master_catalog(char *mascat_name, char *mascat_vser);

● 파라미터

설명파라미터

마스터 카탈로그 데이터 셋 이름을 담을 버퍼이다. (OUT)mascat_name

마스터 카탈로그 볼륨 시리얼을 담을 버퍼이다. (OUT)mascat_vser

Appendix B. 카탈로그 관리 API 69

Page 84: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

amsu_candidate_catalog()

특정 데이터 셋에 대한 후보 카탈로그를 검색한다.

후보 카탈로그는 다음의 절차에 의해서 결정된다.

1. 데이터 셋 이름이 GDS인 경우 GDG 카탈로그

2. amsu_use_catalogs()로 지정된 카탈로그

3. 데이터 셋 이름에 의해서 지정된 Alias 카탈로그

4. 앞에서 결정이 되지 않았을 경우 마스터 카탈로그

● 프로토타입

int amsu_candidate_catalog(char *dsname, char *cat_name);

● 파라미터

설명파라미터

카탈로깅될 데이터 셋 이름이다. (IN)dsname

후보 카탈로그 이름을 담을 버퍼이다. (OUT)cat_name

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

70 OpenFrame 데이터 셋 안내서

Page 85: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

B.3. File Path Resolution

amsu_filepath2()

특정 데이터 셋의 이름에 대해 파일 경로를 가져온다.

● 프로토타입

int amsu_filepath(char *dsname, char *volser, char *filepath);

int amsu_filepath2(char *dsname, char *membname, char *volser, char *filepath);

● 파라미터

설명파라미터

파일 경로를 조회하고자 하는 데이터 셋 이름이다. (IN)dsname

파일 경로를 조회하고자 하는 PDS의 멤버이다. (IN)membname

지정된 데이터 셋이 저장된 볼륨 시리얼이다. (IN)volser

UNIX 파일 경로를 담을 버퍼이다. (OUT)filepath

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

amsu_filename2()

특정 데이터 셋의 이름에 대해 파일 이름을 가져온다.

● 프로토타입

int amsu_filename(char *dsname, char *filename);

int amsu_filename2(char *dsname, char *membname, char *filename);

● 파라미터

설명파라미터

파일 경로를 조회하고자 하는 데이터 셋 이름이다. (IN)dsname

파일 경로를 조회하고자 하는 PDS의 멤버이다. (IN)membname

UNIX 파일 이름을 담을 버퍼이다. (OUT)filename

● 반환 값

Appendix B. 카탈로그 관리 API 71

Page 86: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

B.4. Entry Management

amsu_delete()

카탈로그에 등록된 항목을 삭제한다.

● 프로토타입

int amsu_delete(char *cat_name, char *entry_name, char entry_type, int flags);

● 파라미터

설명파라미터

해당 항목이 카탈로깅된 카탈로그 이름이다. (IN)cat_name

해당 항목의 카탈로깅된 이름이다. (IN)entry_name

해당 항목이 카탈로깅된 유형이다. (IN)entry_type

카탈로그 삭제 옵션이다. (IN)flags

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

amsu_info()

카탈로그에 등록된 항목에 대한 정보를 읽어온다.

● 프로토타입

int amsu_info(char *cat_name, char *entry_name, char entry_type, void

*entry_info, int flags);

● 파라미터

설명파라미터

해당 항목이 카탈로깅된 카탈로그 이름이다. (IN)cat_name

해당 항목의 카탈로깅된 이름이다. (IN)entry_name

해당 항목이 카탈로깅된 유형이다. (IN)entry_type

72 OpenFrame 데이터 셋 안내서

Page 87: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명파라미터

카탈로그 삭제 옵션이다. (IN)flags

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

● 참고

카탈로그 항목에 대한 정보는 항목의 유형에 따라 서로 다른 구조체에 담기게 된다. 아래는 GDG 항목

에 대한 정보 구조체를 보여준다.

/* -------------------------- GDG info type ---------------------------- */

typedef struct _amsu_gdg_info_t {

char dscrdt2[8]; /* creation date */

char dsexdt2[8]; /* expiration date */

char ownerid[8]; /* owner of the data set */

int16_t gdglimit; /* maximum number of GDS allowed */

uint8_t gdgattr; /* GDG attributes - bit flags */

} amsu_gdg_info_t;

GDG 이외의 항목에 대해서는 ams_user.h 헤더 파일에 정의된 구조체를 참고한다.

amsu_assoc()

카탈로그에 등록된 항목과 연관된 항목 목록을 가져온다.

● 프로토타입

int amsu_assoc(char *cat_name, char *entry_name, char entry_type, int

*count, amsu_symbol_t *assocs);

● 파라미터

설명파라미터

해당 항목이 카탈로깅된 카탈로그 이름이다. (IN)cat_name

해당 항목의 카탈로깅된 이름이다. (IN)entry_name

해당 항목이 카탈로깅된 유형이다. (IN)entry_type

연관된 항목 버퍼 크기(IN), 연관된 항목 개수이다. (OUT)count

연관된 항목 버퍼이다. (OUT)assoc

Appendix B. 카탈로그 관리 API 73

Page 88: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

● 참고

연관된 항목 목록은 다음과 같은 구조체에 담기게 된다.

/* -------------------------- catalog entry symbol --------------------- */

typedef struct _amsu_symbol_t {

char entname[AMSU_ENTRY_NAME_LENGTH+1];

char enttype;

} amsu_symbol_t;

74 OpenFrame 데이터 셋 안내서

Page 89: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

Appendix C. 데이터 셋 I/O API

OpenFrame에서 제공하는 데이터 셋 I/O API의 인터페이스를 사용하면, C 언어로 작성된 애플리케이션

프로그램에서 JCL의 DD 문장으로 할당된 데이터 셋에 대한 레코드의 읽기/쓰기를 수행할 수 있다.

참고

Main COBOL 애플리케이션 프로그램에서 OPEN된 데이터 셋을 C로 작성된 서브 프로그램에서 읽

기/쓰기 등의 I/O를 수행하기 위해서는 FCD Handling API 라이브러리를 사용할 것을 권장한다.

데이터 셋 I/O API를 사용해서 프로그램을 작성하려면, OpenFrame 바이너리와 함께 배포되는 tcfh.h 헤

더 파일을 사용자 프로그램에 포함해야 하고, 사용자 프로그램을 컴파일할 때, libtcfh.so 라이브러리를 링

크해야 한다.

데이터 셋 I/O API의 인터페이스는 다음과 같이 분류할 수 있다.

File Open/Close

설명API

레코드를 처리하기 위해 데이터 셋을 연다.tcfh_open()

레코드를 처리하기 위해 열었던 데이터 셋을 닫는다.tcfh_close()

Record Access

설명API

순차처리를 위해 내부 레코드 포인터를 이동시킨다.tcfh_start()

데이터 셋에서 레코드 하나를 읽는다.tcfh_read()

데이터 셋에 레코드 하나를 기록한다.tcfh_write()

데이터 셋에 있는 한 레코드의 내용을 변경한다.tcfh_rewrite()

데이터 셋에 있는 한 레코드를 삭제한다.tcfh_delete()

C.1. File Open/Close

tcfh_open()

레코드를 처리하기 위해 데이터 셋을 연다. 데이터 셋을 OPEN 하는 작업은 JCL에서 DD 문으로 할당된

데이터 셋에 대해 실제 레코드를 읽기/쓰기 등의 I/O를 하기 위해 준비하는 과정이다.

Appendix C. 데이터 셋 I/O API 75

Page 90: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 프로토타입

int tcfh_open(tcfh_file_t *file, int open_mode, int flags);

● 파라미터

설명파라미터

열려고 하는 데이터 셋에 대한 정보를 담은 파일 구조체이다. (IN/OUT)file

데이터 셋 OPEN 모드이다. (IN)open_mode

- INPUT / OUTPUT / INOUT / EXTEND

데이터 셋 OPEN 옵션이다. (IN)flags

- NO REWIND

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

● 참고

데이터 셋을 열기 위해서는 열려고 하는 데이터 셋에 대한 정보를 담은 파일 구조체의 포인터를 제공해

야 한다. 이 파일 구조체는 tcfh.h 헤더 파일에 정의되어 있다.

/* -------------------------- file I/O block --------------------------- */

typedef struct tcfh_file_s {

char file_name[8+2]; /* file name - SELECT clause */

char file_status[2]; /* file status - I/O interface */

uint8_t organization; /* organization - SELECT clause */

uint8_t access_mode; /* access mode - SELECT clause */

uint8_t open_mode; /* open mode - tcfh_open() */

uint8_t misc_flags; /* miscellaneous - SELECT clause */

/* 64 bit separating line */

char file_path[256]; /* file path - tcfh_open() */

/* 64 bit separating line */

int32_t file_handle; /* file handle - tcfh_open() */

int32_t relative_key; /* relative key - C(C++) program */

/* 64 bit separating line */

int16_t key_length; /* key length - DCL statement */

int16_t key_loc; /* key position - DCL statement */

int16_t rec_size; /* record size - DCL statement */

int16_t cur_reclen; /* current record length - I/O interface */

...

} tcfh_file_t;

76 OpenFrame 데이터 셋 안내서

Page 91: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

앞의 파일 구조체에서 OPEN할 때 지정해 주어야 하는 항목은 다음과 같다.

설명항목

JCL에 기술된 DD 이름이다.file_name

데이터 셋의 구조이다.organization

- 0: 순차

- 1: 상대

- 2: 인덱스

액세스 모드이다.acess_mode

- 0: 순차

- 1: 임의

- 2: 둘 다

데이터 셋을 열 때 tcfh_open() API의 파라미터로 open 모드를 명시해야 한다. 지원되는 데이터 셋 OPEN

모드는 다음과 같다.

설명open 모드매크로

INPUT 모드이다.0TCFH_OPEN_INPUT

OUTPUT 모드이다.1TCFH_OPEN_OUTPUT

INPUT/OUTPUT 모드이다.2TCFH_OPEN_INOUT

EXTEND 모드이다.3TCFH_OPEN_EXTEND

성공적으로 데이터 셋이 열린 경우 파일 구조체의 file_status, file_path, file_handle 등의 값이 설정된다.

tcfh_close()

레코드를 처리하기 위해 열었던 데이터 셋을 닫는다. 데이터 셋을 CLOSE 하는 작업은 애플리케이션에서

데이터 셋에 대한 읽기/쓰기 등의 I/O를 수행한 후에, 애플리케이션과 물리적인 데이터 셋과의 연결을 끊

는 과정이다.

● 프로토타입

int tcfh_close(tcfh_file_t *file, int flags);

● 파라미터

Appendix C. 데이터 셋 I/O API 77

Page 92: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명파라미터

닫으려고 하는 데이터 셋에 대한 정보를 담은 파일 구조체이다. (IN/OUT)file

데이터 셋 닫기 옵션이다. (IN)flags

- WITH LOCK

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

● 참고

CLOSE 명령의 참고할 사항은 다음과 같다.

– tcfh_close() API의 file 파라미터에는 tcfh_open() API에 제공되었던 파일 구조체의 포인터를 전달한

다.

– tcfh_close() API를 사용해서 성공적으로 CLOSE 된 데이터 셋은 tcfh_open() API를 사용해서 다시

OPEN 할 수 있다.

C.2. Record Access

tcfh_start()

RELATIVE 데이터 셋 혹은 INDEXED 데이터 셋에서 다음 번에 읽을 레코드 위치로 내부 레코드 포인터를

이동시킨다. 이동시킬 레코드의 위치는 RELATIVE 데이터 셋의 경우에는 파일 구조체의 relative_key 필

드에 상대 레코드 번호를 지정해 주고, INDEXED 데이터 셋의 경우에는 tcfh_start() API의 key 파라미터

에 키 값을 지정한다.

● 프로토타입

int tcfh_start(tcfh_file_t *file, char *key, int keylen, int flags);

● 파라미터

설명파라미터

처리하려고 하는 데이터 셋에 대한 정보를 담은 파일 구조체이다. (IN/OUT)file

인덱스 데이터 셋인 경우 키 값이다. (IN/OUT)key

인덱스 데이터 셋인 경우 키 길이이다. (IN)keylen

데이터 셋 START 옵션이다. (IN)flags

78 OpenFrame 데이터 셋 안내서

Page 93: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명파라미터

- EQUAL / GTEQ

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

● 주의

START 명령의 주의사항은 다음과 같다.

– 데이터 셋을 INPUT 또는 INOUT 모드로 열어야만 START 명령을 수행할 수 있다.

– 명령을 수행한 후 파일구조체의 file_status로 파일의 상태를 조사할 수 있다.

– RELATIVE 데이터 셋인 경우 RRN은 파일 구조체의 relative_key 필드를 사용한다.

tcfh_read()

순차적으로 데이터 셋의 레코드를 읽거나 키를 지정해서 RANDOM하게 레코드를 읽는다. RANDOM하게

레코드를 읽을 때는 RELATIVE 데이터 셋의 경우에는 파일 구조체의 relative_key 필드에 상대 레코드 번

호를 지정해 주고, INDEXED 데이터 셋의 경우에는 tcfh_read() API이 key 파라미터에 키 값을 지정해 준

다.

순차적으로 데이터 셋의 레코드를 읽는 경우에는 tcfh_read() API의 flags 파라미터에 TCFH_READ_NEXT

매크로를 지정해 주고, RANDOM하게 레코드를 읽을 때는 TCFH_READ_DEFAULT 매크로를 지정해 준

다.

가변 길이 레코드 데이터 셋의 경우, READ 명령을 사용해서 데이터 셋의 레코드를 읽었을 때, 파일 구조

체의 cur_reclen 필드를 조사해서 읽은 레코드의 길이를 얻을 수 있다. 이 때 얻은 레코드의 길이는 tcfh_read()

API의 buf 파라미터로 지정된 버퍼에 복사된 레코드 데이터의 길이, 즉, RDW를 제외한 레코드의 데이터

부분의 길이이다.

● 프로토타입

tcfh_read(tcfh_file_t *file, char *key, int keylen, char *buf, int buflen,

int flags);

● 파라미터

설명파라미터

처리하려고 하는 데이터 셋에 대한 정보를 담은 파일 구조체이다. (IN/OUT)file

Appendix C. 데이터 셋 I/O API 79

Page 94: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명파라미터

인덱스 데이터 셋인 경우 키 값이다. (IN/OUT)key

인덱스 데이터 셋인 경우 키 길이이다. (IN)keylen

레코드 데이터를 담기 위한 버퍼이다. (OUT)buf

레코드 데이터 버퍼 크기이다. (IN)buflen

데이터 셋 READ 옵션이다. (IN)flags

- DEFAULT/NEXT

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

● 주의

READ 명령의 주의사항은 다음과 같다.

– 데이터 셋을 INPUT 또는 INOUT 모드로 열어야만 READ 명령을 수행할 수 있다.

– 명령을 수행한 후 파일구조체의 file_status로 파일의 상태를 조사할 수 있다.

– RELATIVE 데이터 셋인 경우 RRN은 파일구조체의 relative_key 필드를 사용한다.

– 읽은 레코드 데이터의 길이는 파일 구조체의 cur_reclen 필드에서 구한다.

tcfh_write()

데이터 셋에 새로운 레코드를 기록한다. 순차 데이터 셋의 경우에는 데이터 셋의 마지막에 레코드를 기록

하고, RELATIVE 데이터 셋의 경우에는 파일 구조체의 relative_key 필드에 지정된 상대 레코드 번호 위치

에 레코드를 기록한다. INDEXED 데이터 셋의 경우에는 tcfh_write() API의 key 파라미터에 지정된 키 순

서에 맞게 레코드가 저장된다.

가변 길이 레코드 데이터 셋의 경우, WRITE 명령을 사용해서 데이터 셋의 레코드를 기록할 때, 기록하려

는 레코드의 길이는 tcfh_write() API의 buflen 파라미터에 지정한다. 이 때, 지정하는 레코드의 길이는

tcfh_write() API의 buf 파라미터로 지정된 버퍼에 담기 레코드 데이터의 길이, 즉, RDW를 제외한 레코드

의 데이터 부분의 길이를 지정한다.

● 프로토타입

tcfh_write(tcfh_file_t *file, char *key, int keylen, char *buf, int buflen,

int flags);

80 OpenFrame 데이터 셋 안내서

Page 95: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 파라미터

설명파라미터

처리하려고 하는 데이터 셋에 대한 정보를 담은 파일 구조체이다. (IN/OUT)file

인덱스 데이터 셋인 경우 키 값이다. (IN/OUT)key

인덱스 데이터 셋인 경우 키 길이이다. (IN)keylen

레코드 데이터를 담고 있는 버퍼이다. (OUT)buf

레코드 데이터의 길이이다. (IN)buflen

데이터 셋 WRITE 옵션이다. (IN)flags

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

● 주의

WRITE 명령의 주의사항은 다음과 같다.

– OUTPUT, INOUT 또는 EXTEND 모드로 열어야만 WRITE 명령을 사용할 수 있다.

– 명령을 수행한 후 파일구조체의 file_status로 파일의 상태를 조사할 수 있다.

– RELATIVE 데이터 셋인 경우 RRN은 파일구조체의 relative_key 필드를 사용한다.

tcfh_rewrite()

데이터 셋에 있는 기존 레코드의 내용을 변경한다. RELATIVE 데이터 셋의 경우에는 파일 구조체의 rela

tive_key 필드에 지정된 상대 레코드 번호 위치에 있는 레코드를 변경한다. INDEXED 데이터 셋의 경우에

는 tcfh_rewrite() API의 key 파라미터에 지정된 키 순서에 맞는 레코드가 변경된다.

가변 길이 레코드 데이터 셋의 경우, REWRITE 명령을 사용해서 데이터 셋의 레코드를 변경할 때, 변경하

려는 레코드의 길이는 tcfh_rewrite() API의 buflen 파라미터에 지정한다. 이 때, 지정하는 레코드의 길이는

tcfh_rewrite() API의 buf 파라미터로 지정된 버퍼에 담긴 레코드 데이터의 길이, 즉, RDW를 제외한 레코

드의 데이터 부분의 길이를 지정한다.

● 프로토타입:

tcfh_rewrite(tcfh_file_t *file, char *key, int keylen, char *buf, int buflen,

int flags);

● 파라미터

Appendix C. 데이터 셋 I/O API 81

Page 96: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명파라미터

처리하려고 하는 데이터 셋에 대한 정보를 담은 파일 구조체이다. (IN/OUT)file

인덱스 데이터 셋인 경우 키 값이다. (IN)key

인덱스 데이터 셋인 경우 키 길이이다. (IN)keylen

레코드 데이터를 담고 있는 버퍼이다. (IN)buf

레코드 데이터의 길이이다. (IN)buflen

데이터 셋 REWRITE 옵션이다. (IN)flags

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

● 주의

REWRITE 명령의 주의사항은 다음과 같다.

– 데이터 셋을 INOUT 모드로 열어야만 REWRITE 명령을 사용할 수 있다.

– 순차 액세스인 경우 REWRITE 전에 READ로 변경할 레코드를 읽어야 한다.

– 명령을 수행한 후 파일구조체의 file_status로 파일의 상태를 조사할 수 있다.

– RELATIVE 데이터 셋인 경우 RRN은 파일구조체의 relative_key 필드를 사용한다.

tcfh_delete()

RELATIVE 데이터 셋이나 INDEXED 데이터 셋의 경우 데이터 셋에 있는 레코드를 삭제한다. RELATIVE

데이터 셋의 경우에는 파일 구조체의 relative_key 필드에 지정된 상대 레코드 번호 위치에 있는 레코드를

삭제한다. INDEXED 데이터 셋의 경우에는 tcfh_delete() API의 key 파라미터에 지정된 키 순서에 맞는 레

코드가 삭제된다.

● 프로토타입

int tcfh_delete(tcfh_file_t *file, char *key, int keylen, int flags);

● 파라미터

설명파라미터

처리하려고 하는 데이터 셋에 대한 정보를 담은 파일 구조체이다. (IN/OUT)file

인덱스 데이터 셋인 경우 키 값이다. (IN)key

82 OpenFrame 데이터 셋 안내서

Page 97: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명파라미터

인덱스 데이터 셋인 경우 키 길이이다. (IN)keylen

데이터 셋 DELETE 옵션이다. (IN)flags

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러코드를 반환한다.

● 주의

DELETE 명령의 주의사항은 다음과 같다.

– 데이터 셋을 INOUT 모드로 열어야만 DELETE 명령을 사용할 수 있다.

– 순차 액세스인 경우 DELETE 전에 READ로 삭제할 레코드를 읽어야 한다.

– 명령을 수행한 후 파일구조체의 file_status로 파일의 상태를 조사할 수 있다.

– RELATIVE 데이터 셋인 경우 RRN은 파일구조체의 relative_key 필드를 사용한다.

C.3. File Status Code데이터 셋에 대한 읽기/쓰기를 수행한 후, 데이터 셋에 대한 상태를 확인하기 위해서는 데이터 셋에 대한

정보를 담고 있는 파일 구조체의 file_status 필드를 조사한다. file_status 필드에는 데이터 셋에 대한 상태

코드를 담고 있다.

다음은 데이터 셋에 대한 상태 코드에 대한 설명이다.

설명코드

작업을 성공적으로 수행했다.00

인덱스 파일인 경우, 중복 키가 허용된 데이터 셋에 대해 중복 키가 발생했다.02

다음 레코드가 없다. (즉, 파일을 끝까지 읽었다)10

인덱스 파일이나 상대 파일의 경우 중복 키 오류가 발생했다.22

키에 해당하는 레코드를 찾을 수 없다.23

할당되지 않은 데이터 셋에 대해 OPEN 하려고 시도했다.35

지정된 OPEN 모드가 지원되지 않는다.37

이미 LOCK으로 닫혀진 파일에 대해 OPEN을 시도했다.38

데이터 셋의 속성 지정이 올바르지 않다.39

이미 열린 파일에 대해 OPEN을 시도했다.41

Appendix C. 데이터 셋 I/O API 83

Page 98: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명코드

이미 닫힌 파일에 대해 CLOSE를 시도했다.42

순차 모드에서 REWRITE나 DELETE 명령 이전 명령이 READ가 아니다.43

REWRITE 하려고 하는 레코드의 길이가 기존 레코드의 길이와 같지 않다.44

INPUT이나 INOUT 모드가 아닌데 READ나 START 명령을 수행했다.47

OUTPUT, INOUT 또는 EXTEND 모드가 아닌데 WRITE 명령을 수행했다.48

INOUT 모드가 아닌데 DELETE나 REWRITE 명령을 수행했다.49

시스템 오류가 발생했다.99

84 OpenFrame 데이터 셋 안내서

Page 99: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

Appendix D. DCB Handling API

OpenFrame에서 제공하는 DCB(Data Control Block) Handling API 인터페이스를 사용하면, JCL에서 할

당된(Allocated) DD(Data Definition)에 대한 속성 정보를 조회하거나 일부 속성을 변경할 수 있다.

DCB Handling API를 사용해서 프로그램을 작성하려면 OpenFrame 바이너리와 함께 배포되는 tdcb.h 헤

더 파일을 사용자 프로그램에 포함해야 하고, 사용자 프로그램을 컴파일 할 때, libtdcb.so 라이브러리를

링크해 주어야 한다.

DCB Handling API의 인터페이스는 다음과 같이 분류할 수 있다.

Allocation Handle

설명API

JCL에서 DD 문으로 할당된 DCB 정보를 DD 명으로 찾는다.tdcb_get_handle()

tdcb_get_handle() API로 찾은 Allocation 정보를 해제한다.tdcb_discard_handle()

tdcb_get_handle() API로 찾은 Allocation 정보를 출력한다.tdcb_print_info()

DCB Information

설명API

DCB 유형과 순차 연결(Concatenation)의 개수를 얻는다.tdcb_get_type()

최대 논리 레코드 길이와 평균 논리 레코드 길이를 얻는다.tdcb_maxlrecl()

Non-VSAM 데이터 셋의 DSORG 속성과 RECFM 속성을 얻는다.tdcb_nvsm_info()

Get Attributes

설명API

데이터 셋의 이름과 멤버 이름을 얻는다.tdcb_get_dsname()

데이터 셋의 볼륨 시리얼 정보를 얻는다.tdcb_get_volser()

데이터 셋의 여러가지 기타 속성을 얻는다.tdcb_get_flags()

데이터 셋의 블록 크기와 레코드 길이를 얻는다.tdcb_get_blksize()

데이터 셋의 키 위치와 키 길이 정보를 얻는다.tdcb_get_key_info()

VSAM 데이터 셋의 유형과 AIX 속성을 얻는다.tdcb_get_vsamtype()

Appendix D. DCB Handling API 85

Page 100: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

Set Attributes

설명API

데이터 셋의 논리 레코드 길이를 지정한다.tdcb_set_lrecl()

데이터 셋의 RECFM 속성을 지정한다.tdcb_set_recfm()

데이터 셋의 블록 크기를 지정한다.tdcb_set_blksize()

데이터 셋의 키 길이와 키 위치 정보를 지정한다.tdcb_set_keylen()

D.1. Allocation Handle

tdcb_get_handle()

JCL에서 DD 문으로 할당된 DCB 정보를 DD 명으로 찾는다. tdcb_get_handle() API를 수행하면, JCL에

의해 Shared Memory에 구성된 DCB 정보의 일부를 Local Memory 영역에 재구성해서 이후의 Allocation

정보에 대한 접근을 용이하게 해준다.

성공적으로 Allocation 정보를 찾은 경우에는 음수가 아닌 Allocation Handle을 반환하고, 반환된 Allocation

Handle은 이후의 DCB 정보 조회 함수나 속성을 변경하는 함수 등에서 사용된다.

● 프로토타입

int tdcb_get_handle(char *ddname);

● 파라미터

설명파라미터

얻으려고 하는 Allocation 정보의 DD명이다. (IN)ddname

● 반환 값

성공적으로 Allocation 정보를 찾은 경우 음수가 아닌 Allocation Handle을 반환하고, 에러가 발생한 경

우 에러 메시지와 함께 -1 값이 반환된다.

tdcb_discard_handle()

tdcb_get_handle() API로 찾은 Allocation 정보를 해제한다. 즉, Local Memory 영역에 구성된 DCB 정보가

해제된다. 따라서, 동일한 DD의 DCB 정보를 다시 이용하려면 tdcb_get_handle() API를 다시 호출해야 한

다.

86 OpenFrame 데이터 셋 안내서

Page 101: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

tdcb_get_handle() API를 호출해서 얻은 Allocation 정보를 tdcb_discard_handle() API를 이용해서 반드시

해제할 필요는 없지만, 동일한 DD에 대해 tdcb_get_handle() API를 반복적으로 호출하면, 해당 DD 정보

가 이미 Local Memory 영역에 구성되어 있다는 경고 메시지가 발생한다.

C 모듈에서 tdcb_discard_handle() API로 Allocation 정보를 해제하지 않은 DD에 대해, COBOL 모듈에서

OPEN 문이 수행되어도, 내부적으로 tdcb_get_handle() API와 유사한 API가 호출되어 동일한 경고 메시

지가 발생한다.

● 프로토타입

int tdcb_discard_handle(int handle);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

tdcb_print_info()

tdcb_get_handle() API로 찾은 Allocation 정보를 출력한다.

출력되는 Allocation 정보는 다음과 같은 정보를 포함한다.

DD명, JOB명, 할당 날짜, 할당 시간, 순차 연결 개수

+ [순번] 슬롯 번호, DCB 유형, DCB 이름, DISPOSITION

● 프로토타입

int tdcb_print_info(int handle);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

● 반환 값

정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

Appendix D. DCB Handling API 87

Page 102: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

D.2. DCB Information

tdcb_get_type()

tdcb_get_handle() API를 수행해서 얻은 Allocation 정보에서 DCB 유형과 순차 연결(Concatenation)의 개

수를 얻는다.

DCB 유형에는 다음과 같은 MACRO가 tdcb.h 헤더 파일에 정의되어 있다.

#define TDCB_DCB_TYPE_NONE 0x00 /* Unknown */

#define TDCB_DCB_TYPE_NVSM 0x01 /* Non-VSAM */

#define TDCB_DCB_TYPE_TSAM 0x02 /* VSAM */

#define TDCB_DCB_TYPE_ISAM 0x03 /* ISAM */

OpenFrame 시스템에서는 2개 이상의 Non-VSAM 데이터 셋을 붙여서 마치 하나의 데이터 셋처럼 연속적

으로 검색할 수 있는 방법을 제공한다. 이것을 순차 연결(Sequential Concatenation)이라고 말한다. 순차

연결의 개수는 몇 개의 데이터 셋이 연결되어 있는지 그 개수를 의미한다.

OpenFrame 시스템에서 VSAM 데이터 셋은 순차 연결이 지원되지 않는다. DCB 유형이 TSAM인 경우

count 파라미터에는 순차 연결 개수가 아니라 베이스 클러스터(Base Cluster)와 베이스 클러스터에 연결

되어 있는 보조 인덱스(Alternate Index)의 총 개수가 구해진다.

● 프로토타입

int tdcb_get_type(int handle, int *dcb_type, int *count);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

주어진 Allocation 정보의 DCB 유형을 담을 버퍼이다. (OUT)dcb_type

순차 연결 개수 혹은 베이스 클러스터와 보조 인덱스의 총 개수를 담을 버퍼

이다. (OUT)

count

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

tdcb_maxlrecl()

tdcb_get_handle() API를 수행해서 얻은 Allocation 정보에서 최대 논리 레코드 길이와 평균 논리 레코드

길이를 얻는다.

88 OpenFrame 데이터 셋 안내서

Page 103: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

순차 연결이 되어 있지 않은 Non-VSAM 데이터 셋의 경우, 혹은 고정 길이 VSAM 데이터 셋의 경우에는

최대 레코드 길이와 평균 레코드 길이의 값은 동일하다. 하지만, 순차 연결이 되어 있는 Non-VSAM 데이

터 셋의 경우이거나 가변 길이 VSAM 데이터 셋의 경우에는 최대 레코드 길이와 평균 레코드 길이가 다를

수 있다.

가변 길이 Non-VSAM 데이터 셋의 경우, 레코드 길이는 JCL에서 해당 데이터 셋을 할당할 때 지정된

LRECL 값이 전달된다. 즉, RDW를 포함한 논리 레코드 길이가 얻어진다.

● 프로토타입

int tdcb_maxlrecl(int handle, int *maxlrecl, int *avglrecl);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

주어진 Allocation 정보의 최대 논리 레코드 길이를 담을 버퍼이다. (OUT)maxlrecl

주어진 Allocation 정보의 평균 논리 레코드 길이를 담을 버퍼이다. (OUT)avglrecl

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

tdcb_nvsm_info()

tdcb_get_handle() API를 수행해서 얻은 Allocation 정보에서 Non-VSAM 데이터 셋의 DSORG 속성과

RECFM 속성을 얻는다.

Non-VSAM 데이터 셋의 DSORG 속성은 데이터 셋의 구조를 지정하고, 다음과 같은 종류의 데이터 셋 구

조를 나타낼 수 있다.

설명DSORG

SAM 데이터 셋이다.PS(Physical Sequential)

ISAM 데이터 셋이다.IS(Indexed Sequential)

PDS 혹은 PDSE이다.PO(Partitioned)

DAM 데이터 셋이다.DA(Direct)

Non-VSAM 데이터 셋의 RECFM 속성은 레코드의 특징을 나타낸다. RECFM 속성을 지정하는 각각의 문

자는 다음과 같은 의미를 지니고 있다.

설명RECFM

고정 길이 레코드이다.F

Appendix D. DCB Handling API 89

Page 104: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명RECFM

가변 길이 레코드이다.V

라인 순차 레코드이다.L

불확정 레코드 포맷이다.U

블록 단위 I/O 지원이다.B

ANSI 콘트롤 문자를 포함한다.A

즉, 고정 길이 레코드에 블록 단위 I/O를 지원하는 데이터 셋의 RECFM 속성은 RECFM=FB와 같은 형식

으로 지정되고, 가변 길이 레코드에 ANSI 콘트롤 문자가 포함된 데이터 셋의 RECFM 속성은 RECFM=VA

와 같은 형식으로 지정된다.

순차 연결이 되어 있는 Non-VSAM 데이터 셋의 경우, 첫 번째 데이터 셋의 DSORG 속성과 RECFM 속성

이 반환된다. (원칙적으로 Mainframe에서는 기본 속성이 다른 Non-VSAM 데이터 셋의 순차 연결은 금지

되어 있다.)

VSAM 데이터 셋의 경우에는 고정 길이인지 가변 길이인지의 구분에 따라, DSORG=PS, RECFM=FB 혹

은 DSORG=PS, RECFM=VB 값이 반환된다.

Allocation 정보에서 DSORG 속성을 얻기 위해서는 최소 8 Byte 이상의 문자열 버퍼 포인터를 dsorg 파라

미터에 지정해 주어야 하고, RECFM 속성을 얻기 위해서는 최소 8 Byte 이상의 문자열 버퍼 포인터를

recfm 파라미터에 지정해 주어야 한다. 사용자 문자열 버퍼가 지정된 경우 DSORG 속성과 RECFM 속성

이 NULL 종료 문자와 함께 사용자 버퍼에 복사된다.

● 프로토타입

int tdcb_nvsm_info(int handle, char *dsorg, char *recfm);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

주어진 Allocation 정보의 DSORG 속성을 담을 버퍼이다. (OUT)dsorg

주어진 Allocation 정보의 RECFM 속성을 담을 버퍼이다. (OUT)recfm

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

90 OpenFrame 데이터 셋 안내서

Page 105: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

D.3. Get Attributes

tdcb_get_dsname()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 데이터 셋 이름과 멤버 이름을

얻는다.

DCB 컴포넌트란 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터 셋 하나를 의미하

거나, VSAM Allocation 정보에서의 베이스 클러스터 혹은 보조 인덱스 하나를 의미한다.

할당된 데이터 셋 이름을 얻기 위해서는 최소 45 Byte 이상의 문자열 버퍼 포인터를 dsname 파라미터에

지정해 주어야 한다. (NULL 종료 문자와 함께 사용자 버퍼에 복사됨)

할당된 데이터 셋이 PDS 혹은 PDSE 데이터 셋의 멤버일 때, 멤버 이름을 얻을 수 있으며, 최소 9 Byte 이

상의 문자열 버퍼 포인터를 member 파라미터에 지정해 주어야 한다. (NULL 종료 문자와 함께 사용자 버

퍼에 복사됨)

● 프로토타입

int tdcb_get_dsname(int handle, int index, char *dsname, char *member);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

순차 연결 순번 혹은 베이스 클러스터나 보조 인덱스 지정 번호이다. (IN)index

해당 DCB 컴포넌트의 데이터 셋 이름을 담을 버퍼이다. (OUT)dsname

해당 DCB 컴포넌트의 멤버 이름을 담을 버퍼이다. (OUT)member

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

tdcb_get_volser()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 볼륨 시리얼 정보를 얻는다.

DCB 컴포넌트란 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터 셋 하나를 의미하

거나, VSAM Allocation 정보에서의 베이스 클러스터 혹은 보조 인덱스 하나를 의미한다.

할당된 DCB 컴포넌트의 볼륨 시리얼 정보를 얻기 위해서는 최소 9 Byte 이상의 문자열 버퍼 포인터를

volser 파라미터에 지정해 주어야 한다. (NULL 종료 문자와 함께 사용자 버퍼에 복사됨)

Appendix D. DCB Handling API 91

Page 106: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 프로토타입

int tdcb_get_volser(int handle, int index, char *volser);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

순차 연결 순번 혹은 베이스 클러스터나 보조 인덱스 지정 번호이다. (IN)index

해당 DCB 컴포넌트의 볼륨 시리얼 정보를 담을 버퍼이다. (OUT)volser

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

tdcb_get_flags()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 여러 가지 기타 속성을 얻는다.

DCB 컴포넌트란 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터 셋 하나를 의미하

거나, VSAM Allocation 정보에서의 베이스 클러스터 혹은 보조 인덱스 하나를 의미한다.

DCB 컴포넌트의 여러 가지 기타 속성이란 tdcb.h 헤더 파일에 정의된 다음과 같은 매크로를 의미한다.

#define TDCB_LRECL_NOT_SET 0x01

#define TDCB_RECFM_NOT_SET 0x04

#define TDCB_BLKSIZE_NOT_SET 0x08

#define TDCB_KEYLEN_NOT_SET 0x40

#define TDCB_IS_TAPE_DATASET 0x10

#define TDCB_IS_OPEN_INDICATOR 0x20

각각의 매크로가 의미하는 바는 다음과 같다.

설명매크로

카탈로그나 JCL에서 데이터 셋의 논리 레코드 길이가 지정되지 않

았다.

TDCB_LRECL_NOT_SET

카탈로그나 JCL에서 데이터 셋의 RECFM 속성이 지정되지 않았다.TDCB_RECFM_NOT_SET

카탈로그나 JCL에서 데이터 셋의 블록 크기가 지정되지 않았다.TDCB_BLKSIZE_NOT_SET

카탈로그나 JCL에서 데이터 셋의 키 길이가 지정되지 않았다.TDCB_KEYLEN_NOT_SET

테이프 볼륨 디바이스에 할당된 데이터 셋이다.TDCB_IS_TAPE_DATASET

애플리케이션에서 아직 OPEN API가 호출되지 않았다.TDCB_IS_OPEN_INDICATOR

92 OpenFrame 데이터 셋 안내서

Page 107: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 프로토타입

tdcb_get_flags(int handle, int index, int *flags);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

순차 연결 순번 혹은 베이스 클러스터나 보조 인덱스 지정 번호이다. (IN)index

해당 DCB 컴포넌트의 여러 가지 기타 속성 정보를 담을 버퍼이다. (OUT)flags

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

tdcb_get_blksize()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 블록 크기와 레코드 길이를 얻

는다.

DCB 컴포넌트란 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터 셋 하나를 의미하

거나, VSAM Allocation 정보에서의 베이스 클러스터 혹은 보조 인덱스 하나를 의미한다.

가변 길이 Non-VSAM 데이터 셋인 경우, 레코드 길이는 JCL에서 해당 데이터 셋을 할당할 때 지정된

LRECL 값이 전달된다. 즉, RDW를 포함한 논리 레코드 길이가 얻어진다.

할당된 DCB 컴포넌트의 레코드 길이 정보가 굳이 필요없는 경우에는 reclen 파라미터에 NULL을 지정한

다.

● 프로토타입

int tdcb_get_blksize(int handle, int index, int *blksize, int *reclen);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

순차 연결 순번 혹은 베이스 클러스터나 보조 인덱스 지정 번호이다. (IN)index

해당 DCB 컴포넌트의 블록 크기를 담을 버퍼이다. (OUT)blksize

DCB 컴포넌트의 레코드 길이를 담을 버퍼이다. (OUT)reclen

Appendix D. DCB Handling API 93

Page 108: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

tdcb_get_key_info()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 키 위치와 키 길이 정보를 얻는

다.

DCB 컴포넌트란 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터 셋 하나를 의미하

거나, VSAM Allocation 정보에서의 베이스 클러스터 혹은 보조 인덱스 하나를 의미한다.

할당된 DCB 컴포넌트의 키 정보가 없는 경우에는 (예를 들어 할당된 데이터 셋이 Non-VSAM 데이터 셋

이고 DSORG가 PS이거나 PO인 경우) 키 위치와 키 길이 정보가 모두 0값으로 반환된다.

● 프로토타입

int tdcb_get_key_info(int handle, int index, int *keypos, int *keylen);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

순차 연결 순번 혹은 베이스 클러스터나 보조 인덱스 지정 번호이다. (IN)index

해당 DCB 컴포넌트의 키 위치를 담을 버퍼이다. (OUT)keypos

해당 DCB 컴포넌트의 키 길이를 담을 버퍼이다. (OUT)keylen

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

tdcb_get_vsamtype()

tdcb_get_handle() API로 찾은 Allocation 정보에서 VSAM DCB 컴포넌트의 VSAM 데이터 셋 유형과 AIX

속성을 얻는다.

DCB 컴포넌트란 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터 셋 하나를 의미하

거나, VSAM Allocation 정보에서의 베이스 클러스터 혹은 보조 인덱스 하나를 의미한다.

VSAM 데이터 셋 유형에는 다음과 같은 MACRO가 tdcb.h 헤더 파일에 정의되어 있다.

94 OpenFrame 데이터 셋 안내서

Page 109: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

#define TDCB_VSAM_TYPE_ESDS 0x01 /* ESDS */

#define TDCB_VSAM_TYPE_KSDS 0x02 /* KSDS */

#define TDCB_VSAM_TYPE_RRDS 0x04 /* RRDS */

#define TDCB_VSAM_TYPE_VRDS 0x05 /* VRDS */

AIX 속성이란 tdcb.h 헤더 파일에 정의된 다음과 같은 매크로를 의미한다.

#define TDCB_RGATTR_EAIX 0x01

#define TDCB_RGATTR_KAIX 0x02

#define TDCB_RGATTR_UPGRADE 0x04

위의 각 매크로가 의미하는 바는 다음과 같다.

설명매크로

해당 VSAM DCB 컴포넌트는 ESDS에 대한 보조 인덱스이다.TDCB_RGATTR_EAIX

해당 VSAM DCB 컴포넌트는 KSDS에 대한 보조 인덱스이다.TDCB_RGATTR_KAIX

해당 보조 인덱스 컴포넌트는 UPGRADE 속성을 가지고 있다.TDCB_RGATTR_UPGRADE

● 프로토타입

int tdcb_get_vsamtype(int handle, int index, int *vsamtype, int *rgattr);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

순차 연결 순번 혹은 베이스 클러스터나 보조 인덱스 지정 번호이다. (IN)index

해당 VSAM DCB 컴포넌트의 VSAM 데이터 셋 유형을 담을 버퍼이다. (OUT)vsamtype

해당 VSAM DCB 컴포넌트의 AIX 속성을 담을 버퍼이다. (OUT)rgattr

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

D.4. Set Attributes

tdcb_set_lrecl()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 논리 레코드 길이를 지정한다.

Appendix D. DCB Handling API 95

Page 110: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

여기서, DCB 컴포넌트란 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터 셋 하나

를 의미한다.

tdcb_set_lrecl() API로 논리 레코드 길이를 지정하기 전에, tdcb_get_flags() API를 사용하여 해당 DCB 컴

포넌트의 논리 레코드 길이가 카탈로그나 JCL에서 이미 지정되지 않았는지를 확인하는 것이 좋다.

가변 길이 Non-VSAM 데이터 셋인 경우, 레코드 길이는 JCL에서 해당 데이터 셋을 할당할 때와 동일하게,

RDW를 포함한 논리 레코드 길이를 지정한다.

● 프로토타입

int tdcb_set_lrecl(int handle, int index, int lrecl);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

순차 연결된 Non-VSAM 데이터 셋의 순번 혹은 0이다. (IN)index

해당 DCB 컴포넌트에 지정할 논리 레코드 길이이다. (IN)lrecl

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

tdcb_set_recfm()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 RECFM 속성을 지정한다.

여기서, DCB 컴포넌트란 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터 셋 하나

를 의미한다.

tdcb_set_recfm() API로 RECFM 속성을 지정하기 전에, tdcb_get_flags() API를 사용하여 해당 DCB 컴포

넌트의 RECFM 속성이 카탈로그나 JCL에서 이미 지정되지 않았는지를 확인하는 것이 좋다.

● 프로토타입

int tdcb_set_recfm(int handle, int index, char *recfm);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

순차 연결된 Non-VSAM 데이터 셋의 순번 혹은 0이다. (IN)index

96 OpenFrame 데이터 셋 안내서

Page 111: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명파라미터

해당 DCB 컴포넌트에 지정할 RECFM 속성이다. (IN)recfm

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

tdcb_set_blksize()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 블록 크기를 지정한다.

여기서, DCB 컴포넌트란 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터 셋 하나

를 의미한다.

tdcb_set_blksize() API로 블록 크기를 지정하기 전에, tdcb_get_flags() API를 사용하여 해당 DCB 컴포넌

트의 블록 크기가 카탈로그나 JCL에서 이미 지정되지 않았는지를 확인하는 것이 좋다.

● 프로토타입

int tdcb_set_blksize(int handle, int index, int blksize);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

순차 연결된 Non-VSAM 데이터 셋의 순번 혹은 0이다. (IN)index

해당 DCB 컴포넌트에 지정할 블록 크기이다. (IN)blksize

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

tdcb_set_keylen()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 키 길이와 키 위치 정보를 지정

한다.

여기서, DCB 컴포넌트란 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터 셋 하나

를 의미한다.

tdcb_set_keylen() API로 키 길이와 키 위치 정보를 지정하기 전에, tdcb_get_flags() API를 사용하여 해당

DCB 컴포넌트의 키 길이가 카탈로그나 JCL에서 이미 지정되지 않았는지를 확인하는 것이 좋다.

Appendix D. DCB Handling API 97

Page 112: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 프로토타입

int tdcb_set_keylen(int handle, int index, int keylen, int keyoff);

● 파라미터

설명파라미터

tdcb_get_handle() API로 얻은 Allocation Handle이다. (IN)handle

순차 연결된 Non-VSAM 데이터 셋의 순번 혹은 0이다. (IN)index

해당 DCB 컴포넌트에 지정할 키 길이이다. (IN)keylen

해당 DCB 컴포넌트에 지정할 키 위치이다. (IN)keyoff

● 반환 값

정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환된다.

98 OpenFrame 데이터 셋 안내서

Page 113: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

Appendix E. FCD Handling API

OpenFrame과 함께 제공되는 FCD(File Control Description) Handling API 인터페이스를 사용하면, Main

COBOL 애플리케이션 프로그램에서 OPEN된 데이터 셋을 C로 작성된 서브 프로그램에서 읽기/쓰기 등

의 I/O를 수행할 수 있다. 단, Main COBOL 애플리케이션 프로그램이 MF-COBOL 컴파일러로 컴파일 되

어야 한다.

FCD Handling API 라이브러리는 데이터 셋에 대한 정보를 담고 있는 구조체로 FCD를 사용하는데 이 FCD

는 MF-COBOL 컴파일러로 컴파일된 실행 바이너리가 실행되면서 데이터 셋을 OPEN할 때 생성하는 메

모리 구조체이다. 따라서, 본 문서에서 설명하는 Tmax FCD Handling API 라이브러리는 MF-COBOL 컴

파일러로 컴파일된 실행 바이너리에서만 같이 사용할 수 있다.

참고

처음부터 C로 작성된 애플리케이션 프로그램에서 데이터 셋에 대한 I/O를 할 때에는, 본 문서에서

설명하는 FCD Handling API 라이브러리를 사용할 것이 아니라, C File Handler 라이브러리를 사용

할 것을 권장한다.

FCD Handling API를 사용해서 프로그램을 작성하려면 OpenFrame 바이너리와 함께 배포되는 tfcd.h 헤

더 파일을 C로 작성된 서브 프로그램에 포함해야 하고, 해당 서브프로그램을 컴파일 할 때, libtfcd.so 라이

브러리를 링크해야 한다.

Tmax FCD handling API의 인터페이스는 다음과 같이 분류할 수 있다.

File Open Session

설명API

FCD 구조체에 기술된 데이터 셋을 OPEN한다.tfcd_open()

FCD 구조체에 기술된 데이터 셋을 CLOSE한다.tfcd_close()

Record Access

설명API

RELATIVE 데이터 셋 혹은 INDEXED 데이터 셋에서 다음 번에 읽을

레코드 위치로 이동시킨다.

tfcd_start()

순차적으로 데이터 셋의 레코드를 읽거나 키를 지정해서 RANDOM

하게 레코드를 읽는다.

tfcd_read()

데이터 셋에 새로운 레코드를 기록하거나(WRITE) 혹은 기존의 레코

드를 다시 쓴다. (REWRITE)

tfcd_write()

Appendix E. FCD Handling API 99

Page 114: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

설명API

레코드의 맨 앞에 ASA 제어문자를 지정해서, 데이터 셋에 새로운 레

코드를 기록한다.

tfcd_writea()

데이터 셋에 있는 기존의 레코드를 삭제한다. (RELATIVE/INDEXED)tfcd_delete()

Special Operations

설명API

FCD 구조체에 기술된 데이터 셋이 OPEN된 상태인지 확인한다.tfcd_is_file_open()

데이터 셋에 I/O를 수행한 후, 오류가 발생했는지 확인하기 위해 상

태 코드를 가져온다.

tfcd_get_status()

FCD 구조체에 기술된 데이터 셋의 DD명을 가져온다.tfcd_get_file_name()

FCD 구조체에 기술된 데이터 셋의 레코드 길이를 가져온다.tfcd_get_rec_len()

FCD 구조체에 기술된 데이터 셋의 DD 이름을 지정한다.tfcd_set_file_name()

FCD 구조체에 기술된 데이터 셋의 상대 키를 지정한다. (RELATIVE)tfcd_set_relative_key()

FCD 구조체에 기술된 데이터 셋의 KEY ID를 지정한다. (INDEXED)tfcd_set_key_id()

FCD 구조체에 기술된 데이터 셋의 레코드 길이를 지정한다.tfcd_set_rec_len()

E.1. File Open Session

tfcd_open()

FCD 구조체에 기술된 데이터 셋을 OPEN한다. 데이터 셋을 OPEN하는 작업은 JCL에서 DD문으로 할당

된 데이터 셋에 대해 실제 레코드를 읽기/쓰기 등의 I/O를 하기 위해 준비하는 과정이다.

데이터 셋을 OPEN 할 때 지정하는 OPEN MODE로는 다음과 같은 MACRO가 tfcd.h 헤더 파일에 정의되

어 있다.

#define TFCD_OPEN_INPUT 0 /* OPEN INPUT */

#define TFCD_OPEN_OUTPUT 1 /* OPEN OUTPUT */

#define TFCD_OPEN_INOUT 2 /* OPEN I-O */

#define TFCD_OPEN_EXTEND 3 /* OPEN EXTEND */

성공적으로 데이터 셋을 OPEN한 경우에는 tfcd_get_status()로 확인할 수 있는 상태 코드에 00 값이 저장

된다. 단, 이미 OPEN된 데이터 셋에 대해 다시 OPEN을 시도하면 오류가 발생한다.

● 프로토타입

int tfcd_open(void *fcd, int open_mode, int flags);

100 OpenFrame 데이터 셋 안내서

Page 115: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다.

(IN/OUT)

fcd

데이터 셋 OPEN 모드이다. (IN)open_mode

- INPUT / OUTPUT / INOUT / EXTEND

데이터 셋 OPEN할 때 지정할 수 있는 여러 가지 속성이다. (IN)flags

- NO REWIND

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다. 성공적으로 데이터 셋을 OPEN했는지는 상태 코드

값을 확인해야 한다.

tfcd_close()

FCD 구조체에 기술된 데이터 셋을 CLOSE한다. 데이터 셋을 CLOSE하는 작업은 애플리케이션에서 데이

터 셋에 대한 읽기/쓰기 등의 I/O를 수행한 후에, 응용 프로그램과 물리적인 데이터 셋과의 연결을 끊는 과

정이다.

성공적으로 데이터 셋을 CLOSE한 후에는 tfcd_get_status()로 확인할 수 있는 상태 코드에 00 값이 저장

된다. 한 번 CLOSE된 데이터 셋은 tfcd_open() API를 사용해서 다시 OPEN할 수 있다.

● 프로토타입

int tfcd_close(void *fcd, int flags);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다.

(IN/OUT)

fcd

데이터 셋을 CLOSE할 때 지정할 수 있는 여러 가지 속성이다. (IN)flags

- WITH LOCK

Appendix E. FCD Handling API 101

Page 116: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다. 성공적으로 데이터 셋을 CLOSE했는지는 상태 코드

값을 확인해야 한다.

E.2. Record Access

tfcd_start()

RELATIVE 데이터 셋 혹은 INDEXED 데이터 셋에서 다음 번에 읽을 레코드 위치로 이동시킨다. 이동시킬

레코드의 위치는 RELATIVE 데이터 셋의 경우에는 tfcd_set_relative_key() API를 호출해서 상대 레코드

번호를 지정해 주거나, INDEXED 데이터 셋의 경우에는 레코드 포인터 안에 있는 키 위치에 키 값을 미리

저장해 준다.

START API를 실행시킬 때, 키 값과 동일한 레코드를 찾거나 키 값보다 크거나 같은 레코드를 찾도록 지

정할 수 있는데, 다음과 같은 매크로가 tfcd.h 헤더 파일에 정의되어 있다.

#define TFCD_START_DEFAULT 0 /* START */

#define TFCD_START_EQUAL 1 /* START (equal to full length) */

#define TFCD_START_GTEQ 2 /* START (not less than) */

VSAM 데이터 셋의 경우, 해당 데이터 셋의 기본 RECORD KEY 이외에 ALTERNATE RECORD KEY를

추가 정의할 수 있는데, ALTERNATE RECORD KEY를 이용해서 START API를 실행하고 싶은 경우,

tfcd_set_key_id() API를 호출해서 다음 번 START API에서 사용할 KEY ID를 지정해 주도록 한다. KEY

ID는 Main COBOL 애플리케이션 프로그램의 SELECT 문에서 ALTERNATE RECORD KEY를 지정한 순

서대로 번호가 부여된다.

● 프로토타입

int tfcd_start(void *fcd, char *record, int flags);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다.

(IN/OUT)

fcd

이동시킬 레코드의 위치가 저장된 레코드 버퍼 포인터이다. (IN/OUT)record

데이터 셋을 START할 때 지정할 수 있는 여러 가지 속성이다. (IN)flags

- EQUAL / GTEQ

102 OpenFrame 데이터 셋 안내서

Page 117: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다. 성공적으로 데이터 셋을 START 했는지는 상태 코드

값을 확인해야 한다.

tfcd_read()

순차적으로 데이터 셋의 레코드를 읽거나 키를 지정해서 RANDOM하게 레코드를 읽는다. RANDOM하게

레코드를 읽는 때는 RELATIVE 데이터 셋인 경우에는 tfcd_set_relative_key() API를 호출해서 상대 레코

드 번호를 지정해 주거나, INDEXED 데이터 셋의 경우에는 레코드 포인터 안에 있는 키 위치에 키 값을 미

리 저장해 준다.

VSAM 데이터 셋의 경우, 해당 데이터 셋의 기본 RECORD KEY 이외에 ALTERNATE RECORD KEY를

추가 정의할 수 있는데, ALTERNATE RECORD KEY를 이용해서 RANDOM하게 레코드를 읽을 경우,

tfcd_set_key_id() API를 호출해서 다음 번 READ API에서 사용할 KEY ID를 지정해 주도록 한다. KEY ID

는 Main COBOL 애플리케이션 프로그램의 SELECT 문에서 ALTERNATE RECORD KEY를 지정한 순서

대로 번호가 부여된다.

READ API를 실행시킬 때, 순차적으로 레코드를 읽을 것인지 RANDOM하게 레코드를 읽을 것인지 지정

하는 매크로가 tfcd.h 헤더 파일에 다음과 같이 정의되어 있다.

#define TFCD_READ_DEFAULT 0 /* READ */

#define TFCD_READ_NEXT 1 /* READ (sequential) */

가변 길이 레코드 데이터 셋의 경우, READ API를 사용해서 데이터 셋의 레코드를 읽었을 때,

tfcd_get_rec_len() API를 호출해서 읽은 레코드 길이를 얻을 수 있다. 이때 얻은 레코드의 길이는 RDW를

제외한 레코드의 데이터 부분의 길이이다.

● 프로토타입

int tfcd_read(void *fcd, char *record, int flags);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다.

(IN/OUT)

fcd

데이터 셋에서 읽어 들인 레코드가 저장될 레코드 버퍼 포인터이다. (IN/OUT)record

데이터 셋을 READ할 때 지정할 수 있는 여러 가지 속성이다. (IN)flags

- DEFAULT/NEXT

Appendix E. FCD Handling API 103

Page 118: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다. 성공적으로 데이터 셋을 READ했는지는 상태 코드값

을 확인해야 한다.

tfcd_write()

데이터 셋에 새로운 레코드를 기록하거나(WRITE) 혹은 기존의 레코드를 다시 쓴다. (REWRITE)

순차 데이터 셋의 경우에는 데이터 셋의 마지막에 레코드를 기록하고, RELATIVE 데이터 셋의 경우에는

tfcd_set_relative_key() API를 호출해서 저장될 상대 레코드 번호를 지정해 준다. INDEXED 데이터 셋의

경우에는 레코드 포인터 안에 있는 키 순서에 맞게 레코드가 저장된다.

WRITE API를 실행시킬 때, 새로운 레코드를 기록하는 것인지, 기존의 레코드 내용을 갱신하는 것인지를

지정하는 매크로가 tfcd.h 헤더 파일에 다음과 같이 정의되어 있다.

#define TFCD_WRITE_DEFAULT 0 /* WRITE */

#define TFCD_WRITE_REWRITE 1 /* REWRITE */

가변 길이 레코드 데이터 셋의 경우, WRITE API를 사용해서 데이터 셋의 레코드를 기록하기 전에, 기록

하려는 레코드의 길이를 tfcd_set_rec_len() API를 호출해서 지정할 수 있다. 이때 레코드의 길이는 RDW

를 제외한 레코드의 데이터 부분의 길이를 지정한다.

● 프로토타입

int tfcd_write(void *fcd, char *record, int flags);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다.

(IN/OUT)

fcd

데이터 셋에 기록할 레코드가 저장되어 있는 레코드 버퍼 포인터이다. (IN)record

데이터 셋을 WRITE할 때 지정할 수 있는 여러 가지 속성이다. (IN)flags

- WRITE/REWRITE

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다. 성공적으로 데이터 셋을 WRITE했는지는 상태 코드

값을 확인해야 한다.

104 OpenFrame 데이터 셋 안내서

Page 119: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

tfcd_writea()

레코드의 맨 앞에 ASA 제어문자를 지정해서, 데이터 셋에 새로운 레코드를 기록한다. WRITEA API를 실

행할 때, 지정하려고 하는 ASA 제어문자의 종류를 지정하는 매크로가 tfcd.h 헤더 파일에 다음과 같이 정

의되어 있다.

#define TFCD_WRITEA_AFTER 0 /* AFTER */

#define TFCD_WRITEA_BEFORE 1 /* BEFORE */

#define TFCD_WRITEA_TAB 2 /* TAB */

#define TFCD_WRITEA_PAGE 4 /* PAGE */

#define TFCD_WRITEA_MNEMONIC 8 /* MNEMONIC */

● 프로토타입

int tfcd_writea(void *fcd, char *record, int lcount, int flags);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다.

(IN/OUT)

fcd

데이터 셋에 기록할 레코드가 저장되어 있는 레코드 버퍼 포인터이다. (IN)record

레코드를 출력하기 전에 이동시킬 라인 수이다. (IN)lcount

데이터 셋을 WRITE할 때 지정할 수 있는 여러 가지 속성이다. (IN)flags

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다. 성공적으로 데이터 셋을 WRITE했는지는 상태 코드

값을 확인해야 한다.

tfcd_delete()

RELATIVE 데이터 셋이나 INDEXED 데이터 셋의 경우 방금 전에 읽은 레코드를 삭제한다.

● 프로토타입

int tfcd_delete(void *fcd, char *record, int flags);

Appendix E. FCD Handling API 105

Page 120: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다.

(IN/OUT)

fcd

데이터 셋에서 삭제할 레코드가 저장되어 있는 레코드 버퍼 포인터이다. (IN)record

데이터 셋을 DELETE할 때 지정할 수 있는 여러 가지 속성이다. (IN)flags

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다. 성공적으로 데이터 셋을 DELETE 했는지는 상태 코

드값을 확인해야 한다.

E.3. Special Operations

tfcd_is_file_open()

FCD 구조체에 기술된 데이터 셋이 OPEN된 상태인지 확인한다. Main COBOL 애플리케이션 프로그램에

서 OPEN한 데이터 셋에 대한 DD 이름을 바꾸기 전에 데이터 셋이 OPEN된 상태인지를 확인하기 위해

사용한다.

● 프로토타입

int tfcd_is_file_open(void *fcd);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다. (IN)fcd

● 반환 값

데이터 셋이 OPEN된 상태이면 1 OPEN된 상태가 아니면 0 값이 반환된다.

tfcd_get_status()

데이터 셋에 I/O를 수행한 후, 오류가 발생했는지 확인하기 위해 데이터 셋 상태 코드를 가져온다. 일반적

으로 상태 코드의 값이 스페이스이면 데이터 셋에 대한 I/O 기능이 성공적으로 수행된 것을 의미한다.

106 OpenFrame 데이터 셋 안내서

Page 121: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

데이터 셋 I/O를 수행하다가 심각한 시스템 오류나 OpenFrame 라이브러리 오류가 발생한 경우라면, 오

류 메시지와 함께 프로그램이 종료되지만, END OF FILE 등과 같은 일반적인 데이터 셋 I/O 오류의 경우

에는 프로그램이 종료되지 않고, 적당한 상태 코드 값이 설정된 후에 I/O 함수가 정상 반환된다. 따라서 I/O

함수를 수행한 이후에는 반드시 tfcd_get_status() 함수로 오류가 발생했는지를 확인해야 한다.

데이터 셋 I/O 함수에서 설정될 수 있는 데이터 셋의 상태 코드 값은 MicroFocus Server Express 온라인

매뉴얼을 참고한다. (http://supportline.microfocus.com/Documentation/books/sx40sp2/sx40indx.htm)

● 프로토타입

int tfcd_get_status(void *fcd, char *status);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다. (IN)fcd

데이터 셋의 상태 코드를 담을 버퍼이다. (OUT)status

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다.

tfcd_get_file_name()

FCD 구조체에 기술된 데이터 셋의 DD 이름을 가져온다. 데이터 셋이 OPEN된 데이터 셋이나 CLOSE된

데이터 셋이나 모두에게 사용할 수 있는 API이다.

● 프로토타입

int tfcd_get_file_name(void *fcd, char *file_name);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다. (IN)fcd

데이터 셋의 DD 이름을 담을 버퍼이다. (OUT)file_name

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다.

Appendix E. FCD Handling API 107

Page 122: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

tfcd_get_rec_len()

FCD 구조체에 기술된 데이터 셋의 레코드 길이를 가져온다. 고정 길이 데이터 셋이 처음 OPEN된 시점에

전체 데이터 셋의 고정 레코드 길이를 얻을 때 사용할 수도 있고, 가변 길이 데이터 셋 레코드를 READ API

로 읽은 후에, 읽은 레코드의 길이를 얻을 때에도 사용된다.

가변 길이 레코드 데이터 셋의 경우 레코드의 길이는 RDW를 제외한 레코드의 데이터 부분의 길이이다.

● 프로토타입

int tfcd_get_rec_len(void *fcd, int *reclen);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소

이다. (IN)

fcd

데이터 셋의 레코드 길이를 담을 버퍼이다. (OUT)reclen

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다.

tfcd_set_file_name()

FCD 구조체에 기술된 데이터 셋의 DD 이름을 지정한다. Main COBOL 애플리케이션 프로그램에서 OPEN

했던 데이터 셋의 DD 이름을 바꾸어, 새로운 데이터 셋을 OPEN하기 위해 사용한다. 본 API를 사용하기

전에 OPEN 되어 있는 데이터 셋은 CLOSE API를 사용하여 CLOSE 상태로 변경해야 한다.

● 프로토타입

int tfcd_set_file_name(void *fcd, char *file_name);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다.

(IN/OUT)

fcd

데이터 셋에 지정할 DD 이름이다. (IN)file_name

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다.

108 OpenFrame 데이터 셋 안내서

Page 123: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

tfcd_set_relative_key()

FCD 구조체에 기술된 데이터 셋의 상대 키를 지정한다 (RELATIVE). RELATIVE 데이터 셋의 경우

tfcd_set_relative_key()로 지정한 상태 키 위치에 새로운 레코드가 저장되거나, 저장되어 있던 기존 레코

드가 읽힌다.

● 프로토타입

int tfcd_set_relative_key(void *fcd, int relative_key);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다.

(IN/OUT)

fcd

RELATIVE 데이터 셋의 상태 키이다. (IN)relative_key

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다.

tfcd_set_key_id()

FCD 구조체에 기술된 데이터 셋의 KEY ID를 지정한다. (INDEXED)

ALTERNATE RECORD KEY가 추가 정의되어 있는 데이터 셋에 대해, ALTERNATE RECORD KEY를 이

용해서 RANDOM하게 레코드를 읽을 경우, tfcd_set_key_id() API를 호출해서 다음 번 READ API에서 사

용할 KEY ID를 지정해 주도록 한다.

● 프로토타입

int tfcd_set_key_id(void *fcd, int key_id);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소이다.

(IN/OUT)

fcd

데이터 셋의 지정하고자 하는 KEY ID이다. (IN)key_id

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다.

Appendix E. FCD Handling API 109

Page 124: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

tfcd_set_rec_len()

FCD 구조체에 기술된 데이터 셋의 레코드 길이를 지정한다. 가변 길이 데이터 셋 레코드를 WRITE API를

사용해서 기록하기 전에 기록할 레코드의 길이를 지정할 때 사용한다.

가변 길이 레코드 데이터 셋의 경우 레코드의 길이는 RDW를 제외한 레코드의 데이터 부분의 길이를 지

정한다.

● 프로토타입

int tfcd_set_rec_len(void *fcd, int reclen);

● 파라미터

설명파라미터

Main COBOL 애플리케이션 프로그램에서 전달된 FCD 구조체 주소

이다. (IN/OUT)

fcd

데이터 셋의 지정하고자 하는 레코드 길이이다. (IN)reclen

● 반환 값

성공적으로 함수가 실행된 경우 0 값이 반환된다.

110 OpenFrame 데이터 셋 안내서

Page 125: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

색인

Aacs.conf 사용법, 51

acs.conf 사용예제, 52

AIX, 28

Alias Entry, 38

Alias 항목, 37

Allocation Group, 38

Alternate Index, 37

amsu_assoc(), 73

amsu_candidate_catalog(), 70

amsu_default_volume(), 66

amsu_delete(), 72

amsu_filename2(), 71

amsu_filepath2(), 71

amsu_info(), 72

amsu_master_catalog(), 69

amsu_search_entries(), 68

amsu_use_catalogs(), 67

amsu_volume_list(), 66

amsu_volume_path(), 67

Association Group, 38

Attribute Group, 38

BBCS, 35

BCS 데이터 셋, 39

BDAM, 1

BPAM, 2

BPVSAMAM, 2

BSAM, 1

CCluster, 25

Component, 25

Control Area, 24

Control Interval, 24

DData Component, 37

DDEFINE GENERATIONDATAGROUP, 6

DEFINE ALTERNATEINDEX, 7

DEFINE CLUSTER, 7

DEFINE NONVSAM, 6

DEFINE PATH, 7

DELETE, 7

ds.conf 사용법, 53

ds.conf 사용예제, 60

EESDS, 2, 25, 26

GGDG, 37

GDG Group, 38

GDS, 37

HHistory Group, 38

Iicfdump, 43

icfload, 44

Index Component, 37

ISAM, 2

Kkeyseq.conf 사용법, 61

keyseq.conf 사용예제, 63

KSDS, 2, 25, 26

LLDS, 3, 26

LISTCAT, 7

Mmascat, 43

색인 111

Page 126: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

NNon-VSAM Data Set, 37

Non-VSAM Group, 38

PPath Entry, 38

PDS의 멤버 처리, 19

Protection Group, 38

QQSAM, 2

RREPRO, 7

ROW, 25

RRDS, 2, 25, 27

SSMS Group, 38

sms.conf 사용법, 48

sms.conf 사용예제, 50

Spanned Records, 24

Splits, 24

Statistics Group, 38

Ttcfh_close(), 77

tcfh_delete(), 82

tcfh_open(), 75

tcfh_read(), 79

tcfh_rewrite(), 81

tcfh_start(), 78

tcfh_write(), 80

tdcb_discard_handle(), 86

tdcb_get_blksize(), 93

tdcb_get_dsname(), 91

tdcb_get_flags(), 92

tdcb_get_handle(), 86

tdcb_get_key_info(), 94

tdcb_get_type(), 88

tdcb_get_volser(), 91

tdcb_get_vsamtype(), 94

tdcb_maxlrecl(), 88

tdcb_nvsm_info(), 89

tdcb_print_info(), 87

tdcb_set_blksize(), 97

tdcb_set_keylen(), 97

tdcb_set_lrecl(), 95

tdcb_set_recfm(), 96

tfcd_close(), 101

tfcd_delete(), 105

tfcd_get_file_name(), 107

tfcd_get_rec_len(), 108

tfcd_get_status(), 106

tfcd_is_file_open(), 106

tfcd_open(), 100

tfcd_read(), 103

tfcd_set_file_name(), 108

tfcd_set_key_id(), 109

tfcd_set_rec_len(), 110

tfcd_set_relative_key(), 109

tfcd_start(), 102

tfcd_write(), 104

tfcd_writea(), 105

TSAM-Tibero, 23

TSR-Oracle, 23

Uunit.conf 사용법, 45

unit.conf 사용예제, 46

User Catalog, 38

Vvoladd, 43

volume.conf 사용법, 47

volume.conf 사용예제, 47

Volumes Group, 38

VRDS, 27

VSAM Cluster, 37

VSAM 데이터 셋 적재, 31

VSAM 데이터 셋 정의, 30

VTOC, 35

VVDS, 35

112 OpenFrame 데이터 셋 안내서

Page 127: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에

VVDS 데이터 셋, 39

VVDS 데이터 셋 정의, 41

가변 길이, 13

가변 길이 레코드 포맷, 14

고정 길이, 13

고정 길이 레코드 포맷, 13

데이터 셋 복사, 31

데이터 셋 삭제, 34

데이터 셋 출력, 34

동적 접근, 10

라인 순차, 13

라인 순차 레코드 포맷, 15

레코드, 25

보조 인덱스, 28

보조 인덱스의 관리, 33

불확정, 13

불확정 레코드 포맷, 15

사용자 카탈로그, 37

사용자 카탈로그 삭제, 42

사용자 카탈로그 정의, 40

선택 제어 문자, 15

순차 접근, 10

스토리지 볼륨, 25

스피어, 29

시스템 데이터 셋, 37

시스템 라이브러리, 37

임의 접근, 10

입력 모드, 10

입출력 모드, 10

접근경로 정의, 33

출력 모드, 10

카탈로그 Alias 정의, 41

카탈로그 항목 리스트, 33

카탈로그 항목 리스팅, 42

클러스터, 25, 29

테이블, 25

테이블 스페이스, 25

확장 모드, 10

색인 113

Page 128: OpenFrame · 2019-04-09 · 레코드 포맷, dcb 구조체, 순차 데이터 셋, 분할 데이터 셋, 세대 데이터 그룹 등 non-vsam 데이터 셋 의 특징과 종류에