tibero tsam 안내서 - tmaxsoft · 안내서 구성 tibero tsam 안내서는 총 4개의 장과...

130
Tibero TSAM 안내서 OpenFrame/Base v5.1 Copyright © 2009 TmaxSoft Co., Ltd. All Rights Reserved.

Upload: others

Post on 25-Jan-2020

41 views

Category:

Documents


0 download

TRANSCRIPT

Tibero

TSAM 안내서

OpenFrame/Base v5.1

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

Copyright Notice

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

대한민국 경기도 성남시 분당구 서현동 263 분당스퀘어(AK프라자) 12층 우)463-824

Restricted Rights Legend

All TmaxSoft Software (Tmax OpenFrame®) and documents are protected by copyright laws and the Protection

Act of Computer Programs, and international convention. TmaxSoft software and documents are made available

under the terms of the TmaxSoft License Agreement and may only be used or copied in accordance with the terms

of this agreement. No part of this document may be transmitted, copied, deployed, or reproduced in any form or

by any means, electronic, mechanical, or optical, without the prior written consent of TmaxSoft Co., Ltd.

이 소프트웨어(Tmax OpenFrame®) 사용설명서의 내용과 프로그램은 저작권법, 컴퓨터프로그램보호법 및 국제

조약에 의해서 보호받고 있습니다. 사용설명서의 내용과 여기에 설명된 프로그램은 TmaxSoft Co., Ltd.와의 사용

권 계약 하에서만 사용이 가능하며, 사용권 계약을 준수하는 경우에만 사용 또는 복제할 수 있습니다. 이 사용설명

서의 전부 또는 일부분을 Tmaxsoft의 사전 서면 동의 없이 전자, 기계, 녹음 등의 수단을 사용하여 전송, 복제, 배

포, 2차적 저작물작성 등의 행위를 하여서는 안 됩니다.

Trademarks

Tmax® and Tmax OpenFrame®are registered trademarks of TmaxSoft Co., Ltd. Other products, titles or services

may be registered trademarks of their respective companies.

Tmax® 와 Tmax OpenFrame®은 TmaxSoft Co., Ltd.의 등록 상표입니다. 기타 모든 제품들과 회사 이름은 각각

해당 소유주의 상표로서 참조용으로만 사용됩니다.

Open Source Software Notice

This product includes open source software developed and/or licensed by "OpenSSL", "RSA Data Security, Inc.",

"Apache Foundation", and "Jean-loup Gailly and Mark Adler". Information about the aforementioned and the related

open source software can be found in the "${INSTALL_PATH}/license/oss_licenses" directory.

본 제품은 “OpenSSL”, “RSA Data Security, Inc.”, “Apache Foundation” 및 “Jean-loup Gailly와 Mark Adler”에 의

해 개발 또는 라이선스된 오픈 소스 소프트웨어를 포함합니다. 관련 상세 정보는 제품의 디렉터리 “${IN

STALL_PATH}/license/oss_licenses”에 기재된 사항을 참고해 주십시오.

안내서 정보

안내서 제목: Tibero TSAM 안내서

발행일: 2009-12-12

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

안내서 버전: v2.1.3

내용 목차

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

제1장 TSAM 소개 ....................................................................................................................... 1

1.1. 데이터 셋과 액세스 메소드 ............................................................................................ 1

1.2. TSAM 기능 .................................................................................................................. 3

1.3. TSAM 구현 .................................................................................................................. 4

1.4. TSAM 관련 모듈 ........................................................................................................... 4

제2장 TSAM 데이터 셋 ............................................................................................................... 5

2.1. ESDS .......................................................................................................................... 5

2.2. KSDS .......................................................................................................................... 6

2.3. RRDS .......................................................................................................................... 8

2.4. VRDS .......................................................................................................................... 9

2.5. 보조 인덱스 ................................................................................................................. 9

2.6. 보조 인덱스 접근경로 ................................................................................................. 10

2.7. 스피어 (Sphere) ......................................................................................................... 10

2.8. TSAM 데이터 셋 요약 및 비교 ..................................................................................... 11

제3장 TSAM 데이터 셋 관리 ...................................................................................................... 13

3.1. mascat ...................................................................................................................... 14

3.2. voladd ....................................................................................................................... 14

3.3. IDCAMS(JSCVSUT) ................................................................................................... 15

3.4. DEFINE CLUSTER ..................................................................................................... 17

3.5. DEFINE ALTERNATEINDEX ....................................................................................... 19

3.6. DEFINE PATH ............................................................................................................ 20

3.7. DEFINE ALIAS ........................................................................................................... 21

3.8. DELETE .................................................................................................................... 22

3.9. REPRO ..................................................................................................................... 23

3.10. BLDINDEX ............................................................................................................... 25

3.11. LISTCAT .................................................................................................................. 26

제4장 TSAM 데이터 셋 처리 ...................................................................................................... 31

4.1. Allocation ................................................................................................................... 32

4.2. File Open/Close ......................................................................................................... 32

4.3. OPEN 모드 ................................................................................................................ 33

4.4. 액세스 모드 ................................................................................................................ 34

4.5. 레코드 액세스 ............................................................................................................ 34

4.6. Browsing .................................................................................................................... 35

4.7. Transaction ................................................................................................................ 36

Appendix A. TSAM API ........................................................................................................... 37

A.1. Connection ................................................................................................................ 39

A.2. Transaction ................................................................................................................ 41

A.3. File Management ....................................................................................................... 44

Tibero iii

A.4. File Open/Close ......................................................................................................... 49

A.5. Record Access .......................................................................................................... 52

A.6. Browsing ................................................................................................................... 60

A.7. Sphere Open/Close .................................................................................................... 66

A.8. Sphere Record Access ............................................................................................... 68

A.9. Sphere Browsing ........................................................................................................ 76

Appendix B. Tibero/TSAM 운영 및 관리 ................................................................................... 85

B.1. Tibero/TSAM 설치 ...................................................................................................... 85

B.1.1. Tibero/TSAM 환경변수 .................................................................................... 85

B.1.2. Tibero/TSAM 설치 디렉터리 구조 ..................................................................... 86

B.1.3. Tibero/TSAM 클라이언트 라이브러리 설치 ........................................................ 87

B.1.4. Tibero/TSAM 초기 파라미터 설정 파일 (tip 파일) ............................................... 88

B.1.5. Tibero/TSAM 라이선스 .................................................................................... 90

B.1.6. tbnet_alias.tbr 설정 .......................................................................................... 90

B.2. Tibero/TSAM 초기화 작업 ........................................................................................... 90

B.2.1. tb_newmount.sh .............................................................................................. 91

B.2.2. 카탈로그용 테이블 스페이스 생성 ..................................................................... 91

B.2.3. 마스터 카탈로그 생성 ...................................................................................... 92

B.2.4. 볼륨 추가 ........................................................................................................ 92

B.3. Tibero/TSAM 기동/중지 .............................................................................................. 93

B.3.1. tbboot ............................................................................................................. 93

B.3.2. tbdown ........................................................................................................... 94

B.4. Tibero/TSAM Fail-over (Active-Standby) ...................................................................... 94

B.4.1. TBCM 소개 ..................................................................................................... 96

B.4.2. TBCM 설정 ..................................................................................................... 98

B.4.3. Tibero/TSAM Fail-over 운영 방법 .................................................................... 102

B.5. Tibero/TSAM Online 백업 ......................................................................................... 103

B.6. Tibero/TSAM 모니터링 및 문제 분석 .......................................................................... 106

B.6.1. Dynamic views and DBA tables for Monitoring ................................................. 106

B.6.2. 문제 분석용 로그 파일들 ................................................................................ 108

용어해설 ................................................................................................................................... 111

색인 .......................................................................................................................................... 115

iv Tibero TSAM 안내서

그림 목차

[그림 2.1] 인덱스 컴포넌트 – 인덱스 셋과 순차 셋 ......................................................................... 7

[그림 2.2] 접근경로 개념 ............................................................................................................ 10

[그림 2.3] 스피어와 업그레이드 셋 .............................................................................................. 11

[그림 B.1] Symbolic Link를 이용한 TSAM 클라이언트 프로그램 빌드 ............................................ 88

[그림 B.2] Tibero/TSAM Active-Standby fail-over 개념도 .............................................................. 95

Tibero v

안내서에 대하여

안내서의 대상

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

대상으로 기술한다.

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

안내서에 대하여 vii

안내서 구성

Tibero TSAM 안내서는 총 4개의 장과 Appendix로 구성되어 있다.

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

● 제1장: TSAM 소개

Mainframe 데이터 셋과 액세스 메소드에 대해 알아보고, TSAM의 기능과 구현 그리고 관련 모듈에 대

해 기술한다.

● 제2장: TSAM 데이터 셋

TSAM 데이터 셋의 종류(ESDS, KSDS, RRDS, VRDS)에 대해 알아보고, 보조 인덱스와 보조 인덱스의

접근경로 그리고 스피어에 대하여 기술한다. 마지막으로 Mainframe의 VSAM과 Tibero/TSAM 데이터

셋을 요약하고 비교한다.

● 제3장: TSAM 데이터 셋 관리

TSAM 데이터 셋을 관리하기 위해 필요로 하는 툴과 유틸리티에 대해 기술한다.

● 제4장: TSAM 데이터 셋 처리

TSAM 데이터 셋을 처리하기 위한 여러 가지 작업들에 대해 기술한다.

● Appendix. A : TSAM API

TSAM에서 제공하는 각종 API 사용방법에 대해 기술한다.

● Appendix. B : TSAM/Tibero 운영 및 관리

TSAM/Tibero를 사용하기 위한 환경설정을 포함한 설치방법, 초기화 방법, TSAM/Tibero 서버 기동/정

지 방법, 데이터베이스 장애복구 및 백업 등 TSAM/Tibero를 사용하는데 있어서 운영과 관리에 대한 전

반적인 사항에 대해 기술한다.

viii Tibero TSAM 안내서

안내서 규약

의미표기

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

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

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

강조진하게

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

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

메일 계정, 웹 사이트, 다른 장 및 절 참고하이퍼링크

메뉴의 진행 순서>

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

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

참조 또는 주의사항참고

그림 이름[그림 1.1]

표 이름[표 1.1]

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

필수 인수 값{ }

옵션 인수 값[ ]

선택 인수 값|

안내서에 대하여 ix

시스템 사용 환경

요구 사항

IBM AIX 5.xPlatform

HP-UX 11.xx

Solaris 9 (SunOS 5.9)

Linux IA64 2.6.x

최소 120MB 하드디스크 공간Hardware

256MB 이상 메모리 공간

1GB 이상 하드디스크와 512MB 이상 메모리 공간 권장

Tibero 3.0Database

Oracle 9i 또는 10g

x Tibero TSAM 안내서

관련 안내서

설명안내서

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

이다.

OpenFrame

시작하기 안내서

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

Base 설치 안내서

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

Base 안내서

OpenFrame 데이터 셋에 대한 소개와 데이터 셋 종류 및 카탈로그 방법 등에

대해 기술한 안내서이다.

OpenFrame

데이터 셋 안내서

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

안내서이다.

OpenFrame

유틸리티 참조 안내서

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

된 안내서이다.

OpenFrame

툴 참조 안내서

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

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

OpenFrame

마이그레이션 안내서

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

안내서이다.

OpenFrame

에러 메시지 참조 안내서

안내서에 대하여 xi

참고 문헌

안내서제품

z/OS V1R5.0 DFSMS: Using Data SetsIBM Mainframe

z/OS V1R6.0 DFSMS: Managing Catalogs

z/OS V1R5.0 DFSMS: Access Method Services for Catalogs

CICS for MVS/ESA: Application Programming Reference

VOS3 VSAM 해설Hitachi Mainframe

VOS3 VSAM 유틸리티 해설-문법서

Tibero RDBMS 설치 및 시작 안내서Tibero

Tibero RDBMS 관리자 안내서

Tibero RDBMS 레퍼런스 안내서

xii Tibero TSAM 안내서

연락처

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

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 Tibero TSAM 안내서

제1장 TSAM 소개

TSAM(Tmax VSAM)은 개방형 환경에서 Mainframe의 VSAM에 해당하는 기능을 제공하는 TmaxSoft의

VSAM 데이터 셋을 관리하고 처리하는 모듈이다.

본 장에서는 TSAM에 대해 설명하기에 앞서서 Mainframe의 데이터 셋과 액세스 메소드에 대해 먼저 알아

보고, 이를 바탕으로 TSAM에서 지원하는 VSAM 데이터 셋의 종류와 기능 등에 대해 설명한다.

1.1. 데이터 셋과 액세스 메소드데이터 셋은 논리적으로 연관된 데이터 레코드의 집합이며, 액세스 메소드는 데이터 셋을 구성하고 데이

터 셋에 저장된 데이터 레코드에 접근하는 방법이다.

Mainframe에서 데이터 셋의 종류는 크게 Non-VSAM 데이터 셋과 VSAM 데이터 셋으로 구분된다.

Non-VSAM 데이터 셋의 종류는 다음과 같다.

● 순차 데이터 셋 (Sequential Data Set)

● 직접 데이터 셋 (Direct Data Set)

● 분할 데이터 셋 (PDS: Partitioned Data Set)

● 인덱스 데이터 셋 (Indexed Data Set)

VSAM 데이터 셋의 종류는 다음과 같다.

● ESDS (Entry-Sequenced Data Set)

● KSDS (Key-Sequenced Data Set)

● RRDS (Relative Record Data Set)

● VRDS (Variable-length Relative Record Data Set)

● LDS (Linear Data Set)

참고

Hitachi VOS3 VSAM의 경우 LDS를 FDS(Flat Data Set)라고 부른다.

제1장 TSAM 소개 1

다음은 Non-VSAM 데이터 셋 구조에 따른 액세스 메소드에 대한 설명이다.

액세스 메소드데이터 셋 구조

BSAM, QSAM순차 데이터 셋

BDAM직접 데이터 셋

BPAM분할 데이터 셋

ISAM (BISAM, QISAM)인덱스 데이터 셋

다음은 VSAM 데이터 셋 구조에 따른 액세스 메소드에 대한 설명이다.

액세스 메소드레코드 구조

VSAMESDS (Entry Sequenced Data Set)

VSAMKSDS (Key Sequenced Data Set)

VSAMRRDS (Relative Record Data Set)

VSAM/DIV (Data In Virtual)LDS (Linear Data Set)

기본적으로 데이터 셋을 처리하기 위해서 사용할 액세스 메소드는 위의 표에서 볼 수 있듯이 데이터 셋의

구조에 따라서 결정된다. 하지만 특정 데이터 셋 구조를 다른 액세스 메소드를 사용하여 처리하는 것도 제

한적으로 가능하다.

각 종류의 데이터 셋을 처리하는 액세스 메소드는 자신만의 고유한 데이터 셋 구조를 이용하여 데이터를

구성하며, 데이터 셋을 처리하는 인터페이스와 유틸리티 프로그램을 가지고 있다. 액세스 메소드는 시스

템의 라이브러리 함수 및 서비스로 제공된다.

Mainframe은 여러 가지 액세스 메소드를 제공하며 VSAM은 이러한 액세스 메소드 중의 한가지이다.

OpenFrame에서도 여러 가지 액세스 메소드를 사용할 수 있고 TSAM 역시 OpenFrame에서 제공되는 여

러 액세스 메소드 중의 한 가지이다.

TSAM에서 지원하는 데이터 셋

TSAM은 VSAM에서 지원하는 다음과 같은 데이터 셋을 지원한다. 단, LDS(Linear Data Set)는 지원하지

않는다.

● ESDS (Entry-Sequenced Data Set)

● KSDS (Key-Sequenced Data Set)

● RRDS (Relative Record Data Set)

● VRDS (Variable-length RRDS)

2 Tibero TSAM 안내서

1.2. TSAM 기능TSAM이 제공하는 기능은 TSAM API에 정의되어 있다. 이에 대한 자세한 내용은 “Appendix A. TSAM API”

를 참고한다.

TSAM API에 정의된 기능은 다음과 같이 3가지로 구분할 수 있다.

● 커넥션, 트랜잭션, 데이터 셋 Open/Close

애플리케이션이 TSAM 데이터 셋을 사용하기 위한 제어정보를 준비하는 함수로서 CONN, TX,

OPEN/CLOSE 계열의 함수가 제공된다.

● 데이터 셋 관리

TSAM 데이터 셋을 생성/제거하기 위한 함수 및 데이터 셋의 상태정보를 제공하거나 기타 속성을 변경

하기 위한 데이터 셋 수준의 관리 함수로서 CREATE, REMOVE, STAT, ALTER 함수가 제공된다.

● 데이터 셋 레코드 관리 함수

특정 데이터 셋의 레코드를 관리하기 위한 함수로서 READ, WRITE, REWRITE, DELETE 함수 및

BROWSE 관련 함수가 제공된다.

위의 3가지 기능을 이용해서 TSAM이 저장하는 정보는 그 용도에 따라서 다음과 같이 2가지로 구분할 수

있다.

● 카탈로그 정보

TSAM은 데이터 셋과 디스크 공간에 대한 다양한 정보를 유지한다.

모든 TSAM 데이터 셋은 카탈로그에 정의되어 있어야 하며, 카탈로그에는 데이터 셋의 처리방법 및 구

조를 정의하는 여러 가지 메타정보가 저장된다.

카탈로그에 정의되지 않은 TSAM 데이터 셋에는 레코드를 적재할 수 없다. 그리고 카탈로그 정보 또한

TSAM 데이터 셋의 하나로 저장되고 관리된다.

● 사용자 데이터 셋

사용자가 애플리케이션을 통하여 저장하고 처리하려는 정보를 저장하는 데이터 셋이다. TSAM은 서로

다른 4가지 형태의 데이터 셋의 구조(KSDS, ESDS, RRDS, LDS)에 따라 사용자 데이터를 관리한다. 이

들 각각의 데이터 셋의 종류에 따라 레코드를 저장하거나 액세스하는 방식이 달라진다.

제1장 TSAM 소개 3

1.3. TSAM 구현TSAM의 기능은 TSAM/Tibero 혹은 TSAM/RDB라는 2가지 구현으로 사용 가능하다.

● TSAM/Tibero

TSAM/Tibero는 TmaxSoft의 DBMS 제품인 Tibero에서 특징적으로 제공하는 VSAM 액세스 메소드이

다.

● TSAM/RDB (Oracle)

TSAM/RDB는 관계형 데이터베이스 관리 시스템 (Relational Database Management System)을 사용하

여 VSAM 데이터 셋을 데이터베이스 테이블로 Mapping해서 구현한 모듈이다. 현재 Oracle 데이터베이

스의 클라이언트 라이브러리 형태로서 구현되어 있다.

1.4. TSAM 관련 모듈TSAM과 관련한 모듈은 다음과 같다.

설명모듈

TSAM/Tibero 클라이언트 라이브러리TSCLI

TSAM/RDB 클라이언트 라이브러리TSR

OpenFrame Integrated Catalog Facility 라이브러리ICF

OpenFrame 액세스 메소드 서비스 라이브러리AMS

액세스 메소드 서비스 명령 처리 유틸리티IDCAMS

참고

IDCAMS에 해당하는 Hitachi VOS3 VSAM 유틸리티는 JSCVSUT이다.

4 Tibero TSAM 안내서

제2장 TSAM 데이터 셋

본 장에서는 “제1장 TSAM 소개”에서 설명한 여러 가지 데이터 셋 구성에 대한 사항들을 TSAM에서 어떻

게 지원하고 구현되어 있는지 자세히 알아본다.

TSAM은 데이터 레코드를 레코드 키, 레코드 번호 혹은 레코드 주소 순서에 따라 저장하며, 고정 길이 혹

은 가변 길이의 레코드를 순차 및 직접적으로 처리할 수 있다. TSAM은 다음의 방식으로 데이터 셋을 구성

함으로써 이를 가능케 한다.

● Entry-Sequenced Data Set (ESDS): 입력 순서 데이터 셋

● Key-Sequenced Data Set (KSDS): 키 순서 데이터 셋

● Relative Record Data Set: 레코드 번호별 데이터 셋

Relative Record Data Set은 레코드의 길이에 따라서 다음의 2가지로 나뉜다.

– Fixed-Length Relative Record Data Set (RRDS)

번호가 부여된 고정 길이의 레코드로 이루어진 데이터 셋

– Variable-Length Relative Record Data Set (VRDS/VRRDS)

번호가 부여된 가변 길이의 레코드로 이루어진 데이터 셋

이와 같은 데이터 셋의 구성은 데이터 셋에 포함될 레코드 자체의 성질과 해당 데이터 셋을 처리하는 다양

한 프로그램들의 공통적인 처리방법의 특성에 따른 것이다.

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

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

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

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

또한 ESDS에서 레코드의 갱신은 가능하지만, 길이 변경이 따르는 레코드의 변경 작업은 지원되지 않는

다. 레코드의 길이를 반드시 변경해야 하는 경우라면, 앞에서 설명한 것처럼 애플리케이션 수준에서 레코

드 삭제를 표시하고 새로운 길이의 레코드를 데이터 셋의 맨 뒤에 추가하는 방법을 사용해야 한다. 하지만

이와 같은 처리가 빈번할 것으로 예상되는 애플리케이션에서 사용되는 데이터 셋이라면 애초부터 KSDS

의 사용을 검토해보기 바란다.

제2장 TSAM 데이터 셋 5

TSAM은 ESDS 구조의 데이터 셋에 대해 다음의 액세스 메소드를 지원한다.

● 순차 액세스 (Sequential Access)

ESDS의 순차 액세스는 실제 데이터 컴포넌트에 저장된 레코드의 순서대로 처리한다. 각 레코드의 시

작위치는 일반적으로 RBA라고 부르고, 한번 레코드가 데이터 셋에 저장된 다음에는 변하지 않는다.

즉, 특정 레코드의 RBA는 데이터 셋에 레코드를 추가하는 순간에 결정되고 사용자에게 반환된다.

또한 순차 액세스를 하는 경우 사용자는 처음에만 RBA를 제공할 필요가 있다. 이후에 순차 액세스를 할

때마다 실제로 액세스가 일어난 RBA가 사용자에게 보고된다. 기본적으로 ESDS를 프로그램에서 사용

하기 직전에 TSAM은 자동적으로 첫 레코드를 순차처리의 시작 레코드로 가정한다.

● 직접 액세스 (Direct Access)

ESDS에 있는 특정한 레코드를 곧바로 액세스하기 위해서는 순차 액세스에서 설명한 레코드의 시작 주

소 값인 RBA를 사용자가 지정해야 한다.

레코드의 추가 및 접근이 성공적으로 수행된 경우 TSAM은 사용자에게 RBA 값을 반환한다. 이렇게 반

환되는 RBA 값과 레코드의 보조키 부분을 이용하여 보조 인덱스를 구성함으로써 사용자는 ESDS 데이

터 셋에 대한 보조키에 의한 접근을 할 수 있다.

참고

RBA 값을 그대로 사용하여 직접 액세스하는 것은 일반적인 업무처리를 위한 프로그램 방식으로는

적당하지 않다.

2.2. KSDSKSDS의 레코드들은 레코드의 키 순서에 따라서 데이터 셋에 저장된다. KSDS의 키는 레코드의 특정 필

드를 말하며 다음과 같은 특성을 갖는다.

● 모든 레코드의 키 길이와 키 위치는 동일하다. 키 길이는 최소 1Byte 이상 256Byte 이하의 길이로 제한

된다.

● 같은 키 값을 갖는 2개 이상의 레코드를 저장할 수 없다. 즉, 키 값은 유일해야 한다.

● 데이터 셋에 대한 키 정보가 한번 지정된 이후에 다시 레코드의 키 정보를 변경할 수 없다. 해당 데이터

셋에 레코드가 하나도 없는 경우라 하더라도 키 정보는 변경할 수 없다. 단, 데이터 셋을 제거한 다음에

는 다시 정의할 수 있다.

● Spanned 레코드의 경우, 키 부분은 항상 레코드가 저장되는 첫 블록에 포함되어야 한다.

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

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

6 Tibero TSAM 안내서

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

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

TSAM은 KSDS 구조의 데이터 셋에 대해 다음의 3가지 액세스 메소드를 지원한다.

● 순차 액세스 (Sequential Access)

KSDS의 순차 액세스 메소드는 KSDS 데이터 셋의 초기 적재, 읽기, 쓰기, 갱신, 추가, 삭제 작업에 사용

된다.

TSAM은 인덱스 컴포넌트를 이용해서 데이터 레코드들을 키 순서에 따라서 오름차순이나 내림차순으

로 빠르게 접근하는 것이 가능하다.

순차처리를 하는 경우, TSAM 내부적으로 인덱스 컴포넌트를 이용해서 다음에 액세스할 레코드가 결정

되므로 사용자는 자신이 액세스하고자 하는 레코드의 키 값을 제공할 필요가 없다.

[그림 2.1] 인덱스 컴포넌트 – 인덱스 셋과 순차 셋

KSDS의 순차 액세스 시, 다음 레코드를 빠르게 얻기 위해 TSAM은 인덱스 컴포넌트 맨 밑부분의 순차

셋(sequence set)만을 사용해서 곧바로 다음 레코드의 위치를 알아낸다. 달리 말하면, 인덱스 컴포넌트

의 윗 부분인 인덱스 셋 부분을 여러 번 처리할 필요가 없으므로 매우 빠른 순차 액세스가 가능하다는

점에서 큰 의미를 갖는 액세스 메소드이다.

● 직접 액세스 (Direct Access)

직접 액세스 메소드는 이미 존재하는 레코드의 읽기, 쓰기, 변경, 삭제 작업에 사용된다. 데이터 셋 내에

저장된 레코드를 처리하기 위해서 사용자는 레코드를 찾기 위한 키 값을 제공해야 한다. 사용자는 전체

키 값을 제공하거나 키의 일부분(앞부분)만을 제공할 수 있다. 이 경우 키 값으로 제공한 값이 일치하는

첫 번째 레코드가 반환된다.

제2장 TSAM 데이터 셋 7

TSAM은 KSDS에 대한 직접 액세스 처리시에도, 사용자가 제공한 키 값으로부터 실제 레코드가 존재하

는 물리적인 위치를 얻기 위해서 인덱스 컴포넌트를 사용한다. 순차 액세스와는 달리, 직접 액세스의 경

우에는 인덱스 컴포넌트의 윗부분인 인덱스 셋 부분을 매번 처리한다.

● 스킵 순차 액세스 (Skip-Sequential Access)

이 액세스 메소드는 순차 액세스 메소드와 직접 액세스 메소드의 장점을 모두 제공하는 액세스 메소드

이다. 특정 레코드를 얻기 위해서는 직접 액세스 메소드를 사용하고 그 이후의 연속적인 레코드를 얻는

데에는 순차 액세스 메소드가 내부적으로 이용된다. 이렇게 일련의 레코드를 처리한 다음에 또다시 직

접 액세스 메소드를 이용하는 식으로 데이터 셋을 처리할 수 있다.

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

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

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

에는 (레코드의 고정 길이 x 한 블록에 저장할 레코드의 개수 + 블록 관리에 사용되는 오버헤드 크기)를 지

정해 주는 것이 좋다. 그렇지 않으면 RRDS 내부에 사용될 수 없는 공간이 생기게 된다. 하지만 이 공간의

크기는 1개의 고정 길이 레코드보다 크지는 않기 때문에 큰 문제는 되지 않을 것이다.

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

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

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

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

다.

TSAM은 RRDS 구조의 데이터 셋에 대해 다음의 3가지 액세스 메소드를 지원한다.

● 순차 액세스 (Sequential Access)

RRDS의 순차 액세스는 ESDS에 대한 순차 액세스와 크게 다른 점이 없다. 다만 사용되지 않은 슬롯은

순차 액세스에 자동적으로 무시된다.

● 직접 액세스 (Direct Access)

RRDS을 직접 액세스하기 위해 사용자는 접근하고자 하는 레코드의 번호(RRN)을 제공해야 한다. TSAM

은 RRN으로부터 실제 레코드의 위치를 쉽게 알 수 있다. RRDS에 대한 직접 액세스에 레코드의 위치

(RBA)를 사용할 수는 없다.

● 스킵 순차 액세스 (Skip-Sequential Access)

스킵 순차 액세스는 위의 RRDS에 대한 직접 액세스와 내부적으로는 동일하게 처리된다. 하지만 사용

자는 순차 액세스하는 동안은 레코드 번호를 제공하지 않아도 된다.

8 Tibero TSAM 안내서

2.4. VRDSVRDS는 가변 길이 레코드를 저장할 수 있는 RRDS 데이터 셋이다. 사용자 관점에서 VRDS를 사용하는

방식은 RRDS 데이터 셋을 사용하는 방식과 동일하다. 즉 사용 가능한 액세스 메소드와 레코드를 지정하

기 위해서 제공해야 하는 인자가 동일하다.

하지만 VSAM 내부적인 입장에서는 VRDS를 처리하는 데에는 오히려 KSDS와 유사하게 인덱스 컴포넌

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

레코드의 길이가 고정되어 있지 않기 때문에 레코드 번호만을 가지고 간단하게 원하는 레코드가 저장된

위치를 알아내는 것이 불가능하기 때문이다.

반면, KSDS의 관리와 다른 점은 KSDS에 대해서는 인덱스 컴포넌트의 키로 레코드의 일부인 키 영역을

사용하지만, VRDS에서는 레코드와는 별도로 사용자가 제공하는 레코드 번호를 인덱스 컴포넌트의 키로

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

2.5. 보조 인덱스보조 인덱스(AIX: Alternate Index)는 KSDS나 ESDS 클러스터의 논리 레코드를 하나 이상의 키 필드 순서

로 액세스하는 것을 가능하게 해준다.

보조 인덱스를 이용하면 같은 데이터를 다른 키 필드의 순서로 액세스하기 위해서 동일한 데이터를 여러

데이터 셋에 별도로 저장할 필요가 없어진다. 보조 인덱스는 인덱스 컴포넌트와 데이터 컴포넌트를 가지

고 있는 KSDS이다.

베이스 클러스터

보조 인덱스에 의해서 다른 처리 순서를 제공받는 근본 데이터 셋을 베이스 클러스터라고 부른다. 하나의

베이스 클러스터는 여러 개의 보조 인덱스를 가질 수 있다. 베이스 클러스터의 레코드에 있는 어떤 부분도

보조키로 지정할 수 있으며, 심지어 베이스 KSDS 클러스터의 기본키 자체를 다시 보조키로 사용할 수 있

다.

보조키

보조키는 기본키와는 달리 유일하지 않아도 된다. 예를 들면, 기본키가 사원번호라고 하고, 보조키는 부서

명이라고 하면, 같은 부서명을 갖는 여러 개의 레코드 혹은 사원번호가 존재할 수 있다.

보조 인덱스의 데이터 컴포넌트는 보조키 값과 보조키에 해당하는 여러 개의 기본키를 데이터 레코드로

저장한다.

IDCAMS의 DEFINE ALTERNATE INDEX 명령을 이용하여 보조 인덱스를 정의하고 BLDINDEX 명령을

이용하여 AIX 데이터를 적재한다.

제2장 TSAM 데이터 셋 9

2.6. 보조 인덱스 접근경로보조 인덱스를 사용해서 베이스 클러스터를 처리하려면 이에 대한 접근경로(Path)가 정의되어야 한다. 접

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

접근경로를 통하지 않고 직접 보조 인덱스를 액세스하는 것도 가능하지만 이 경우는 보조 인덱스 자체를

별도의 KSDS 클러스터로서 조작하는 것으로 처리된다.

접근경로는 IDCAMS의 DEFINE PATH 명령을 이용해서 정의할 수 있으며, PATHENTRY 파라미터가 지

정하는 하나의 보조 인덱스와 연관된다.

애플리케이션이 보조 인덱스 접근경로를 이용하여 데이터 셋을 열면 TSAM은 내부적으로 베이스 클러스

터와 보조 인덱스를 함께 연다. 반면 보조 인덱스 접근경로를 사용하지 않고 직접 보조 인덱스를 여는 경

우 TSAM은 보조 인덱스 자체만 열고 베이스 클러스터는 열지 않는다.

[그림 2.2] 접근경로 개념

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

스피어는 사용자 애플리케이션에서 특정 베이스 클러스터의 레코드를 변경할 경우 (변경에 따른 보조 인

덱스 업그레이드 처리까지 고려하여) 변경의 영향을 받을 가능성이 있는 TSAM 클러스터의 집합을 일컫

는 용어로 사용된다.

10 Tibero TSAM 안내서

[그림 2.3] 스피어와 업그레이드 셋

하나의 베이스 클러스터에 레코드가 추가되거나 삭제 또는 변경되면 TSAM은 내부적으로 이 베이스 클러

스터와 연관된 보조 인덱스들이 변경된 보조키와 기본키 쌍을 나타낼 수 있도록 변경한다. 이러한 처리를

보조 인덱스의 업그레이드라고 한다. 베이스 클러스터에 대한 모든 보조 인덱스들의 집합 중에서 TSAM

이 업그레이드 처리를 해야 하는 보조 인덱스의 집합을 업그레이드 셋이라고 부른다.

2.8. TSAM 데이터 셋 요약 및 비교다음은 TSAM 데이터 셋 구조간의 특성을 비교한 표이다.

Variable-length RRDSFixed-length RRDSKSDSESDS

레코드 번호 순서대로 저

레코드 번호 순서대로 저

키에 대한 오름차순으로

저장

입력된 순서대로 레코드

저장

가변 길이 레코드만 저장

가능

고정 길이 레코드만 저장

가능

고정 길이 및 가변 길이

레코드 저장 가능

고정 길이 및 가변 길이

레코드 저장 가능

레코드 번호에 의한 직접

접근

레코드 번호에 의한 직접

접근

키 및 주소에 의한 직접

접근

RBA에 의한 직접 접근

데이터 컴포넌트와 인덱

스 컴포넌트로 이루어짐

데이터 컴포넌트만으로

이루어짐

데이터 컴포넌트와 인덱

스 컴포넌트로 이루어짐

데이터 컴포넌트만으로

이루어짐

보조 인덱스 불가능보조 인덱스 불가능보조 인덱스 가능보조 인덱스 가능

레코드번호 변경안됨레코드번호 변경안됨RBA 변경될 수 있음RBA 변경되지 않음

제2장 TSAM 데이터 셋 11

Variable-length RRDSFixed-length RRDSKSDSESDS

비사용 영역이나 데이터

셋의 맨 뒤에 레코드 추가

레코드가 저장될 저장위

치는 미리 빈 슬롯에 할당

되어 있음

비사용 영역이나 데이터

셋의 맨 뒤에 레코드 추가

데이터 셋 맨 뒤에 레코드

추가

레코드 삭제 또는 더 작은

길이의 레코드로 변경 생

레코드 삭제 시 생기는 빈

공간은 다른 레코드의 저

장에 사용될 수 있음

레코드 삭제 또는 더 작은

길이의 레코드로 변경 시

생기는 여분의 공간은 레

레코드 삭제 불가. 단, 해

당위치에 동일 크기의 다

른 레코드 저장하여 내용

변경 가능

기는 여분의 공간은 레코

드 추가나 길이 증가에 쓰

일 수 있음

코드 추가나 길이 증가에

쓰일 수 있음

블록 길이보다 큰 레코드

저장 불가능

블록 길이보다 큰 레코드

저장 불가능

블록 길이보다 큰 레코드

저장 가능

블록 길이보다 큰 레코드

저장 가능

12 Tibero TSAM 안내서

제3장 TSAM 데이터 셋 관리

데이터 셋 관리란 운영체계의 일부로서 사용자가 필요로 하는 다양한 목적의 정보를 구성하고, 식별하고,

저장하고, 읽어 들이는 역할을 의미한다.

TSAM 데이터 셋에서는 다음과 같은 관리 작업을 할 수 있다.

● 데이터 셋의 생성

사용자가 애플리케이션이나 유틸리티 프로그램 등을 이용하여 TSAM에서 관리되는 데이터 셋에 액세

스하려면, 그 이전에 사용자 또는 관리자에 의해서 사용될 데이터 셋을 미리 생성해 두어야 한다.

● 데이터 셋의 제거

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

● 데이터 셋의 속성 변경 및 조사

기존에 생성된 데이터 셋의 일부 속성을 변경한다. 실제로 데이터 셋에 레코드가 이미 적재되어 있거나

해당 데이터 셋의 현재 상태에 따라서 변경할 수 있는 속성 종류는 제한된다.

● 데이터 셋의 레코드 적재 및 복사

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

셋으로 복사한다.

● 카탈로그 자체에 대한 관리

일반적인 사용자 데이터 셋과 마찬가지로 카탈로그 자체도 하나의 데이터 셋이므로 위에서 열거한 작

업들을 카탈로그 데이터 셋에 대해서도 할 필요가 있다. 특히 카탈로깅 과정을 카탈로그 데이터 셋에 대

한 레코드 적재 및 변경 작업으로 볼 수 있다.

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

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

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

제3장 TSAM 데이터 셋 관리 13

3.1. mascatOpenFrame 제품을 최초로 설치할 때 마스터 카탈로그 데이터 셋을 처음 생성해주는 마스터 카탈로그 정

의 프로그램이다.

TSAM 데이터 셋은 모두 카탈로그에 등록되어야 하므로 TSAM 데이터 셋을 사용하기 전에 미리 마스터

카탈로그를 생성해야 한다. 이미 마스터 카탈로그가 생성되어 있는 경우는 다시 생성할 필요가 없다.

다음은 mascat 명령의 사용법을 보여준다.

mascat create {dsname} {volser}

mascat remove {dsname}

mascat 명령의 파라미터에 대한 설명은 다음과 같다.

설명파라미터

마스터 카탈로그를 생성한다.create

마스터 카탈로그를 제거한다.remove

마스터 카탈로그의 이름을 지정한다.{dsname}

마스터 카탈로그가 생성될 볼륨 시리얼을 지정한다.{volser}

다음은 100000이라는 볼륨에 SYS1.MASTER.ICFCAT 이라는 이름으로 마스터 카탈로그를 생성하는 예

제이다.

$ mascat create SYS1.MASTER.ICFCAT 100000

참고

mascat 명령의 자세한 사용법은 "OpenFrame 툴 참조 안내서"를 참고한다.

3.2. voladdOpenFrame 제품을 최초로 설치할 때 VVDS 데이터 셋을 생성하고 마스터 카탈로그에 등록해 주는 프로

그램이다. 그리고 OpenFrame 제품을 운용 중에 TSAM 데이터 셋을 저장할 볼륨을 추가하려는 경우에도

사용된다.

voladd를 성공적으로 수행하기 위해서는 voladd 실행에 필요한 다음 작업들이 선행되어야 한다.

● 디바이스와 볼륨 설정

볼륨에 대한 설정파일인 volume.conf 파일을 이용해서 추가할 볼륨정보를 등록한다.

● TSAM 볼륨을 위한 테이블스페이스 생성

14 Tibero TSAM 안내서

TSAM 데이터 셋이 저장되는 공간인 데이터베이스 테이블스페이스를 SQL 명령어 중 CREATE TA

BLESPACE를 사용하여 생성한다.

● 마스터 카탈로그 생성

mascat 툴 프로그램을 사용해서 마스터 카탈로그를 미리 생성한다.

위와 같은 사전 작업을 수행한 후에 다음과 같이 voladd 툴을 사용하여 새로운 TSAM 볼륨을 마스터 카탈

로그에 등록한다.

다음은 voladd 명령의 사용법을 보여준다.

voladd define {volser}

voladd delete {volser}

voladd 명령의 파라미터에 대한 설명은 다음과 같다.

설명파라미터

VVDS 데이터 셋을 정의한다.define

VVDS 데이터 셋을 삭제한다.remove

추가/삭제하려고 하는 볼륨의 시리얼 번호를 지정한다.{volser}

다음은 100000이라는 볼륨에 VVDS 데이터 셋을 생성하고 카탈로깅하는 예제이다.

$ voladd define 100000

참고

voladd 명령의 자세한 사용법은 자세한 정보는 "OpenFrame 툴 참조 안내서"를 참고한다.

3.3. IDCAMS(JSCVSUT)IDCAMS(혹은 JSCVSUT)는 Mainframe의 데이터 셋 및 카탈로그 정보를 관리하는 유틸리티로, VSAM 및

Non-VSAM 데이터 셋 모두를 관리하는데 사용된다.

IDCAMS(혹은 JSCVSUT)는 IDCAMS(혹은 JSCVSUT)가 실행할 명령들을 SYSIN으로 입력 받아서 동작

한다. SYSIN으로 입력되는 각 명령들은 TSAM 데이터 셋 관리작업에서 나열한 각각의 작업을 수행하기

위한 명령과 이를 위한 각종 옵션 혹은 파라미터들로 구성된다.

OpenFrame IDCAMS(혹은 JSCVSUT)는 기존 Mainframe의 IDCAMS(혹은 JSCVSUT) 명령을 그대로 사

용하여 OpenFrame의 VSAM 데이터 셋(TSAM), OpenFrame Non-VSAM 데이터 셋 및 카탈로그를 대상

으로 동작하며, 사용자 수준에서 Mainframe의 IDCAMS(혹은 JSCVSUT)와 동일한 작업을 수행한다.

OpenFrame IDCAMS(혹은 JSCVSUT)는 UNIX 시스템의 명령라인에서 직접 실행하거나 JCL을 이용한

Batch 작업으로 실행할 수 있다.

제3장 TSAM 데이터 셋 관리 15

IDCAMS(혹은 JSCVSUT) 명령어는 다음의 2가지 종류로 분류된다.

설명명령어

실제로 사용자가 수행하려는 특정 작업을 나타내는 명령이다.기능 명령어

일련의 IDCAMS(혹은 JSCVSUT) 명령어들의 실행을 제어하기 위한 명령이다.보조 명령어

다음은 OpenFrame IDCAMS(혹은 JSCVSUT)의 명령과 각 명령의 기능에 대해 간략히 요약한 표이다. 각

명령을 사용하기 위한 자세한 사용방법은 "OpenFrame 유틸리티 참조 안내서"의 “IDCAMS” 혹은 "JSCV

SUT"를 참고한다.

IDCAMS(혹은 JSCVSUT) 기능 명령어와 각 명령의 기능은 다음과 같다.

기능기능 명령어

이미 정의되어 있는 데이터 셋 또는 카탈로그 자체의 속성을 변경한다.ALTER

특정 데이터 셋에 대한 보조 인덱스를 생성한다.BLDINDEX

다음과 같은 데이터 셋 오브젝트(또는 카탈로그 항목)를 정의하기 위해 사용한다.DEFINE

- ALIAS

- ALTERNATEINDEX

- CLUSTER

- GENERATIONDATAGROUP

- NONVSAM

- PATH

- USERCATALOG|MASTERCATALOG

VSAM과 Non-VSAM 데이터 셋 및 카탈로그를 제거한다.DELETE

카탈로그와 VSAM 데이터 셋을 이식 가능한 데이터 셋으로 반출하거나 백업 데이터

셋을 생성한다.

EXPORT

EXPORT 명령으로 생성된 이식 가능한 카탈로그와 VSAM 데이터 셋을 반입하거나

백업된 상태의 데이터 셋을 원래의 상태로 복원한다.

IMPORT

카탈로그에 등록된 VSAM과 Non-VSAM 데이터 셋에 대한 정보를 보여준다.LISTCAT

VSAM과 Non-VSAM 데이터 셋에 저장되어 있는 레코드를 출력하여 보여준다.PRINT

VSAM과 Non-VSAM 데이터 셋 간의 내용을 복사한다.REPRO

VSAM 데이터 셋의 비정상 종료(close)로 인해 잘못된 데이터 셋 정보로 카탈로그 되

어 있는지 확인하고 올바르게 수정한다. 또 레코드 수 등의 정보도 정확하게 반영되어

있는지 확인한다.

VERIFY

16 Tibero TSAM 안내서

참고

VSAM 데이터 셋을 종료(close)할 때 해당 데이터 셋의 마지막 위치와 레코드 수 등의 통계정보가 카

탈로그에 저장된다.

즉, 정상적으로 종료되지 않은 경우 이와 같은 카탈로그 정보와 실제 데이터 셋의 상태 정보가 일치

하지 않을 수 있으므로, VERIFY 명령으로 이러한 불일치를 명시적으로 올바르게 변경할 수 있다.

IDCAMS(혹은 JSCVSUT) 보조 명령어와 그 기능은 다음과 같다.

기능보조 명령어

실행된 명령의 컨디션 코드 값(LASTCC 또는 MAXCC)에 따라서 다음에 실행할 명령

을 분기하기 위해 사용한다.

IF-THEN-ELSE

아무 동작도 하지 않는 문법적인 용도의 명령이다.Null

IF-THEN-ELSE 명령의 THEN이나 ELSE 다음에 특별한 작업을 수행하지 않는다는

것을 명시적으로 나타내기 위해서 사용한다.

MAXCC나 LASTCC의 값을 특정한 값으로 강제 설정하기 위해 사용한다.SET

프로그램 실행 중 CANCEL 명령어를 만나면 IDCAMS(혹은 JSCVSUT)의 실행이 중

지되고, CANCEL 명령 이후의 나머지 명령들은 처리되지 않는다.

CANCEL

IDCAMS(혹은 JSCVSUT)가 실행되는 동안에 적용되는 몇 가지 처리 옵션 및 파라미

터 값을 지정한다.

PARM

참고

IDCAMS 유틸리티에 해당하는 Hitachi VOS3 VSAM 유틸리티는 JSCVSUT이다. 이에 대한 자세한

설명은 "OpenFrame 유틸리티 참조 안내서"의 JSCVSUT 내용을 참고한다.

3.4. DEFINE CLUSTERDEFINE CLUSTER 명령을 사용해서 VSAM 데이터 셋을 정의한다. 데이터 셋을 정의하기 위한 필수적인

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

DEFINE CLUSTER 명령에는 다음의 파라미터들을 지정할 수 있다.

설명파라미터

KSDS, ESDS, RRDS 등 데이터 셋의 구조를 지정한다.INDEXED|NONINDEXED

참고로 VRDS는 NUMBERED를 지정하고 RECORDSIZE를 가변길

이로 지정한다.

|NUMBERED

(INDEXED의 약어: IXD, NONINDEXED의 약어: NIXD, NUMBERD

의 약어: NUMD)

제3장 TSAM 데이터 셋 관리 17

설명파라미터

데이터 셋당 레코드의 평균길이와 최대길이를 지정한다.RECORDSIZE

평균길이와 최대길이 값을 다른 값으로 지정하면 가변길이 레코드

임을 의미한다. (약어: RECSZ)

(average maximum)

INDEXED 구조에서 데이터 셋의 한 레코드 상에서 키가 되는 부분

의 위치와 키의 길이를 지정한다.

KEYS(length offset)

데이터 셋을 저장할 볼륨을 지정한다. (약어: VOL,VOLUME)VOLUMES(volume serial …)

TSAM 데이터 셋의 레코드를 관리하기 위해 사용할 블록의 크기를

지정한다. 지정하지 않으면 다른 파라미터들의 값을 기반으로 TSAM

이 내부적으로 값을 정한다.

CONTROLINTERVALSIZE(size)

SPANNED 파라미터를 지정하지 않는 경우, CONTROLINTERVAL

SIZE는 최대길이의 레코드를 충분히 포함할 만큼 크게 지정해야 한

다. (약어: CISZ)

이 파라미터가 정의된 데이터 셋은 CONTROLINTERVALSIZE 보다

더 긴 레코드를 저장할 수 있다.

SPANNED

참고

NUMBERED 구조의 데이터 셋인 RRDS와 VRDS에 대해서는 이 파라미터를 사용할 수 없다.

다음은 일반적인 DEFINE CLUSTER 명령의 예를 보여준다.

//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)

//DEFCLUS EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

DEFINE CLUSTER (NAME(VSAM.KSDS1) -

INDEXED –

KEYS(10 0) -

VOL(VOL100) -

SPEED –

ORDERED -

SHR(2 3)) -

INDEX (NAME (VSAM.KSDS1.I)) -

DATA (NAME(VSAM.KSDS1.D) –

CISZ(4096) -

RECSZ(350 350))

/*

//

18 Tibero TSAM 안내서

위의 명령은 VSAM.KSDS1 이라는 이름의 INDEXED 구조의 데이터 셋을 생성한다. 이 데이터 셋에 저장

될 레코드의 길이는 350 Byte의 고정길이를 갖는 레코드이고, 레코드 상에서 키 필드의 위치는 맨 앞의 10

Byte이다. 그리고 VSAM.KSDS1 데이터 셋을 구성하는 인덱스와 데이터 컴포넌트의 이름을 각각 명시적

으로 지정하고 있다.

3.5. DEFINE ALTERNATEINDEXDEFINE ALTERNATEINDEX (이하 AIX) 명령을 이용하여 특정 데이터 셋(BASE CLUSTER)에 대한 별도

의 인덱싱 방법을 제공하는 AIX 데이터 셋을 정의한다.

TSAM은 베이스 클러스터에 레코드가 추가되거나 삭제 또는 변경되는 경우, 이와 연관된 AIX들에 대해서

자동적으로 변경을 수행하여 AIX가 지속적으로 올바르게 베이스 클러스터에 대한 별도의 인덱싱을 수행

할 수 있도록 한다.

내부구조상 AIX 데이터 셋도 하나의 KSDS 클러스터 구조를 갖는 데이터 셋이므로 DEFINE AIX에 사용되

는 대부분의 파라미터는 DEFINE CLUSTER의 파라미터와 동일하다.

DEFINE AIX 명령에 지정할 수 있는 파라미터 중에서 특기할만한 사항은 다음과 같다.

● RELATE(entryname)

현재 정의하는 AIX와 연관된 베이스 클러스터 데이터 셋 이름을 지정한다. 베이스 클러스터로 사용할

데이터 셋은 VSAM 데이터 셋 중에서 KSDS와 ESDS 구조의 데이터 셋만 가능하다.

참고

AIX를 정의하기 위해서는 미리 베이스 클러스터로 사용할 데이터 셋을 DEFINE CLUSTER 명령을

이용해서 만들어야 한다.

● UNIQUEKEY|NONUNIQUEKEY

정의하려는 AIX의 키 값이 데이터 셋 전체에서 유일한지 여부를 지정한다. 베이스 클러스터인 KSDS는

항상 UNIQUEKEY만 지정할 수 있지만 AIX를 만드는 경우는 NONUNIQUEKEY도 지정할 수 있다.

NONUNIQUEKEY가 지정되면, 하나의 보조키와 여러 개의 기본키로 이루어진 레코드가 AIX 데이터 셋

클러스터 자체의 레코드로 저장된다. (NONUNIQUEKEY의 약어: NUNQK)

● SPANNED

AIX 데이터 셋 클러스터 자체의 레코드의 경우, 특히 NONUNIQUEKEY가 지정된 경우 하나의 AIX 레코

드는 하나의 AIX의 보조키와 여러 개의 기본키로 이루어지므로 레코드 사이즈가 한 블록의 사이즈 보다

커질 수 있다. 이러한 경우를 허락하기 위해서 SPANNED 레코드를 지정한다.

● RECORDSIZE

AIX 데이터 셋 클러스터 자체의 레코드의 사이즈를 지정한다. SPANNED 파라미터를 지정한 경우 최대

32760의 값까지 지정할 수 있다.

제3장 TSAM 데이터 셋 관리 19

● UPGRADE

정의하려는 AIX 클러스터의 베이스 클러스터가 변경된 경우 AIX 클러스터의 내용을 동시에 변경하여

항상 AIX 클러스터의 내용이 베이스 클러스터에 대해 올바른 보조 인덱스를 유지한다.

다음은 VSAM.KSDS1에 대해 보조 인덱스 VSAM.AIX1을 생성하는 예이다.

//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)

//DEFAIX EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

DEFINE AIX (NAME(VSAM.AIX1) -

RELATE(VSAM.KSDS1) -

UPGRADE -

NUNQK -

KEYS(7 44) -

VOL(VOL100) -

SHR(2 3))

/*

//

3.6. DEFINE PATHDEFINE PATH 명령을 통해서 베이스 클러스터에 대한 직접적인 접근경로를 정의하거나 보조 인덱스를

경유하여 베이스 클러스터에 접근하는 간접적인 접근경로를 정의한다.

하나의 베이스 클러스터나 보조 인덱스에 여러 개의 접근경로를 정의할 수 있다. 또한 접근경로를 정의할

때 연관된 베이스 클러스터의 업그레이드 셋에 대한 업그레이드 처리 여부를 파라미터로 지정할 수 있다.

따라서 여러 개의 접근경로를 정의하여 각 접근경로 별로 업그레이드 처리 여부를 제어할 수 있다.

접근경로는 매우 논리적인 특성만을 지니는 카탈로그 항목으로 카탈로그 이외의 저장공간을 필요로 하지

않는다.

DEFINE PATH 명령에 지정 가능한 주요 파라미터는 다음과 같다.

설명파라미터

DEFINE PATH 문으로 현재 정의하는 PATH의 이름을 지정한다.NAME(entryname)

PATH가 AIX와 베이스 클러스터 쌍으로 이루어지는 경우에는 AIX 데이

터 셋의 이름을 지정한다. 베이스 클러스터 자체에 대한 PATH를 정의

PATHENTRY(entryname)

하는 경우라면 베이스 클러스터 데이터 셋의 이름을 지정한다. 후자의

경우, 베이스 클러스터 데이터 셋 원래의 인덱싱 방법을 지칭하는 단순

한 별칭으로 생각할 수 있다. 하지만 하나의 베이스 클러스터에 여러 개

의 PATH를 정의할 수 있기 때문에, 실제 액세스 시에 적용되는 속성을

달리 지정하는 용도로 사용할 수 있다.

20 Tibero TSAM 안내서

설명파라미터

NOUPDATE를 지정하면 해당 PATH를 통해서 베이스 클러스터 데이터

셋을 변경한 경우, 변경된 베이스 클러스터의 업그레이드 세트에 대한

UPDATE|NOUPDATE

자동적인 변경 작업이 수행되지 않는다. UPDATE는 그와 반대 의미이

고 기본값은 UPDATE이다.

다음은 보조 인덱스 VSAM.AIX1을 경유하여 VSAM.AIX1의 베이스 클러스터에 접근하는 접근경로(PATH)

인 VSAM.PATH1을 생성하는 예이다.

//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)

//DEFPATH EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

DEFINE PATH (NAME(VSAM.PATH1) -

PATHENTRY(VSAM.AIX1) -

UPDATE)

/*

//

다음은 보조 인덱스를 경유하지 않고 직접 베이스 클러스터에 접근하는 접근경로 VSAM.PATH2를 정의

하는 예이다.

//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)

//DEFPATH EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

DEFINE PATH (NAME(VSAM.PATH2) -

PATHENTRY(VSAM.KSDS1) -

UPDATE)

/*

//

3.7. DEFINE ALIASNon-VSAM 데이터 셋이나 사용자 카탈로그의 별칭으로 사용할 ALIAS를 카탈로그에 생성한다.

ALIAS에 해당하는 카탈로그 항목 역시 원래의 데이터 셋 이름과 별칭만을 포함하고 있다. 별도의 사용자

데이터를 저장하기 위한 데이터 셋은 존재하지 않는다.

참고

사용자 카탈로그를 제외한 VSAM 데이터 셋에 대한 ALIAS는 생성할 수 없다.

DEFINE ALIAS 명령에는 다음과 같은 파라미터를 지정할 수 있다.

제3장 TSAM 데이터 셋 관리 21

설명파라미터

생성할 ALIAS 자신의 이름을 지정한다.NAME(entryname)

ALIAS가 가리키는 실제 엔트리의 이름을 지정한다.RELATE(entryname)

생성할 ALIAS를 어느 카탈로그에 등록할지를 지정한다.CATALOG(catname)

다음은 TEST.NVSAM1의 ALIAS로 TEST.ALIAS1을 생성하고 TESTCAT 카탈로그에 등록하는 예이다.

//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)

//DEFALI EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

DEFINE ALIAS(NAME(TEST.ALIAS1) -

RELATE(TEST.NVSAM1) -

CATALOG(TESTCAT))

/*

//

3.8. DELETEVSAM 데이터 셋과 Non-VSAM 데이터 셋 그리고 이외에 카탈로그된 데이터 셋 항목을 제거하기 위해

DELETE 명령을 사용한다.

DELETE 명령은 이미 존재하는 항목을 지우는 역할을 하기 때문에 많은 파라미터를 요구하지 않는다. 제

거하려는 항목을 지시하는 이름과 해당 항목의 카탈로그 엔트리 타입만을 필요로 한다.

DELETE 명령에는 다음과 같은 파라미터를 지정할 수 있다.

설명파라미터

제거할 데이터 셋이나 카탈로그 항목의 이름을 지정한다.entryname|(entryname [entryname…])

괄호 안에 여러 개의 이름을 지정하면 한번의 명령으로 다

수의 엔트리를 제거할 수 있다.

제거할 카탈로그 엔트리의 이름 외에 부가적인 엔트리의 타

입을 지정한다. 엔트리 타입 지정은 필수적이지 않지만, 엔

ALTERNATEINDEX|CLUSTER|PATH

|TRUENAME|GENERATIONDATAGROUP트리 타입을 지정하면 실수로 이름이 동일한 의도하지 않은

항목을 제거하는 실수를 방지할 수 있다.|NONVSAM

AIX, CLUSTER, PATH, TRUENAME 등은 VSAM 데이터

셋의 엔트리 타입이고 나머지는 Non-VSAM 데이터 셋의 엔

트리 타입이다.

엔트리 타입이 CLUSTER이거나 AIX인 데이터 셋을 제거하

는 경우에 해당 데이터 셋의 실제 내용을 0으로 채울지 즉,

지워버릴지 여부를 지정한다.

ERASE|NOERASE

22 Tibero TSAM 안내서

설명파라미터

데이터 셋을 정의할 때 지정한 사용기간에 관계없이 데이터

셋 엔트리를 제거할지 여부를 지정한다. 데이터 셋의 사용

PURGE|NOPURGE

기간(retention period)은 DEFINE 명령의 TO 및 FOR 파라

미터로 지정된다.

- PURGE: 지정한 경우 사용기간에 관계없이 데이터 셋 엔

트리를 제거한다.

- NOPURGE: 유지기간이 만료된 엔트리만을 대상으로 제

거를 수행하며, 만료되지 않은 엔트리에 대해서는 제거하지

않는다. 생략된 경우 NOPURGE가 지정된 것으로 처리된

다.

다음은 VSAM 데이터 셋 엔트리 타입의 VSAM.KSDS1과 VSAM.KSDS2를 지정한 사용기간에 관계없이

삭제하는 예이다.

//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)

//DELCLUS EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

DELETE (VSAM.KSDS1 VSAM.KSDS2) -

CLUSTER -

ERASE -

PURGE

/*

//

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

데이터 셋의 내용을 다른 데이터 셋에 저장할 수 있다. REPRO 명령에 사용되는 VSAM 데이터 셋은 카탈

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

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

탈로그 내용 자체를 복사하는 용도로 사용될 수 있다.

물론, REPRO 명령을 이용하지 않고 일반적인 애플리케이션을 통해서 레코드를 데이터 셋에 저장하는 경

우도 매우 일반적이다.

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

사용된다.

REPRO 명령에는 다음과 같은 파라미터를 지정할 수 있다.

제3장 TSAM 데이터 셋 관리 23

설명파라미터

복사할 원본 데이터 셋을 지정한다. INFILE의 경우 JCL을 통

해서 명시된 ddname을 값으로 지정해야 하는 반면 IN

INFILE(ddname)

|INDATASET(entryname)DATASET 파라미터를 사용하는 경우에는 데이터 셋의 카탈

로그에 등록된 엔트리 이름을 지정해야 한다.

원본 데이터 셋을 복사작업을 수행한 후 저장할 대상 데이터

셋을 지정한다.

OUTFILE(ddname)

|OUTDATASET(entryname)

OUTFILE 파라미터의 값으로는 ddname을 지정해야 하며,

OUTDATASET 파라미터의 값으로는 카탈로그된 엔트리 이

름을 지정해야 한다.

데이터 셋 전체를 모두 복사하지 않고, 해당 데이터 셋의 일부

레코드만을 복사하기 위해 복사할 대상을 한정한다. 각각 특

FROMKEY(key)

|FROMADDRESS(address)정 키와 주소 그리고 레코드 번호 이후의 레코드를 대상으로

복사하고, SKIP 파라미터는 첫 레코드부터 number개의 레코|FROMNUMBER(number)|SKIP(number)

드는 복사하지 않고 number개 다음 레코드부터 복사작업의

대상으로 한다. 즉, 복사작업의 시작이 되는 레코드를 지정한

다.

복사작업의 대상이 되는 레코드를 제한한다. 즉, 복사작업의

대상이 되는 마지막 레코드를 지정한다.

TOKEY(key)|TOADDRESS(address)

|TONUMBER(number)|COUNT(number)

REPRO 명령으로 일반 데이터 셋 이외에도 카탈로그를 담고

있는 특수한 데이터 셋을 대상으로 복사작업을 수행할 수 있

MERGECAT|NOMERGECAT

다. 이러한 카탈로그 데이터 셋 간의 카탈로그 레코드 복사작

업을 하는 경우에 다음 파라미터를 지정할 수 있다.

- MERGECAT: 소스 카탈로그의 레코드를 타겟 카탈로그로

복사한 후에 소스 카탈로그 상에서 레코드를 제거한다.

- NOMERGECAT: 단순히 복사되고 원본 카탈로그에서 카탈

로그 레코드는 삭제되지 않는다.

소스 데이터 셋을 타겟 데이터 셋으로 복사하는 과정에서 타

겟 데이터 셋에 이미 동일한 레코드가 있는 경우의 처리방법

을 지정한다.

REPLACE|NOREPLACE

- REPLACE: 기존의 레코드를 새로운 레코드로 대체한다.

- NOREPLACE: ‘중복 레코드가 발견되었다’는 경고 메시지

만 나타나고, 타겟 데이터 셋의 중복 레코드에 복사하지 않는

다. 즉, 원본 데이터 셋의 해당 레코드는 사용되지 않고 버려

진다. 생략할 경우 기본값은 NOREPLACE이다.

24 Tibero TSAM 안내서

설명파라미터

카탈로그가 아닌 TSAM 데이터 셋이 타겟 데이터 셋인 경우

에 사용한다.

REUSE|NOREUSE

- REUSE: 해당 타겟 데이터 셋에 이미 레코드가 들어있더라

도 맨 처음부터 레코드를 추가한다. (HURBA를 0인 상태로

열고 쓰기동작을 한다.)

- NOREUSE: 타겟 데이터 셋의 마지막 레코드 이후부터 레코

드를 추가하여 기존에 있던 데이터 셋의 레코드를 그대로 둔

상태로 타겟 데이터 셋에 레코드를 복사한다. 기존 레코드를

REUSE한다기 보다 데이터 셋 레코드를 저장하는데 사용되

는 공간을 REUSE한다.

주의

NOMERGECAT을 지정하는 경우 타겟 카탈로그는 비어있어야 한다.

다음은 VSAM.KSDS1 데이터 셋의 50001번 레코드부터 10000개의 레코드를 VSAM.KSDS2 데이터 셋으

로 복사하는 예이다.

//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)

//REPRO EXEC PGM=IDCAMS

//INDD DD DSN=VSAM.KSDS1,DISP=(OLD,KEEP)

//OUTDD DD DSN=VSAM.KSDS2,DISP=SHR

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

REPRO INFILE(INDD) -

OUTFILE(OUTDD) -

SKIP(50000) COUNT(10000)

/*

//

3.10. BLDINDEXBLDINDEX 명령을 사용하여 기존에 존재하는 데이터 셋에 대한 보조 인덱스를 구성한다. BLDINDEX 명

령은 내부적으로 보조 인덱스 클러스터에 하나의 보조키와 다수개의 기본키로 구성되는 레코드를 적재하

는 역할을 담당한다.

BLDINDEX 명령에 지정할 수 있는 파라미터는 다음과 같다.

설명파라미터

보조 인덱스를 구성하는데 사용할 베이스 클러스터를 지정

한다.

INFILE(ddname)

|INDATASET(entryname)

제3장 TSAM 데이터 셋 관리 25

설명파라미터

BLDINDEX 결과로 구성되는 보조 인덱스 클러스터를 지정

한다. BLDINDEX 전에 보조 인덱스는 미리 DEFINE되어야

한다.

OUTFILE(ddname)

|OUTDATASET(entryname)

참고

IDCAMS 호출 전에 실행환경에 의해서 미리 할당된 데이터 셋을 사용하는 경우에는 ddname을 사용

하고, IDCAMS 자체적으로 할당하는 경우에는 entryname을 사용한다.

다음은 VSAM.KSDS1의 보조 인덱스인 VSAM.AIX1을 구성하는 예이다.

//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)

//BLDAIX EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//BASE DD DSN=VSAM.KSDS1,DISP=OLD

//AIX DD DSN=VSAM.AIX1,DISP=OLD

//SYSIN DD *

BLDINDEX INFILE(BASE) -

OUTFILE(AIX)

/*

//

3.11. LISTCATLISTCAT 명령을 사용해서 카탈로그에 정의된 데이터 셋에 관한 다양한 정보를 출력할 수 있다.

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

● 엔트리 객체의 속성

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

● 보호(protection) 관련 정보

● 데이터 셋 액세스 통계 정보

● 저장공간 할당 정보

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

26 Tibero TSAM 안내서

LISTCAT 명령에 지정할 수 있는 파라미터는 다음과 같다.

● [ENTRIES|LEVEL]

LISTCAT 명령의 대상이 되는 카탈로그 엔트리 이름을 지정한다 .

– ENTRIES

카탈로그에 존재하는 엔트리 이름 중에서 지정된 entryname과 이름이 일치하고 세그먼트 개수도 일

치하는 이름만 명령의 대상으로 지정된다.

– LEVEL

카탈로그에 존재하는 엔트리 이름 중에서 지정된 entryname과 이름의 앞부분이 일치하는 이름이 명

령의 대상으로 지정된다. 사용자가 지정한 entryname의 세그먼트 개수보다 많은 세그먼트 개수를 갖

는 이름들도 명령의 대상으로 지정된다.

ENTRIES와 LEVEL의 사용 예는 다음과 같다.

카탈로그가 다음의 엔트리 이름들을 가지고 있는 경우를 가정한다.

1. A.A.B

2. A.B.B

3. A.B.B.C

4. A.B.B.C.C

5. A.C.C

6. A.D

7. A.E

8. A

– ENTRIES(A.*)를 지정한 경우, 6, 7이 명령의 대상으로 선택된다.

– ENTRIES(A.*.B)를 지정한 경우, 1, 2가 명령의 대상으로 선택된다.

– LEVEL(A.*.B)를 지정한 경우, 1, 2, 3, 4가 명령의 대상으로 선택된다.

– LEVEL(A)를 지정한 경우, 1,2,3,4,5,6,7이 모두 명령의 대상으로 선택된다.

– *는 해당 세그먼트의 모든 이름과 일치한다.

제3장 TSAM 데이터 셋 관리 27

● [ALTERNATEINDEX][CLUSTER][DATA][INDEX][PATH][GENERATIONDATAGROUP][NON

VSAM][ALIAS]

지정된 종류의 카탈로그 엔트리에 대해서만 LISTCAT 정보를 출력하도록 하기 위한 파라미터이다. 파

라미터를 지정하지 않는 경우는 카탈로그 엔트리 타입에 대한 필터링을 하지 않고 모든 타입의 엔트리

정보를 모두 출력한다.

예를 들어 LISTCAT CLUSTER라고 지정하는 경우 카탈로그 엔트리 타입이 CLUSTER인 엔트리에 대

한 정보만 출력한다.

2개 이상의 엔트리 타입을 지정하는 것도 가능하다. 즉, LISTCAT DATA INDEX라고 지정하면 카탈로

그 엔트리 타입이 DATA이거나 INDEX인 엔트리에 대한 정보만 출력된다.

이와는 별도로 ENTRIES 파라미터를 지정하는 경우 엔트리 타입이 일치하더라도 엔트리 이름이 ENTRIES

파라미터에 지정된 이름을 만족하지 않는 엔트리들에 대한 정보는 출력되지 않는다.

● NAME|HISTORY|VOLUME|ALLOCATION|ALL

엔트리 타입 필터 및 ENTRIES 파라미터로 지정되는 엔트리 이름 조건을 만족하는 카탈로그 엔트리에

대한 정보를 출력하는데 있어서 얼마나 자세한 레벨의 정보까지 출력할 지를 지정한다.

순서대로 NAME을 지정하면 가장 기본적인 정보만이 출력되고 ALL을 지정하면 모든 해당 엔트리에 대

한 정보가 출력된다.

다음은 VSAM.KSDS1 엔트리에 대한 모든 정보를 출력하는 예이다.

//JOBA JOB OBM,CLASS=B,MSGCLASS=X,MSGLEVEL=(1,1)

//LISTC EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

LISTCAT ENTRIES(VSAM.KSDS1) ALL

/*

//

다음은 위의 LISTCAT 명령을 실행한 결과로 출력되는 내용(SYSPRINT)이다.

IDCAMS run in batch mode

CLUSTER ------------- VSAM.KSDS1

HISTORY

CREATION -------------------- (NULL) DATASET-OWNER -------------- (EMPTY)

RELEASE --------------- ---------- 1 VSAM QUIESCED ----------------- (NO)

PROTECTION-PSWD --------------- (NULL)

ASSOCIATIONS

DATA ------------ VSAM.KSDS1.D

INDEX ----------- VSAM.KSDS1.I

DATA ----------------- VSAM.KSDS1.D

HISTORY

CREATION -------------------- (NULL) DATASET-OWNER -------------- (EMPTY)

28 Tibero TSAM 안내서

RELEASE -------------------------- 1

PROTECTION-PSWD --------------- (NULL)

ASSOCIATION

CLUSTER ----------- VSAM.KSDS1

ATTRIBUTES

AVGLRECL ----------------------- 350 MAXLRECL ----------------------- 350

KEYLEN -------------------------- 10 RKP ------------------------------ 0

CISIZE ------------------------ 4096 INDEXED

NON-SPANNED

STATISTICS

REC-DELETED ---------------------- 0 REC-INSERTED ----------------- 10445

REC-RETRIEVED -------------------- 0 REC-TOTAL -------------------- 10445

REC-UPDATED ---------------------- 0 TIMESTAMP ------------------- (NULL)

ALLOCATION

HI-A-RBA ------------------------- 0 HI-U-RBA ------------------------- 0

VOLUMES

VOLSER ---------------------- (TSAM)

INDEX --------------- VSAM.KSDS1.I

HISTORY

CREATION -------------------- (NULL) DATASET-OWNER -------------- (EMPTY)

RELEASE -------------------------- 1

PROTECTION-PSWD --------------- (NULL)

ASSOCIATION

CLUSTER ----------- VSAM.KSDS1

ATTRIBUTES

AVGLRECL ----------------------- 350 MAXLRECL ----------------------- 350

KEYLEN -------------------------- 10 RKP ------------------------------ 0

CISIZE ------------------------ 4096

STATISTICS

INDEX:

ENTRIES/SECT ----------------- 254 HI-LEVEL-RBA --------------- 12288

LEVELS ------------------------- 2 SEQ-SET-RBA ----------------- 4096

REC-DELETED ---------------------- 0 REC-INSERTED ----------------- 10445

REC-RETRIEVED -------------------- 0 REC-TOTAL -------------------- 10445

REC-UPDATED ---------------------- 0 TIMESTAMP ------------------- (NULL)

ALLOCATION

HI-A-RBA ------------------------- 0 HI-U-RBA ------------------------- 0

VOLUMES

VOLSER ---------------------- (TSAM)

참고

LISTCAT에 대한 자세한 내용은 OpenFrame 안내서 중 "유틸리티 참조 안내서"를 참고한다.

제3장 TSAM 데이터 셋 관리 29

제4장 TSAM 데이터 셋 처리

TSAM 데이터 셋을 처리하려면 먼저 해당하는 데이터 셋을 할당하고 나서, 각 액세스 메소드가 제공하는

인터페이스를 사용하여 데이터에 접근할 수 있다.

데이터 셋을 할당한다는 것은 다음의 2가지 작업을 의미한다:

● 새로운 데이터 셋을 위한 디스크 공간을 할당한다.

● JOB STEP과 사용하려는 데이터 셋을 논리적으로 연결한다.

아래와 같은 방법으로 데이터 셋을 할당할 수 있다.

● Access Method Service (AMS)

IDCAMS의 ALLOCATE 명령을 이용하여 데이터 셋을 할당한다.

● JCL (Job Control Language)

모든 데이터 셋은 JCL을 사용해서 직접 정의될 수 있다.

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

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

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

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

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

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

참고

TSAM 데이터 셋 이외의 Non-VSAM 데이터 셋에 대해서도 처리절차는 동일하다.

제4장 TSAM 데이터 셋 처리 31

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

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

다.

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

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

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

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

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

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

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

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

되어야 한다.

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

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

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

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

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

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

적으로 연결시켜준다.

OPEN 인터페이스는 DCB 구조체를 완성하고 데이터 셋을 초기화하며 데이터 셋 처리에 필요한 시스템

내부 버퍼를 준비한다.

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

● 카탈로그 정보

● JCL DD 문장

● 애플리케이션

CLOSE 인터페이스는 애플리케이션과 데이터 셋 사이의 연결을 끊는다.

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

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

32 Tibero TSAM 안내서

● 데이터 셋 크기 정보 등 카탈로그 정보를 수정한다.

● 데이터 셋 처리에 사용되었던 DCB 구조체를 해제한다.

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

는지, 데이터 셋을 기록하고 있는지, 아니면 두 가지 모두를 하고 있는지를 설정하기 위한 모드이다.

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

● 입력 모드 (Input Mode)

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

셋을 변경하려고 시도하면 에러가 발생한다. 존재하지 않는 데이터 셋을 열려고 하는 경우, OPTIONAL

옵션을 지정하지 않는 한 에러가 발생한다.

● 출력 모드 (Output Mode)

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

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

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

● 입출력 모드 (Input/Output Mode)

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

TIONAL 옵션을 지정하지 않는 한 에러가 발생한다.

● 확장 모드 (Extend Mode)

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

터 셋에 쓰기를 할 때 사용된다.

애플리케이션은 파일의 끝 부분에 새로운 레코드를 기록한다. 데이터 셋이 존재하지 않으면, OPTIONAL

옵션을 지정하지 않는 한 에러가 발생한다.

참고

해당 데이터 셋이 존재하지 않을 경우, OPTIONAL 옵션이 지정되어 있다면, 데이터 셋을 생성해준

다.

제4장 TSAM 데이터 셋 처리 33

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

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

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

● 순차 액세스 (Sequential Access)

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

미한다.

ESDS, RRDS 또는 KSDS 데이터 셋은 모두 레코드에 대한 순서가 존재하기 때문에 순차적으로 액세스

할 수 있다. RRDS의 경우에 순서는 상대 레코드 번호(RRN)에 의해서 정해지고, KSDS의 경우에 순서

는 기본키 또는 보조키 중 하나의 영문자(Alphanumeric) 키를 통해서 정해지게 된다.

● 임의 액세스 (Random Access)

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

ESDS, RRDS나 KSDS 모두 임의 액세스 모드를 지원한다. 임의 액세스 방식으로 데이터 셋의 레코드

를 읽으려면 사용자는 데이터 셋의 구성 방식에 따라 RBA, RRN, 키 값과 같은 레코드 인식자를 지정해

야 한다.

● 동적 액세스 (Dynamic Access)

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

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

한다.

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

처리할 수 있다.

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

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

다음의 4가지 레코드 액세스 인터페이스를 사용하여 데이터 셋의 레코드를 관리한다.

● WRITE (레코드 삽입/추가)

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

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

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

● READ (레코드 읽기)

34 Tibero TSAM 안내서

– 순차 액세스: 애플리케이션이 데이터 셋에 처음으로 순차 액세스를 시도하면 TSAM은 항상 1번째 레

코드부터 읽기 시작한다. 만약 이전에 데이터 셋에 임의 액세스를 한 경우라면 내부 레코드 포인터가

변경되어있을 수 있으므로 항상 START 인터페이스를 사용해서 레코드 포인터를 초기화한 다음 순

차 액세스 인터페이스를 사용하는 것이 바람직하다.

– 임의 액세스: TSAM ESDS, KSDS나 RRDS는 레코드 인식자를 통해 임의 액세스를 지원한다. 임의

액세스 모드는 내부 레코드 포인터에 영향을 받지 않는다. 읽고자 하는 레코드를 찾기 위해서는 TSAM

데이터 셋 종류에 따라 다음과 같은 정보를 제공해야 한다.

• KSDS : KEY

• RRDS : RRN

• ESDS : RBA

참고

ESDS에 대해서도 RBA를 이용한 임의 액세스가 가능하지만 일반적인 업무 애플리케이션에서 사용

하기에는 적합하지 않다.

● REWRITE (레코드 수정)

TSAM의 REWRITE 인터페이스를 사용하면 레코드의 내용을 수정할 수 있다. 단 TSAM KSDS의 레코

드를 수정할 때에는 기본키의 내용은 수정할 수 없다.

● DELETE (레코드 삭제)

TSAM의 DELETE 인터페이스를 사용하면 데이터 셋의 레코드를 삭제할 수 있다. TSAM RRDS에서 레

코드를 삭제하면, 삭제된 레코드가 사용하던 공간을 재사용할 수 있다. 단 TSAM ESDS에서는 레코드

를 삭제할 수 없다.

4.6. BrowsingTSAM에서 임의의 레코드를 읽을 때와 같은 방식으로 TSAM의 START_BR 인터페이스를 사용하면 브라

우징을 시작할 수 있다. 하지만 START_BR 인터페이스는 브라우저의 포인터만 초기화하고 레코드를 읽

지는 않는다. READ_NEXT 인터페이스는 START_BR 인터페이스로 정해진 시작위치부터 레코드를 순차

적으로 읽는다. READ_PREV 인터페이스를 사용하면 데이터 셋을 역순으로 읽을 수 있다.

브라우저가 시작되면 RESET_BR 인터페이스를 사용해서 현재 브라우징하는 포인터를 변경할 수 있다.

단순히 READ_NEXT 또는 READ_PREV 인터페이스의 파라미터인 RIDFLD를 변경해도 바로 브라우징

포인터가 변경된다.

제4장 TSAM 데이터 셋 처리 35

4.7. Transaction트랜잭션은 한 번에 처리되어야 할 하나 이상의 일련의 작업의 묶음을 나타내는 논리적인 작업단위이다.

TX_BEGIN 인터페이스는 새로운 트랜잭션을 시작할 때 사용한다. 사용 중인 트랜잭션을 종료할 때에는

TX_END 인터페이스를 사용한다.

현재 트랜잭션을 COMMIT할 때에는 TX_COMMIT 인터페이스를, ROLLBACK할 때에는 TX_ROLLBACK

인터페이스를 사용한다.

36 Tibero TSAM 안내서

Appendix A. TSAM API

본 장에서는 TSAM 클라이언트 라이브러리를 사용하여 직접 애플리케이션을 작성하기 위해 TSAM에서

제공하는 API에 대해서 설명한다.

TSAM에서 제공하는 API는 다음과 같이 분류할 수 있다.

Connection

설명API

TSAM 서버에 접속한다.tsam_connect()

TSAM 서버로부터의 접속을 끊는다.tsam_disconnect()

Transaction

설명API

새로운 트랜잭션을 시작한다.tsam_tx_start()

현재 트랜잭션을 종료한다.tsam_tx_end()

현재 트랜잭션을 COMMIT한다.tsam_tx_commit()

현재 트랜잭션을 ROLLBACK한다.tsam_tx_rollback()

File Management

설명API

새로운 데이터 셋을 생성한다.tsam_create()

기존에 있는 데이터 셋을 삭제한다.tsam_remove()

기존에 있는 데이터 셋의 내용을 모두 삭제한다.tsam_truncate()

기존에 있는 데이터 셋의 속성을 변경한다.tsam_alter()

기존에 있는 데이터 셋의 통계 정보를 얻어온다.tsam_stat()

데이터 셋 이름을 파일이름으로 바꾸어 준다.tsam_filename()

File Open/Close

설명API

처리를 위해 데이터 셋을 연다.tsam_open()

처리를 위해 열었던 데이터 셋을 닫는다.tsam_close()

Appendix A. TSAM API 37

Record Access

설명API

순차처리를 위해 내부 레코드 포인터를 이동시킨다.tsam_start()

데이터 셋에서 한 레코드를 읽는다.tsam_read()

데이터 셋의 레코드에 실행 중인 Lock을 해제한다.tsam_unlock()

데이터 셋에 한 레코드를 기록한다.tsam_write()

데이터 셋에 있는 한 레코드의 내용을 변경한다.tsam_rewrite()

데이터 셋에 있는 한 레코드를 삭제한다.tsam_delete()

Browsing

설명API

데이터 셋의 순차처리를 위해 새로운 브라우저를 준비한다.tsam_start_br()

기존에 사용중인 데이터 셋 브라우저의 포인터를 이동시킨다.tsam_reset_br()

기존에 사용중인 데이터 셋 브라우저를 닫는다.tsam_end_br()

데이터 셋 브라우저를 이용해 다음 레코드를 읽는다.tsam_read_next()

데이터 셋 브라우저를 이용해 이전 레코드를 읽는다.tsam_read_prev()

Sphere Open/Close

설명API

처리를 위해 스피어를 연다.tsam_sphere_open()

처리를 위해 열었던 스피어를 닫는다.tsam_sphere_close()

Sphere Record Access

설명API

순차처리를 위해 내부 레코드 포인터를 이동시킨다.tsam_sphere_start()

스피어에서 한 레코드를 읽는다.tsam_sphere_read()

스피어의 레코드에 실행 중인 Lock을 해제한다.tsam_sphere_unlock()

스피어에 한 레코드를 기록한다.tsam_sphere_write()

스피어에 있는 한 레코드를 내용을 변경한다.tsam_sphere_rewrite()

스피어에 있는 한 레코드를 삭제한다.tsam_sphere_delete()

38 Tibero TSAM 안내서

Sphere Browsing

설명API

스피어의 순차처리를 위해 새로운 브라우저를 준비한다.tsam_sphere_start_br()

기존에 사용 중인 스피어 브라우저의 포인터를 이동시킨다.tsam_sphere_reset_br()

기존에 사용 중인 스피어 브라우저를 닫는다.tsam_sphere_end_br()

스피어 브라우저를 이용해 다음 레코드를 읽는다.tsam_sphere_read_next()

스피어 브라우저를 이용해 이전 레코드를 읽는다.tsam_sphere_read_prev()

A.1. Connection

tsam_connect()

TSAM 서버에 접속한다.

TSAM의 기능을 사용하기 위해서는 먼저 TSAM 서버에 접속해야 한다. TSAM 서버로 접속하기 위해서는

사용자 ID, 비밀번호, 그리고 데이터베이스 서비스 이름을 지정해야한다.

TSAM/Tibero를 사용하는 경우라면, 데이터베이스 서비스 명에 TB_SID 값 (Tibeo 데이터베이스의 서비

스 ID)을 지정해야 한다. TSAM/RDB(Oracle)를 사용하는 경우라면, 데이터베이스 서비스 이름에 TNS 이

름 (Oracle 데이터베이스의 서비스 이름)을 지정해야 한다.

● 프로토타입

int tsam_connect(int cd, tsam_connect_t *conn);

● 파라미터

설명파라미터

커넥션 IDcd (입력)

커넥션 ID는 접속을 시도할 때 사용자가 주어야 하는 파라미터 값이다. 0에서부터 시

작하는 양의 정수를 커넥션 ID로 줄 수 있다. 한 프로세스에서는 기존에 연결에 성공

한 커넥션 ID로 다시 커넥션을 시도하면 TSAM_ERR_DUPLICATE_CONN_ID 에러

코드가 반환된다.

사용자ID, 패스워드, 데이터베이스 등의 접속 정보conn (입력)

● 반환값

TSAM 서버 접속에 성공했을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를 반환한

다.

Appendix A. TSAM API 39

[참고]

tsam_connect_t 구조체는 아래와 같이 정의되어 있다.

typedef struct {

char username[TSAM_USERNAME_LEN + 1];

char password[TSAM_PASSWORD_LEN + 1];

char database[TSAM_DATABASE_LEN + 1];

} tsam_connect_t;

입력 항목에 대한 설명은 다음과 같다.

설명항목

사용자 ID를 입력한다.username 멤버

비밀번호를 입력한다.password 멤버

접속하려는 TSAM 서버의 데이터베이스 서비스 명을 입력한다.database 멤버

tsam_disconnect()

TSAM 서버로부터의 접속을 끊는다. TSAM 서버로부터의 접속이 모두 끊기면 더 이상 TSAM의 기능을 사

용할 수 없다.

● 프로토타입

int tsam_disconnect(int cd);

● 파라미터

설명파라미터

커넥션 IDcd (입력)

성공한 tsam_connect() 함수에서 사용되었던 커넥션 ID를 함수의 파라미터로 사용한

다. 잘못된 커넥션 ID를 파라미터로 주면 TSAM_ERR_INVALID_CONN_ID 에러코드

가 반환된다.

● 반환값

성공적으로 TSAM 서버와의 접속을 해제했을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에

러코드를 반환한다.

40 Tibero TSAM 안내서

A.2. Transaction

tsam_tx_start()

새로운 트랜잭션을 시작한다.

성공적으로 TSAM 서버에 접속한 후에 트랜잭션을 시작할 수 있고, 트랜잭션이 시작되지 않으면 데이터

셋의 레코드에 접근할 수 없다.

● 프로토타입

int tsam_tx_start(int txid, int cd, int flags);

● 파라미터

설명파라미터

트랜잭션 IDtxid (입력)

트랜잭션 ID는 트랜잭션을 시작할 때 사용자가 주어야 하는 파라미터 값이다. 0부터

시작하는 양의 정수를 트랜잭션 ID로 줄 수 있다. 한 프로세스에서는 기존에 성공적으

로 시작된 트랜잭션 ID로 다시 트랜잭션을 시작하려면 TSAM_ERR_DUPLI

CATE_TX_ID 에러코드가 반환된다.

커넥션 IDcd (입력)

성공한 tsam_connect() 함수에서 사용되었던 커넥션 ID를 함수의 파라미터로 사용한

다. 잘못된 커넥션 ID를 파라미터로 주면 TSAM_ERR_INVALID_CONN_ID 에러코드

가 반환된다.

트랜잭션 시작 플래그flags (입력)

트랜잭션 시작 플래그는 지정된 플래그 중 선택해서 사용할 수 있다. 여러 플래그를

동시에 사용하려면 '|'(Bitwise Or) 연산자를 붙여서 사용할 수 있다.

● 반환값

새로운 트랜잭션이 성공적으로 시작되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러

코드를 반환한다.

Appendix A. TSAM API 41

[참고]

트랜잭션 시작 플래그는 다음의 플래그 중 선택해서 사용할 수 있다.

설명플래그

읽기/쓰기 트랜잭션을 시작한다.TSAM_TX_READWRITE

읽기전용 트랜잭션을 시작한다.TSAM_TX_READONLY

Serializable 트랜잭션을 시작한다.TSAM_TX_SERIALIZABLE

자동 COMMIT 트랜잭션을 시작한다.TSAM_TX_AUTOCOMMIT

tsam_tx_end()

현재 트랜잭션을 종료한다.

● 프로토타입

int tsam_tx_end(int txid);

● 파라미터

설명파라미터

트랜잭션 IDtxid (입력)

성공한 tsam_tx_start() 함수에서 사용되었던 트랜잭션 ID를 함수의 파라미터로 사용

한다. 잘못된 트랜잭션 ID를 주면 TSAM_ERR_INVALID_TX_ID 에러코드가 반환된

다. 트랜잭션이 종료되면 더 이상 데이터 셋의 레코드에 액세스할 수 없다.

● 반환값

트랜잭션이 성공적으로 종료되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를

반환한다.

tsam_tx_commit()

현재 트랜잭션을 COMMIT한다.

● 프로토타입

int tsam_tx_commit(int txid);

● 파라미터

42 Tibero TSAM 안내서

설명파라미터

트랜잭션 IDtxid (입력)

성공한 tsam_tx_start() 함수에서 사용되었던 트랜잭션 ID를 함수의 파라미터로 사용

한다. 잘못된 트랜잭션 ID를 주면 TSAM_ERR_INVALID_TX_ID 에러코드가 반환된

다.

● 반환값

트랜잭션이 성공적으로 COMMIT 되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코

드를 반환한다.

tsam_tx_rollback()

현재 트랜잭션을 ROLLBACK한다.

● 프로토타입

int tsam_tx_rollback(int txid);

● 파라미터

설명파라미터

트랜잭션 IDtxid (입력)

성공한 tsam_tx_start() 함수에서 사용되었던 트랜잭션 ID를 함수의 파라미터로 사용

한다. 잘못된 트랜잭션 ID를 주면 TSAM_ERR_INVALID_TX_ID 에러코드가 반환된

다.

● 반환값

트랜잭션이 성공적으로 ROLLBACK 되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에

러코드를 반환한다.

Appendix A. TSAM API 43

A.3. File Management

tsam_create()

새로운 데이터 셋을 생성한다. 성공적으로 TSAM 서버에 접속한 후에 새로운 데이터 셋을 생성할 수 있다.

● 프로토타입

int tsam_create(int cd, char *filename, tsam_create_t *create);

● 파라미터

설명파라미터

커넥션 IDcd (입력)

성공한 tsam_connect() 함수에서 사용되었던 커넥션 ID를 함수의 파라미터로 사용한

다. 잘못된 커넥션 ID를 파라미터로 주면 TSAM_ERR_INVALID_CONN_ID 에러코드

가 반환된다.

파일이름filename (입력)

데이터 셋 이름을 파일이름으로 바꿀 때에는 tsam_filename() 함수를 사용한다. 파일

이름은 데이터 셋 이름과는 다른 개념으로 자세한 내용은 tsam_filename() 함수의 설

명을 참고하기 바란다.

데이터 셋이 최초로 생성될 때 파일이름이 카탈로그에 등록되므로 매번 데이터 셋을

열 때마다 이름을 바꾸는 작업을 할 필요가 없다.

생성 정보create (입력)

● 반환값

데이터 셋이 성공적으로 생성되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를

반환한다.

[참고]

tsam_create_t 구조체는 아래와 같이 정의되어 있다.

typedef struct {

/* association information */

char dataname[TSAM_NAME_LEN + 1];

char indexname[TSAM_NAME_LEN + 1];

44 Tibero TSAM 안내서

/* volumes information */

char volser[8]; /* volume serial number */

/* allocation information */

...

/* VSAM attributes */

int32_t cisize; /* size of control interval in bytes */

int16_t avglrecl; /* average record length */

int16_t maxlrecl; /* maximum record length */

int16_t keyfmt; /* KSDS key format */

int16_t keypos; /* KSDS key position */

int16_t keylen; /* KSDS key length */

...

/* VSAM information */

uint8_t vsamtype; /* VSAM data set type information */

...

/* component attributes */

...

} tsam_create_t;

tsam_remove()

기존에 있는 데이터 셋을 삭제한다. 성공적으로 TSAM 서버에 접속한 후에 기존에 있는 데이터 셋을 삭제

할 수 있다.

● 프로토타입

int tsam_remove(int cd, char *filename);

● 파라미터

설명파라미터

커넥션 IDcd (입력)

성공한 tsam_connect() 함수에서 사용되었던 커넥션 ID를 함수의 파라미터로 사용한

다. 잘못된 커넥션 ID를 파라미터로 주면 TSAM_ERR_INVALID_CONN_ID 에러코드

가 반환된다.

파일이름filename (입력)

데이터 셋 이름을 파일이름으로 바꿀 때에는 tsam_filename() 함수를 사용한다. 파일

이름은 데이터 셋 이름과는 다른 개념으로 자세한 내용은 tsam_filename() 함수의 설

명을 참고하기 바란다.

● 반환값

Appendix A. TSAM API 45

데이터 셋이 성공적으로 삭제되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를

반환한다.

tsam_truncate()

기존에 있는 데이터 셋의 내용을 모두 삭제한다. 성공적으로 TSAM 서버에 접속한 후에 기존에 있는 데이

터 셋의 내용을 모두 삭제할 수 있다.

● 프로토타입

int tsam_truncate(int cd, char *filename);

● 파라미터

설명파라미터

커넥션 IDcd (입력)

성공한 tsam_connect() 함수에서 사용되었던 커넥션 ID를 함수의 파라미터로 사용한

다. 잘못된 커넥션 ID를 파라미터로 주면 TSAM_ERR_INVALID_CONN_ID 에러코드

가 반환된다.

파일이름filename (입력)

데이터 셋 이름을 파일이름으로 바꿀 때에는 tsam_filename() 함수를 사용한다. 파일

이름은 데이터 셋 이름과는 다른 개념으로 자세한 내용은 tsam_filename() 함수의 설

명을 참고하기 바란다.

● 반환값

데이터 셋의 내용이 성공적으로 삭제되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에

러코드를 반환한다.

tsam_alter()

기존에 있는 데이터 셋의 속성을 변경한다. 성공적으로 TSAM 서버에 접속한 후에 기존에 있는 데이터 셋

의 속성을 변경할 수 있다.

● 프로토타입

int tsam_alter(int cd, char *filename, tsam_alter_t *alter);

● 파라미터

46 Tibero TSAM 안내서

설명파라미터

커넥션 IDcd (입력)

성공한 tsam_connect() 함수에서 사용되었던 커넥션 ID를 함수의 파라미터로 사용한

다. 잘못된 커넥션 ID를 파라미터로 주면 TSAM_ERR_INVALID_CONN_ID 에러코드

가 반환된다.

파일이름filename (입력)

데이터 셋 이름을 파일이름으로 바꿀 때에는 tsam_filename() 함수를 사용한다. 파일

이름은 데이터 셋 이름과는 다른 개념으로 자세한 내용은 tsam_filename() 함수의 설

명을 참고하기 바란다.

변경 정보alter (입력)

● 반환값

데이터 셋의 속성이 성공적으로 변경되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에

러코드를 반환한다.

[참고]

tsam_alter_t 구조체는 아래와 같이 정의되어 있다.

typedef struct {

/* association information */

...

/* VSAM attributes */

int32_t avglrecl;

int32_t maxlrecl;

int16_t keypos;

int16_t keylen;

...

} tsam_alter_t;

tsam_stat()

기존에 있는 데이터 셋의 통계 정보를 얻어온다. 성공적으로 TSAM 서버에 접속한 후에 기존에 있는 데이

터 셋의 통계 정보를 얻을 수 있다.

● 프로토타입

int tsam_stat(int cd, char *filename, tsam_stat_t *stat);

● 파라미터

Appendix A. TSAM API 47

설명파라미터

커넥션 IDcd (입력)

성공한 tsam_connect() 함수에서 사용되었던 커넥션 ID를 함수의 파라미터로 사용한

다. 잘못된 커넥션 ID를 파라미터로 주면 TSAM_ERR_INVALID_CONN_ID 에러코드

가 반환된다.

파일이름filename (입력)

데이터 셋 이름을 파일이름으로 바꿀 때에는 tsam_filename() 함수를 사용한다. 파일

이름은 데이터 셋 이름과는 다른 개념으로 자세한 내용은 tsam_filename() 함수의 설

명을 참고하기 바란다.

통계 정보stat (출력)

● 반환값

데이터 셋의 통계정보를 성공적으로 얻어올 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에

러코드를 반환한다.

[참고]

tsam_stat_t 구조체는 아래와 같이 정의되어 있다.

typedef struct {

/* allocation information */

...

/* statistics information */

int32_t rec_deleted; /* number of deleted records */

int32_t rec_inserted; /* number of inserted records */

int32_t rec_retrieved; /* number of retrieved records */

int32_t rec_updated; /* number of updated records */

int32_t rec_total; /* number of logical records */

...

} tsam_stat_t;

tsam_filename()

데이터 셋 이름을 파일이름으로 바꾸어 준다. 성공적으로 TSAM 서버에 접속한 후에 이 함수를 사용할 수

있다.

● 프로토타입

int tsam_filename(int cd, char *ds_name, char *filename);

48 Tibero TSAM 안내서

● 파라미터

설명파라미터

커넥션 IDcd (입력)

성공한 tsam_connect() 함수에서 사용되었던 커넥션 ID를 함수의 파라미터로 사용한

다. 잘못된 커넥션 ID를 파라미터로 주면 TSAM_ERR_INVALID_CONN_ID 에러코드

가 반환된다.

데이터 셋 이름ds_name (입력)

같은 데이터 셋 이름을 가지고 tsam_filename() 함수를 여러 번 호출하면 동일한 파일

이름이 반환되어야 하지만, 구현에 따라서 매번 다른 파일이름이 반환될 수도 있다.

따라서 데이터 셋이 처음 생성될 때, 변환된 파일이름을 카탈로그에 등록하여 이후에

는 카탈로그를 조회하여 파일이름을 찾도록 한다.

파일이름filename (출력)

파일이름은 데이터 셋 이름과는 다른 개념으로 TSAM에서 구현하는 방법에 따라 데

이터 셋 이름을 실제 물리적인 파일이름으로 변환해서 사용한다. TSAM/Tibero 및

TSAM/RDB(Oracle) 모두 tsam_filename()함수를 이용하여 데이터 셋 이름을 테이블

이름으로 바꾸어 사용한다.

주의

테이블 이름은 각 데이터베이스 제품마다 제약사항이 있어서 데이터 셋 이름을 바로 테이블 이름으

로 사용할 수 없다. 예를 들면 Oracle에서는 테이블 이름에 마침표(.) 문자를 사용할 수 없고, 테이블

이름으로 30문자 이상 사용할 수 없다.

● 반환값

데이터 셋의 이름이 성공적으로 파일이름으로 변환되었을 경우 0을 반환하고 그 외의 에러가 발생한 경

우 음수의 에러코드를 반환한다.

A.4. File Open/Close

tsam_open()

처리를 하기 위해 데이터 셋을 연다. 성공적으로 TSAM 서버에 접속한 후에 데이터 셋을 열 수 있고, 데이

터 셋을 열지 않으면 해당하는 데이터 셋의 레코드에 액세스할 수 없다.

● 프로토타입

Appendix A. TSAM API 49

int tsam_open(int fd, int cd, tsam_file_t *file, tsam_report_t *report);

● 파라미터

설명파라미터

파일 IDfd (입력)

파일 ID는 데이터 셋을 열 때 사용자가 주어야 하는 파라미터 값이다. 0에서부터 시작

하는 양의 정수를 파일 ID로 줄 수 있다. 한 프로세스에서는 기존에 열어서 사용하고

있는 파일 ID로 다시 데이터 셋을 열려고 하면 TSAM_ERR_DUPLICATE_FD 에러코

드가 반환된다.

커넥션 IDcd (입력)

성공한 tsam_connect() 함수에서 사용되었던 커넥션 ID를 함수의 파라미터로 사용한

다. 잘못된 커넥션 ID를 파라미터로 주면 TSAM_ERR_INVALID_CONN_ID 에러코드

가 반환된다.

데이터 셋 정보file (입력)

데이터 셋 정보는 열어서 처리하려고 하는 데이터 셋에 대한 메타정보를 담고 있다.

이 메타정보는 카탈로그를 조회하여 데이터 셋을 열기 전에 구성해서 tsam_open()

함수의 파라미터로 전달해 주어야 한다.

실시간 리포트 버퍼report (입력)

실시간 리포트 버퍼는 데이터 셋 openflags (tsam_file_t의 openflags 필드)에

TSAM_FLAG_REPORT_RUNTIME 옵션이 있을 때 사용되며, 레코드가 조회되고, 삽

입되고, 갱신되고, 삭제될 때마다 실시간 리포트 버퍼에 있는 멤버의 내용을 갱신해

준다.

● 반환값

데이터 셋이 성공적으로 열렸을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를 반

환한다.

[참고]

tsam_file_t 구조체는 아래와 같이 정의되어 있다.

typedef struct {

/* comminication handle */

...

/* association information */

char filename[TSAM_NAME_LEN + 1];

char dataname[TSAM_NAME_LEN + 1];

50 Tibero TSAM 안내서

char indexname[TSAM_NAME_LEN + 1];

/* volumes information */

char volser[8]; /* volume serial number */

/* open flags */

uint32_t openflags; /* file open flags */

uint16_t permissions; /* access permission */

/* VSAM attributes */

int16_t avglrecl; /* average record length */

int16_t maxlrecl; /* maximum record length */

int16_t keyfmt; /* KSDS key format */

int16_t keypos; /* KSDS key position */

int16_t keylen; /* KSDS key length */

...

/* VSAM information */

uint8_t vsamtype; /* VSAM data set type information */

...

} tsam_file_t;

tsam_report_t 구조체는 아래와 같이 정의되어 있다.

typedef struct {

/* statistics information */

int32_t rec_deleted; /* number of deleted records */

int32_t rec_inserted; /* number of inserted records */

int32_t rec_retrieved; /* number of retrieved records */

int32_t rec_updated; /* number of updated records */

} tsam_report_t;

tsam_open() 함수에서 사용할 수 있는 오픈 플래그의 종류는 다음과 같다.

설명오픈 플래그

입력 모드로 데이터 셋을 연다.TSAM_OPEN_INPUT

출력 모드로 데이터 셋을 연다.TSAM_OPEN_OUTPUT

입출력 모드로 데이터 셋을 연다.TSAM_OPEN_INOUT

확장 모드로 데이터 셋을 연다.TSAM_OPEN_EXTEND

순차 액세스 모드로 데이터 셋을 연다.TSAM_ACCESS_SEQUENTIAL

임의 액세스 모드로 데이터 셋을 연다.TSAM_ACCESS_RANDOM

동적 액세스 모드로 데이터 셋을 연다.TSAM_ACCESS_DYNAMIC

배타적으로 데이터 셋을 연다.TSAM_LOCK_EXCLUSIVE

데이터 셋이 없을 경우 새로 생성한다.TSAM_FLAG_OPTIONAL

실시간 리포팅 기능을 사용한다.TSAM_FLAG_REPORT_RUNTIME

Appendix A. TSAM API 51

tsam_close()

처리를 위해 열었던 데이터 셋을 닫는다.데이터 셋이 닫히면 더 이상 해당하는 데이터 셋의 레코드에 액세

스할 수 없다.

● 프로토타입

int tsam_close(int fd);

● 파라미터

설명파라미터

파일 IDfd (입력)

성공한 tsam_open() 함수에서 사용되었던 파일 ID를 함수의 파라미터로 사용한다.

잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

● 반환값

데이터 셋이 성공적으로 닫혔을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를 반

환한다.

A.5. Record Access

tsam_start()

순차처리를 위해 내부 레코드 포인터를 이동시킨다. 성공적으로 데이터 셋이 열린 후에 이 함수를 사용할

수 있다.

데이터 셋의 순차처리는 TSAM_FLAG_NEXT 또는 TSAM_FLAG_PREV 옵션과 같이 tsam_read() 함수

를 이용해서 데이터 셋을 처음부터 끝까지 레코드 단위로 읽어서 처리하는 방식을 의미한다.

이 때 데이터 셋의 처음부터가 아니라 중간부터 데이터를 처리하기 위해서는 tsam_start() 함수를 이용해

서 내부 레코드 포인터를 이동시키면 tsam_read() 함수에서는 내부 레코드 포인터가 가리키고 있는 레코

드부터 읽기 시작한다.

● 프로토타입

int tsam_start(int fd, void *ridfld, int keylen, int flags);

● 파라미터

52 Tibero TSAM 안내서

설명파라미터

파일 IDfd (입력)

성공한 tsam_open() 함수에서 사용되었던 파일 ID를 함수 파라미터로 사용한다. 잘

못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 데이터 셋의 특별한 지점으로 이동시키는데 사용되는 위치 정보

이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정해 주는

파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없을 경우에는 검색

키 길이가 데이터 셋의 키 길이와 일치해야 하고, TSAM_FLAG_GENERIC 플래그가

있을 경우에는 검색 키 길이가 데이터 셋의 키 길이보다 작아야 한다.

옵션 플래그flags (입력)

● 반환값

내부 포인터가 성공적으로 이동된 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를

반환한다.

[참고]

tsam_start() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

검색 키의 내용과 전체 키가 일치하는 레코드로 이동시킨다.TSAM_FLAG_EQUAL

검색 키의 내용보다 전체 키가 같거나 큰 레코드로 이동시킨다.TSAM_FLAG_GTEQ

데이터 셋의 처음 레코드로 이동시킨다.TSAM_FLAG_FIRST

데이터 셋의 마지막 레코드로 이동시킨다.TSAM_FLAG_LAST

Appendix A. TSAM API 53

tsam_read()

데이터 셋에서 한 레코드를 읽는다. 성공적으로 데이터 셋이 열린 후에 이 함수를 사용할 수 있다.

tsam_read() 함수는 데이터 셋을 순차 처리하거나 직접 처리하는 데에 모두 사용된다. 순차처리를 할 경

우에는 옵션 플래그에 TSAM_FLAG_NEXT 옵션이나 TSAM_FLAG_PREV 옵션을 같이 사용한다.

● 프로토타입

int tsam_read(int fd, void *ridfld, int keylen, char *buf, int *buflen, int flags);

● 파라미터

설명파라미터

파일 IDfd (입력)

성공한 tsam_open() 함수에서 사용되었던 파일 ID를 함수 파라미터로 사용한다. 잘

못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 데이터 셋의 특별한 지점의 레코드를 직접 읽는데 사용되는 위치

정보이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정해 주는

파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없을 경우에는 검색

키 길이가 데이터 셋의 키 길이와 일치해야 하고, TSAM_FLAG_GENERIC 플래그가

있을 경우에는 검색 키 길이가 데이터 셋의 키 길이보다 작아야 한다.

레코드 버퍼buf (출력)

버퍼 크기buflen (입력/출

력)

옵션 플래그flags (입력)

● 반환값

옵션 플래그에 TSAM_FLAG_UPDATE 옵션이 없고, 데이터 셋에서 레코드가 성공적으로 읽힌 경우 0

을 반환하고, 옵션 플래그에 TSAM_FLAG_UPDATE 옵션이 있는 경우에는 0에서부터 시작하는 양의

정수로 된 Lock 토큰을 반환한다. 그 외의 에러가 발생한 경우 음수의 에러코드를 반환한다.

54 Tibero TSAM 안내서

[참고]

tsam_read() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

검색 키의 내용과 전체 키가 일치하는 레코드를 읽는다.TSAM_FLAG_EQUAL

검색 키의 내용보다 전체 키가 같거나 큰 레코드를 읽는다.TSAM_FLAG_GTEQ

데이터 셋의 처음 레코드를 읽는다.TSAM_FLAG_FIRST

데이터 셋의 마지막 레코드를 읽는다.TSAM_FLAG_LAST

데이터 셋의 다음 레코드를 읽는다. (순차처리)TSAM_FLAG_NEXT

데이터 셋의 이전 레코드를 읽는다. (순차처리)TSAM_FLAG_PREV

지정된 레코드를 Lock 상태로 만든다.TSAM_FLAG_UPDATE

해당하는 레코드는 Lock 상태가 되고, 반환값으로 Lock 토큰을 반환

한다. 반환된 Lock 토큰은 나중에 tsam_unlock(), tsam_rewrite(),

tsam_delete() 함수에서 레코드 인식 필드로 사용될 수 있다.

레코드가 이미 Lock 상태이면 기다리지 않고 바로 에러

(TSAM_ERR_RECORD_LOCKED)를 반환한다.

TSAM_FLAG_NOSUSPEND

tsam_unlock()

데이터 셋의 레코드에 실행 중인 Lock을 해제한다. 성공적으로 TSAM_FLAG_UPDATE 옵션으로

tsam_read() 함수를 호출했을 경우에 이 함수를 사용할 수 있다.

● 프로토타입

int tsam_unlock(int fd, int token);

● 파라미터

설명파라미터

파일 IDfd (입력)

성공한 tsam_read() 함수에서 사용되었던 파일 ID와 같은 함수에서 반환된 Lock 토큰

을 파라미터로 사용한다. 잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD

에러코드가 반환된다.

Appendix A. TSAM API 55

설명파라미터

Lock 토큰token (입력)

데이터 셋에 걸린 모든 레코드 Lock을 해제하려면 Lock 토큰으로 TSAM_TO

KEN_ALL_LOCKS를 파라미터로 주면 된다. 잘못된 Lock 토큰을 파라미터로 주게 되

면 TSAM_ERR_INVALID_TOKEN 에러코드가 반환된다.

● 반환값

데이터 셋의 레코드에 실행 중인 Lock이 성공적으로 해제된 경우 0을 반환하고 그 외의 에러가 발생한

경우 음수의 에러코드를 반환한다.

tsam_write()

데이터 셋에 한 레코드를 기록한다. 성공적으로 데이터 셋이 열린 후에 이 함수를 사용할 수 있다.

● 프로토타입

int tsam_write(int fd, void *ridfld, int keylen, char *buf, int buflen, int flags);

● 파라미터

설명파라미터

파일 IDfd (입력)

성공한 tsam_open() 함수에서 사용되었던 파일 ID를 함수 파라미터로 사용한다. 잘

못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 데이터 셋의 특별한 지점에 레코드를 기록하는데 사용되는 위치

정보이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

레코드 키 길이keylen (입력)

레코드 키 길이는 레코드 인식 필드가 키 값일 때 주어진 레코드 키의 길이를 지정해

주는 파라미터이다. 레코드 키 길이는 데이터 셋의 키 길이와 일치해야 한다.

레코드 버퍼buf (입력)

레코드 크기buflen (입력)

옵션 플래그flags (입력)

● 반환값

56 Tibero TSAM 안내서

레코드가 성공적으로 기록되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를 반

환한다.

[참고]

tsam_write() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

기록하는 레코드는 대량 기록작업 중의 하나이다.TSAM_FLAG_MASSINSERT

레코드가 이미 Lock 상태이면 기다리지 않고 바로 에러

(TSAM_ERR_RECORD_LOCKED)를 반환한다.

TSAM_FLAG_NOSUSPEND

tsam_rewrite()

데이터 셋에 있는 한 레코드의 내용을 변경한다. 성공적으로 데이터 셋이 열린 후에 이 함수를 사용할 수

있다.

● 프로토타입

int tsam_rewrite

(int fd, void *ridfld, int keylen, char *buf, int buflen, int flags);

● 파라미터

설명파라미터

파일 IDfd (입력)

성공한 tsam_open() 함수에서 사용되었던 파일 ID를 함수 파라미터로 사용한다. 잘

못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

레코드 인식 필드ridfld (입력)

레코드 인식 필드는 데이터 셋의 특별한 지점의 레코드를 갱신하는데 사용되는 위치

정보이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

레코드 키 길이keylen (입력)

레코드 키 길이는 레코드 인식 필드가 키 값일 때 주어진 레코드 키의 길이를 지정해

주는 파라미터이다. 레코드 키 길이는 데이터 셋의 키 길이와 일치해야 한다.

레코드 버퍼buf (입력)

Appendix A. TSAM API 57

설명파라미터

레코드 크기buflen (입력)

옵션 플래그flags (입력)

● 반환값

레코드의 내용이 성공적으로 갱신되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코

드를 반환한다.

[참고]

tsam_rewrite() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

레코드 인식 필드에 주어진 값은 Lock 토큰이다.TSAM_FLAG_TOK

방금 전에 tsam_read() 함수로 읽은 레코드를 갱신한다.TSAM_FLAG_CURRENT

레코드가 이미 Lock 상태이면 기다리지 않고 바로 에러

(TSAM_ERR_RECORD_LOCKED)를 반환한다.

TSAM_FLAG_NOSUSPEND

tsam_delete()

데이터 셋에 있는 한 레코드를 삭제한다. 성공적으로 데이터 셋이 열린 후에 이 함수를 사용할 수 있다.

● 프로토타입

int tsam_delete(int fd, void *ridfld, int keylen, int flags);

● 파라미터

설명파라미터

파일 IDfd (입력)

성공한 tsam_open() 함수에서 사용되었던 파일 ID를 함수를 파라미터로 사용한다.

잘못된 파일 ID를 함수 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환

된다.

레코드 인식 필드ridfld (입력)

58 Tibero TSAM 안내서

설명파라미터

레코드 인식 필드는 데이터 셋의 특별한 지점의 레코드를 삭제하는데 사용되는 위치

정보이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정해 주는

파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없을 경우에는 검색

키 길이가 데이터 셋의 키 길이와 일치해야 하고, TSAM_FLAG_GENERIC 플래그가

있을 경우에는 검색 키 길이가 데이터 셋의 키 길이보다 작아야 한다.

옵션 플래그flags (입력)

● 반환값

레코드가 성공적으로 삭제되었을 경우 삭제된 레코드의 개수를 반환하고 그 외의 에러가 발생한 경우

음수의 에러코드를 반환한다.

[참고]

tsam_delete() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

레코드 인식 필드에 주어진 값은 Lock 토큰이다.TSAM_FLAG_TOK

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

방금 전에 tsam_read() 함수로 읽은 레코드를 삭제한다.TSAM_FLAG_CURRENT

레코드가 이미 Lock 상태이면 기다리지 않고 바로 에러

(TSAM_ERR_RECORD_LOCKED)를 반환한다.

TSAM_FLAG_NOSUSPEND

Appendix A. TSAM API 59

A.6. Browsing

tsam_start_br()

데이터 셋의 순차처리를 위해 새로운 브라우저를 준비한다. 성공적으로 데이터 셋이 열린 후에 이 함수를

사용할 수 있다.

데이터 셋을 순차처리하기 위해 사용하는 내부 레코드 포인터와는 별도로 브라우저 포인터를 생성한다.

브라우저는 하나의 데이터 셋에 여러 개가 생성될 수 있으며, 브라우저를 이용한 레코드 처리는

tsam_read_next()나 tsam_read_prev() 함수를 사용한다.

● 프로토타입

int tsam_start_br(int fd, int reqid, void *ridfld, int keylen, int flags);

● 파라미터

설명파라미터

파일 IDfd (입력)

성공한 tsam_open() 함수에서 사용되었던 파일 ID를 함수를 파라미터로 사용한다.

잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

브라우저 요청 IDreqid (입력)

브라우저 요청 ID는 새로운 브라우저를 준비할 때 사용자가 주어야 하는 파라미터 값

이다. 0에서부터 시작하는 양의 정수를 브라우저 요청 ID로 줄 수 있다. 한 데이터 셋

안에서 기존에 열어서 사용하고 있는 브라우저 요청 ID로 다시 브라우저를 열려고 하

면 TSAM_ERR_DUPLICATE_REQUEST_ID 에러코드가 반환된다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 데이터 셋의 특별한 지점으로 이동시키는데 사용되는 위치 정보

이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정해 주는

파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없을 경우에는 검색

키 길이가 데이터 셋의 키 길이와 일치해야 하고, TSAM_FLAG_GENERIC 플래그가

있을 경우에는 검색 키 길이가 데이터 셋의 키 길이보다 작아야 한다.

옵션 플래그flags (입력)

● 반환값

60 Tibero TSAM 안내서

브라우저 포인터가 성공적으로 생성되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러

코드를 반환한다.

[참고]

tsam_start_br() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

검색 키의 내용과 전체 키가 일치하는 레코드로 이동한다.TSAM_FLAG_EQUAL

검색 키의 내용보다 전체 키가 같거나 큰 레코드로 이동한다.TSAM_FLAG_GTEQ

데이터 셋의 처음 레코드로 이동한다.TSAM_FLAG_FIRST

데이터 셋의 마지막 레코드로 이동한다.TSAM_FLAG_LAST

tsam_reset_br()

기존에 사용 중인 데이터 셋 브라우저의 포인터를 이동시킨다. 성공적으로 브라우저가 준비된 후에 이 함

수를 사용할 수 있다.

● 프로토타입

int tsam_reset_br(int fd, int reqid, void *ridfld, int keylen, int flags);

● 파라미터

설명파라미터

파일 IDfd (입력)

성공한 tsam_start_br() 함수에서 사용되었던 파일 ID를 함수의 파라미터로 사용한다.

잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

브라우저 요청 IDreqid (입력)

성공한 tsam_start_br() 함수에서 사용되었던 브라우저 요청 ID를 함수의 파라미터로

사용한다. 잘못된 브라우저 요청 ID를 파라미터로 주면 TSAM_ERR_INVALID_RE

QUEST_ID 에러코드가 반환된다.

레코드 인식 필드ridfld (입력/출력)

Appendix A. TSAM API 61

설명파라미터

레코드 인식 필드는 데이터 셋의 특별한 지점으로 이동시키는데 사용되는 위치 정보

이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정해 주는

파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없을 경우에는 검색

키 길이가 데이터 셋의 키 길이와 일치해야 하고, TSAM_FLAG_GENERIC 플래그가

있을 경우에는 검색 키 길이가 데이터 셋의 키 길이보다 작아야 한다.

옵션 플래그flags (입력)

● 반환값

브라우저 포인터가 성공적으로 이동되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러

코드를 반환한다.

[참고]

tsam_reset_br() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

검색 키의 내용과 전체 키가 일치하는 레코드로 이동시킨다.TSAM_FLAG_EQUAL

검색 키의 내용보다 전체 키가 같거나 큰 레코드로 이동시킨다.TSAM_FLAG_GTEQ

데이터 셋의 처음 레코드로 이동시킨다.TSAM_FLAG_FIRST

데이터 셋의 마지막 레코드로 이동시킨다.TSAM_FLAG_LAST

tsam_end_br()

기존에 사용 중인 데이터 셋 브라우저를 닫는다. 성공적으로 브라우저가 준비된 후에 이 함수를 사용할 수

있다.

● 프로토타입

int tsam_end_br(int fd, int reqid);

● 파라미터

62 Tibero TSAM 안내서

설명파라미터

파일 IDfd (입력)

성공한 tsam_start_br() 함수에서 사용되었던 파일 ID를 함수의 파라미터로 사용한다.

잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

브라우저 요청 IDreqid (입력)

성공한 tsam_start_br() 함수에서 사용되었던 파일 ID 브라우저 요청 ID를 함수의 파

라미터로 사용한다. 잘못된 브라우저 요청 ID를 파라미터로 주면 TSAM_ERR_IN

VALID_REQUEST_ID 에러코드가 반환된다.

● 반환값

브라우저 포인터가 성공적으로 닫힌 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를

반환한다.

참고

브라우저가 닫힌 이후에는 tsam_read_next() 함수나 tsam_read_prev() 함수를 사용해서 레코드의

내용을 읽을 수 없다.

tsam_read_next()

데이터 셋 브라우저를 이용해 다음 레코드를 읽는다. 성공적으로 브라우저가 준비된 후에 이 함수를 사용

할 수 있다.

● 프로토타입

int tsam_read_next(int fd, int reqid, void *ridfld, int keylen, char *buf,

int *buflen, int flags);

● 파라미터

설명파라미터

파일 IDfd (입력)

성공한 tsam_start_br() 함수에서 사용되었던 파일 ID를 함수의 파라미터로 사용한다.

잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

브라우저 요청 IDreqid (입력)

Appendix A. TSAM API 63

설명파라미터

성공한 tsam_start_br() 함수에서 사용되었던 브라우저 요청 ID를 함수의 파라미터로

사용한다. 잘못된 브라우저 요청 ID를 파라미터로 주면 TSAM_ERR_INVALID_RE

QUEST_ID 에러코드가 반환된다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 데이터 셋의 특별한 지점의 레코드를 직접 읽는데 사용되는 위치

정보이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정해 주는

파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없을 경우에는 검색

키 길이가 데이터 셋의 키 길이와 일치해야 하고, TSAM_FLAG_GENERIC 플래그가

있을 경우에는 검색 키 길이가 데이터 셋의 키 길이보다 작아야 한다.

레코드 버퍼buf (출력)

버퍼 크기buflen (입력/출

력)

옵션 플래그flags (입력)

● 반환값

데이터 셋에서 레코드가 성공적으로 읽힌 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러

코드를 반환한다.

[참고]

tsam_read_next() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

검색 키의 내용과 전체 키가 일치하는 레코드를 읽어 들인다.TSAM_FLAG_EQUAL

검색 키의 내용보다 전체 키가 같거나 큰 레코드를 읽어 들인다.TSAM_FLAG_GTEQ

데이터 셋의 처음 레코드를 읽어 들인다.TSAM_FLAG_FIRST

데이터 셋의 마지막 레코드를 읽어 들인다.TSAM_FLAG_LAST

레코드가 이미 Lock 상태이면 기다리지 않고 바로 에러

(TSAM_ERR_RECORD_LOCKED)를 반환한다.

TSAM_FLAG_NOSUS

PEND

64 Tibero TSAM 안내서

tsam_read_prev()

데이터 셋 브라우저를 이용해 이전 레코드를 읽는다. 성공적으로 브라우저가 준비된 후에 이 함수를 사용

할 수 있다.

● 프로토타입

int tsam_read_prev(int fd, int reqid, void *ridfld, int keylen, char *buf,

int *buflen, int flags);

● 파라미터

설명파라미터

파일 IDfd (입력)

성공한 tsam_start_br() 함수에서 사용되었던 파일 ID를 함수의 파라미터로 사용한다.

잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

브라우저 요청 IDreqid (입력)

성공한 tsam_start_br() 함수에서 사용되었던 브라우저 요청 ID를 함수의 파라미터로

사용한다. 잘못된 브라우저 요청 ID를 파라미터로 주면 TSAM_ERR_INVALID_RE

QUEST_ID 에러코드가 반환된다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 데이터 셋의 특별한 지점의 레코드를 직접 읽는데 사용되는 위치

정보이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정해 주는

파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없을 경우에는 검색

키 길이가 데이터 셋의 키 길이와 일치해야 하고, TSAM_FLAG_GENERIC 플래그가

있을 경우에는 검색 키 길이가 데이터 셋의 키 길이보다 작아야 한다.

레코드 버퍼buf (출력)

버퍼 크기buflen (입력/출

력)

옵션 플래그flags (입력)

● 반환값

데이터 셋에서 레코드가 성공적으로 읽힌 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러

코드를 반환한다.

Appendix A. TSAM API 65

[참고]

tsam_read_prev() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

검색 키의 내용과 전체 키가 일치하는 레코드를 읽어 들인다.TSAM_FLAG_EQUAL

검색 키의 내용보다 전체 키가 같거나 큰 레코드를 읽어 들인다.TSAM_FLAG_GTEQ

데이터 셋의 처음 레코드를 읽어 들인다.TSAM_FLAG_FIRST

데이터 셋의 마지막 레코드를 읽어 들인다.TSAM_FLAG_LAST

레코드가 이미 Lock 상태이면 기다리지 않고 바로 에러

(TSAM_ERR_RECORD_LOCKED)를 반환한다.

TSAM_FLAG_NOSUS

PEND

A.7. Sphere Open/Close

tsam_sphere_open()

처리를 하기 위해 스피어를 연다. 성공적으로 TSAM 서버에 접속한 후에 스피어를 열 수 있고, 스피어를

열지 않으면 해당하는 스피어의 레코드에 접근할 수 없다.

스피어는 베이스 클러스터와 이와 연관된 보조 인덱스 셋을 의미한다. 하나의 클러스터를 열어서 처리하

는 방식과 달리 스피어로 열어서 처리하면 베이스 클러스터의 내용이 변경될 때 자동으로 연관된 보조 인

덱스 셋의 내용도 같이 변경된다. 또 기본키로 베이스 클러스터에 접근하는 방식과 달리 보조 인덱스의 보

조키로 베이스 클러스터에 접근하려고 하면 스피어를 열어서 사용하는 함수들을 호출해야 한다.

● 프로토타입

int tsam_sphere_open(int fcnt, int *fds, int cd, tsam_file_t **files,

tsam_report_t **reports);

● 파라미터

설명파라미터

파일 개수fcnt (입력)

파일 개수는 한 스피어에 포함되어 있는 클러스터의 개수이다. 베이스 클러스터를 포

함한 보조 인덱스의 개수를 파라미터로 주어야 한다.

66 Tibero TSAM 안내서

설명파라미터

파일 IDfds (입력)

파일 ID는 스피어를 열 때 사용자가 주어야 하는 파라미터 값이다. 각각의 클러스터마

다 유일한 파일 ID를 배열로 주면 된다. 클러스터의 파일 ID는 0에서부터 시작하는 양

의 정수를 파일 ID로 줄 수 있다. 한 프로세스에서는 기존에 열어서 사용하고 있는 파

일 ID로 다시 데이터 셋을 열려고 하면 TSAM_ERR_DUPLICATE_FD 에러코드가 반

환된다.

커넥션 IDcd (입력)

성공한 tsam_connect() 함수에서 사용되었던 커넥션 ID를 함수의 파라미터로 사용한

다. 잘못된 커넥션 ID를 파라미터로 주면 TSAM_ERR_INVALID_CONN_ID 에러코드

가 반환된다.

데이터 셋 정보files (입력)

데이터 셋 정보는 열어서 처리하려고 하는 클러스터에 대한 메타정보를 담고 있다. 스

피어를 열 때에는 각 클러스터에 대한 메타정보를 배열로 주면 된다. 데이터 셋 정보

에 대한 자세한 내용은 tsam_open() 함수의 설명을 참고하기 바란다.

실시간 리포트 버퍼reports (입력)

실시간 리포트 버퍼는 클러스터의 내용이 조회되고, 삽입되고, 갱신되고, 삭제될 때마

다 실시간 리포트 버퍼에 있는 멤버의 내용을 갱신해 준다. 스피어를 열 때에는 각 클

러스터에 대한 리포트 버퍼를 배열로 주면 된다. 실시간 리포트 버퍼에 대한 자세한

내용은 tsam_open() 함수의 설명을 참고하기 바란다.

● 반환값

스피어가 성공적으로 열린 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를 반환한

다.

tsam_sphere_close()

처리를 위해 열었던 스피어를 닫는다. 스피어가 닫히면 더 이상 해당하는 스피어의 레코드에 액세스할 수

없다

● 프로토타입

int tsam_sphere_close(int fcnt, int *fds);

● 파라미터

Appendix A. TSAM API 67

설명파라미터

파일 개수fcnt (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 개수를 함수의 파라미터로

사용한다.

파일 IDfds (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 ID를 함수의 파라미터로 사

용한다. 잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반

환된다.

● 반환값

스피어가 성공적으로 닫혀진 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를 반환한

다.

A.8. Sphere Record Access

tsam_sphere_start()

스피어의 순차처리를 위해 내부 레코드 포인터를 이동시킨다. 성공적으로 스피어가 열린 후에 이 함수를

사용할 수 있다.

스피어의 순차처리는 TSAM_FLAG_NEXT 또는 TSAM_FLAG_PREV 옵션과 같이 tsam_sphere_read()

함수를 이용해서 스피어를 처음부터 끝까지 레코드 단위로 읽어서 처리하는 방식을 의미한다. 이 때 스피

어의 처음부터가 아니라 중간부터 데이터를 처리하기 위해서는 tsam_sphere_start() 함수를 이용해서 내

부 레코드 포인터를 이동시키면 tsam_sphere_read() 함수에서는 내부 레코드 포인터가 가리키고 있는 레

코드부터 읽기 시작한다.

● 프로토타입

int tsam_sphere_start(int fcnt, int *fds, int aix, void *ridfld, int

keylen, int flags);

● 파라미터

설명파라미터

파일 개수fcnt (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 개수를 파라미터로 사용한다.

파일 IDfds (입력)

68 Tibero TSAM 안내서

설명파라미터

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 ID를 파라미터로 사용한다.

잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

AIX 인덱스aix (입력)

AIX 인덱스는 스피어를 액세스할 때에 사용할 보조 인덱스의 인덱스이며, AIX 인덱스

로 0을 주게 되면 베이스 클러스터의 기본키로 액세스 하는 것을 의미한다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 스피어의 특별한 지점으로 이동시키는데 사용되는 위치 정보이

다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정해 주는

파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없을 경우에는 검색

키 길이가 클러스터의 키 길이와 일치해야 하고, TSAM_FLAG_GENERIC 플래그가

있을 경우에는 검색 키 길이가 클러스터의 키 길이보다 작아야 한다.

옵션 플래그flags (입력)

● 반환값

내부 레코드 포인터가 성공적으로 이동된 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러

코드를 반환한다.

[참고]

tsam_sphere_start() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

검색 키의 내용과 전체 키가 일치하는 레코드로 이동시킨다.TSAM_FLAG_EQUAL

검색 키의 내용보다 전체 키가 같거나 큰 레코드로 이동시킨다.TSAM_FLAG_GTEQ

클러스터의 처음 레코드로 이동시킨다.TSAM_FLAG_FIRST

클러스터의 마지막 레코드로 이동시킨다.TSAM_FLAG_LAST

Appendix A. TSAM API 69

tsam_sphere_read()

스피어에서 한 레코드를 읽는다. 성공적으로 스피어가 열린 후에 이 함수를 사용할 수 있다.

tsam_sphere_read() 함수는 스피어를 순차처리 하거나 직접처리 하는데 모두 사용된다. 순차처리를 할

경우에는 옵션 플래그에 TSAM_FLAG_NEXT 옵션이나 TSAM_FLAG_PREV 옵션을 같이 사용해 준다.

● 프로토타입

int tsam_sphere_read(int fcnt, int *fds, int aix, void *ridfld, int keylen,

char *buf, int *buflen, int flags);

● 파라미터

설명파라미터

파일 개수fcnt (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 개수를 파라미터로

사용한다.

파일 IDfds (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 ID를 파라미터로 사

용한다. 잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러

코드가 반환된다.

AIX 인덱스aix (입력)

AIX 인덱스는 스피어를 접근할 때에 사용할 보조 인덱스의 인덱스이며, AIX

인덱스로 0을 주면 베이스 클러스터의 기본키로 접근하는 것을 의미한다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 스피어의 특별한 지점의 레코드를 직접 읽는데 사용되는

위치 정보이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르

게 인식한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정

해 주는 파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없

을 경우에는 검색 키 길이가 클러스터의 키 길이와 일치해야 하고,

TSAM_FLAG_GENERIC 플래그가 있을 경우에는 검색 키 길이가 클러스터

의 키 길이보다 작아야 한다.

레코드 버퍼buf (출력)

버퍼 크기buflen (입력/출력)

70 Tibero TSAM 안내서

설명파라미터

옵션 플래그flags (입력)

● 반환값

옵션 플래그에 TSAM_FLAG_UPDATE 옵션이 없고 스피어에서 레코드가 성공적으로 읽힌 경우 0을 반

환하고, 옵션 플래그에서 TSAM_FLAG_UPDATE 옵션이 있는 경우 0에서부터 시작하는 양의 정수로

된 Lock 토큰을 반환한다. 그 외의 에러가 발생한 경우 음수의 에러코드를 반환한다.

[참고]

tsam_sphere_read() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

검색 키의 내용과 전체 키가 일치하는 레코드로 이동시킨다.TSAM_FLAG_EQUAL

검색 키의 내용보다 전체 키가 같거나 큰 레코드로 이동시킨다.TSAM_FLAG_GTEQ

클러스터의 처음 레코드로 이동시킨다.TSAM_FLAG_FIRST

클러스터의 마지막 레코드로 이동시킨다.TSAM_FLAG_LAST

클러스터의 다음 레코드를 읽어 들인다. (순차처리)TSAM_FLAG_NEXT

클러스터의 이전 레코드를 읽어 들인다. (순차처리)TSAM_FLAG_PREV

지정된 레코드를 Lock 상태로 만든다.TSAM_FLAG_UPDATE

레코드가 이미 Lock 상태이면 기다리지 않고 바로 에러

(TSAM_ERR_RECORD_LOCKED)를 반환한다.

TSAM_FLAG_NOSUSPEND

tsam_sphere_unlock()

스피어의 레코드에 실행 중인 Lock을 해제한다. 성공적으로 TSAM_FLAG_UPDATE 옵션으로

tsam_sphere_read() 함수를 호출했을 경우에 이 함수를 사용할 수 있다.

● 프로토타입

int tsam_sphere_unlock(int fcnt, int *fds, int aix, int token);

● 파라미터

Appendix A. TSAM API 71

설명파라미터

파일 개수fcnt (입력)

성공한 tsam_sphere_read() 함수에서 사용되었던 파일 개수를 파라미터로 이용한다.

파일 IDfds (입력)

성공한 tsam_sphere_read() 함수에서 사용되었던 파일 ID를 파라미터로 이용한다.

잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

AIX 인덱스aix (입력)

성공한 tsam_sphere_read() 함수에서 사용되었던 AIX 인덱스를 파라미터로 이용한

다.

Lock 토큰token (입력)

tsam_sphere_read() 함수에서 반환된 Lock 토큰을 파라미터로 이용한다. 잘못된 Lock

토큰을 파라미터로 주면 TSAM_ERR_INVALID_TOKEN 에러코드가 반환된다.

참고

스피어에 실행 중인 모든 레코드의 Lock을 해제하려면 Lock 토큰으로 TSAM_TOKEN_ALL_LOCKS

를 파라미터로 준다.

● 반환값

스피어의 레코드에 실행 중인 Lock이 성공적으로 해제된 경우 0을 반환하고 그 외의 에러가 발생한 경

우 음수의 에러코드를 반환한다.

tsam_sphere_write()

스피어에 한 레코드를 기록한다. 성공적으로 스피어가 열린 후에 이 함수를 사용할 수 있다.

● 프로토타입

int tsam_sphere_write(int fcnt, int *fds, int aix, void *ridfld, int

keylen, char *buf, int buflen, int flags);

● 파라미터

설명파라미터

파일 개수fcnt (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 개수를 파라미터로 사용한다.

72 Tibero TSAM 안내서

설명파라미터

파일 IDfds (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 ID를 파라미터로 사용한다.

잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

AIX 인덱스aix (입력)

AIX 인덱스는 스피어를 접근할 때에 사용할 보조 인덱스의 인덱스이며, AIX 인덱스로

0을 주게 되면 베이스 클러스터의 기본키로 접근하는 것을 의미한다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 스피어의 특별한 지점에 레코드를 기록하는데 사용되는 위치 정

보이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

레코드 키 길이keylen (입력)

레코드 키 길이는 레코드 인식 필드가 키 값일 때 주어진 레코드 키의 길이를 지정해

주는 파라미터이다. 레코드 키 길이는 클러스터의 키 길이와 일치해야 한다.

레코드 버퍼buf (입력)

레코드 크기buflen (입력)

옵션 플래그flags (입력)

● 반환값

레코드가 성공적으로 기록되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를 반

환한다.

[참고]

tsam_sphere_write() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

기록하는 레코드는 대량 기록작업 중의 하나이다.TSAM_FLAG_MASSINSERT

레코드가 이미 Lock 상태이면 기다리지 않고 바로 에러

(TSAM_ERR_RECORD_LOCKED)를 반환한다.

TSAM_FLAG_NOSUSPEND

Appendix A. TSAM API 73

tsam_sphere_rewrite()

스피어에 있는 한 레코드를 내용을 변경한다. 성공적으로 스피어가 열린 후에 이 함수를 사용할 수 있다.

● 프로토타입

int tsam_sphere_rewrite(int fcnt, int *fds, int aix, void *ridfld, int

keylen, char *buf, int buflen, int flags);

● 파라미터

설명파라미터

파일 개수fcnt (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 개수를 파라미터로 사용한다.

파일 IDfds (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 ID를 파라미터로 사용한다.

잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

AIX 인덱스aix (입력)

AIX 인덱스는 스피어를 접근할 때에 사용할 보조 인덱스의 인덱스이며, AIX 인덱스로

0을 주게 되면 베이스 클러스터의 기본키로 접근하는 것을 의미한다.

레코드 인식 필드ridfld (입력)

레코드 인식 필드는 스피어의 특별한 지점에 레코드를 갱신하는데 사용되는 위치 정

보이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

레코드 키 길이keylen (입력)

레코드 키 길이는 레코드 인식 필드가 키 값일 때 주어진 레코드 키의 길이를 지정해

주는 파라미터이다. 레코드 키 길이는 클러스터의 키 길이와 일치해야 한다.

레코드 버퍼buf (입력)

레코드 크기buflen (입력)

옵션 플래그flags (입력)

● 반환값

레코드의 내용이 성공적으로 갱신되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코

드를 반환한다.

74 Tibero TSAM 안내서

[참고]

tsam_sphere_rewrite() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

레코드 인식 필드에 주어진 값은 Lock 토큰이다.TSAM_FLAG_TOK

방금 전에 tsam_sphere_read() 함수로 읽은 레코드를 갱신한다.TSAM_FLAG_CURRENT

레코드가 이미 Lock 상태이면 기다리지 않고 바로 에러

(TSAM_ERR_RECORD_LOCKED)를 반환한다.

TSAM_FLAG_NOSUSPEND

tsam_sphere_delete()

스피어에 있는 한 레코드를 삭제한다. 성공적으로 스피어가 열린 후에 이 함수를 사용할 수 있다.

● 프로토타입

int tsam_sphere_delete(int fcnt, int *fds, int aix, void *ridfld, int

keylen, int flags);

● 파라미터

설명파라미터

파일 개수fcnt (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 개수를 파라미터로 사용한다.

파일 IDfds (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 ID를 파라미터로 사용한다.

잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

AIX 인덱스aix (입력)

AIX 인덱스는 스피어를 접근할 때에 사용할 보조 인덱스의 인덱스이며, AIX 인덱스로

0을 주게 되면 베이스 클러스터의 기본키로 접근하는 것을 의미한다.

레코드 인식 필드ridfld (입력)

레코드 인식 필드는 스피어의 특별한 지점의 레코드를 삭제하는 데에 사용되는 위치

정보이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

Appendix A. TSAM API 75

설명파라미터

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정해 주는

파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없을 경우에는 검색

키 길이가 클러스터의 키 길이와 일치해야 하고, TSAM_FLAG_GENERIC 플래그가

있을 경우에는 검색 키 길이가 클러스터의 키 길이보다 작아야 한다.

옵션 플래그flags (입력)

● 반환값

레코드가 성공적으로 삭제되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를 반

환한다.

[참고]

tsam_sphere_delete() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

레코드 인식 필드에 주어진 값은 Lock 토큰이다.TSAM_FLAG_TOK

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

방금 전에 tsam_sphere_read() 함수로 읽은 레코드를 삭제한다.TSAM_FLAG_CURRENT

레코드가 이미 Lock 상태이면 기다리지 않고 바로 에러

(TSAM_ERR_RECORD_LOCKED)를 반환한다.

TSAM_FLAG_NOSUSPEND

A.9. Sphere Browsing

tsam_sphere_start_br()

스피어의 순차처리를 위해 새로운 브라우저를 준비한다. 성공적으로 스피어가 열린 후에 이 함수를 사용

할 수 있다.

스피어를 순차처리하기 위해 사용하는 내부 레코드 포인터와는 별도로 브라우저 포인터를 생성한다. 브

라우저는 하나의 스피어에 여러 개가 생성될 수 있으며, 브라우저를 이용한 레코드 처리는

tsam_sphere_read_next()나 tsam_sphere_read_prev() 함수를 사용한다.

● 프로토타입

76 Tibero TSAM 안내서

int tsam_sphere_start_br(int fcnt, int *fds, int aix, int reqid, void

*ridfld, int keylen, int flags);

● 파라미터

설명파라미터

파일 개수fcnt (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 개수를 파라미터로 사용한다.

파일 IDfds (입력)

성공한 tsam_sphere_open() 함수에서 사용되었던 파일 ID를 파라미터로 사용한다.

잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가 반환된다.

AIX 인덱스aix (입력)

AIX 인덱스는 스피어를 접근할 때에 사용할 보조 인덱스의 인덱스이며, AIX 인덱스로

0을 주게 되면 베이스 클러스터의 기본키로 접근하는 것을 의미한다.

브라우저 요청 IDreqid (입력)

브라우저 요청 ID는 새로운 브라우저를 준비할 때 사용자가 주어야 하는 파라미터 값

이다. 0에서부터 시작하는 양의 정수를 브라우저 요청 ID로 줄 수 있다. 한 스피어 안

에서 기존에 열어서 사용하고 있는 브라우저 요청 ID로 다시 브라우저를 열려고 하면

TSAM_ERR_DUPLICATE_REQUEST_ID 에러코드가 반환된다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 스피어의 특별한 지점으로 이동시키는데 사용되는 위치 정보이

다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정해 주는

파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없을 경우에는 검색

키 길이가 클러스터의 키 길이와 일치해야 하고, TSAM_FLAG_GENERIC 플래그가

있을 경우에는 검색 키 길이가 클러스터의 키 길이보다 작아야 한다.

옵션 플래그flags (입력)

● 반환값

브라우저 포인터가 성공적으로 생성되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러

코드를 반환한다.

Appendix A. TSAM API 77

[참고]

tsam_sphere_start_br() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

검색 키의 내용과 전체 키가 일치하는 레코드로 이동시킨다.TSAM_FLAG_EQUAL

검색 키의 내용보다 전체 키가 같거나 큰 레코드로 이동시킨다.TSAM_FLAG_GTEQ

클러스터의 처음 레코드로 이동시킨다.TSAM_FLAG_FIRST

클러스터의 마지막 레코드로 이동시킨다.TSAM_FLAG_LAST

tsam_sphere_reset_br()

기존에 사용 중인 스피어 브라우저의 포인터를 이동시킨다. 성공적으로 브라우저가 준비된 후에 이 함수

를 사용할 수 있다.

● 프로토타입

int tsam_sphere_reset_br(int fcnt, int *fds, int aix, int reqid, void

*ridfld, int keylen, int flags);

● 파라미터

설명파라미터

파일 개수fcnt (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 파일 개수를 함수의 파라미터로

사용한다.

파일 IDfds (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 파일 ID를 함수의 파라미터로

사용한다. 잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가

반환된다.

AIX 인덱스aix (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 AIX 인덱스를 함수의 파라미터

로 사용한다.

78 Tibero TSAM 안내서

설명파라미터

브라우저 요청 IDreqid (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 브라우저 요청 ID를 함수의 파

라미터로 사용한다. 잘못된 브라우저 요청 ID를 파라미터로 주면 TSAM_ERR_IN

VALID_REQUEST_ID 에러코드가 반환된다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 스피어의 특별한 지점으로 이동시키는데 사용되는 위치 정보이

다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정해 주는

파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없을 경우에는 검색

키 길이가 클러스터의 키 길이와 일치해야 하고, TSAM_FLAG_GENERIC 플래그가

있을 경우에는 검색 키 길이가 클러스터의 키 길이보다 작아야 한다.

옵션 플래그flags (입력)

● 반환값

브라우저 포인터가 성공적으로 이동되었을 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러

코드를 반환한다.

[참고]

tsam_sphere_reset_br() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

검색 키의 내용과 전체 키가 일치하는 레코드로 이동시킨다.TSAM_FLAG_EQUAL

검색 키의 내용보다 전체 키가 같거나 큰 레코드로 이동시킨다.TSAM_FLAG_GTEQ

클러스터의 처음 레코드로 이동시킨다.TSAM_FLAG_FIRST

클러스터의 마지막 레코드로 이동시킨다.TSAM_FLAG_LAST

Appendix A. TSAM API 79

tsam_sphere_end_br()

기존에 사용 중인 스피어 브라우저를 닫는다. 성공적으로 브라우저가 준비된 후에 이 함수를 사용할 수 있

다.

● 프로토타입

int tsam_sphere_end_br(int fcnt, int *fds, int aix, int reqid);

● 파라미터

설명파라미터

파일 개수fcnt (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 파일 개수를 함수의 파라미터로

사용한다.

파일 IDfds (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 파일 ID를 함수의 파라미터로

사용한다. 잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가

반환된다.

AIX 인덱스aix (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 AIX 인덱스를 함수의 파라미터

로 사용한다.

브라우저 요청 IDreqid (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 브라우저 요청 ID를 함수의 파

라미터로 사용한다. 잘못된 브라우저 요청 ID를 파라미터로 주게 되면

TSAM_ERR_INVALID_REQUEST_ID 에러코드가 반환된다.

참고

브라우저가 닫힌 이후에는 tsam_sphere_read_next() 함수나 tsam_sphere_read_prev() 함수를 사용

해서 레코드의 내용을 읽을 수 없다.

● 반환값

브라우저 포인터가 성공적으로 닫힌 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드를

반환한다.

80 Tibero TSAM 안내서

tsam_sphere_read_next()

스피어 브라우저를 이용해 다음 레코드를 읽는다. 성공적으로 브라우저가 준비된 후에 이 함수를 사용할

수 있다.

● 프로토타입

int tsam_sphere_read_next(int fcnt, int *fds, int aix, int reqid, void

*ridfld, int keylen, char *buf, int *buflen, int flags);

● 파라미터

설명파라미터

파일 개수fcnt (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 파일 개수를 함수의 파라미터로

사용한다.

파일 IDfds (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 파일 ID를 함수의 파라미터로

사용한다. 잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_INVALID_FD 에러코드가

반환된다.

AIX 인덱스aix (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 AIX 인덱스를 함수의 파라미터

로 사용한다.

브라우저 요청 IDreqid (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 브라우저 요청 ID를 함수의 파

라미터로 사용한다. 잘못된 브라우저 요청 ID를 파라미터로 주면 TSAM_ERR_IN

VALID_REQUEST_ID 에러코드가 반환된다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 스피어의 특별한 지점을 직접 읽는데 사용되는 위치 정보이다. 옵

션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정해 주는

파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없을 경우에는 검색

키 길이가 클러스터의 키 길이와 일치해야 하고, TSAM_FLAG_GENERIC 플래그가

있을 경우에는 검색 키 길이가 클러스터의 키 길이보다 작아야 한다.

Appendix A. TSAM API 81

설명파라미터

레코드 버퍼buf (출력)

버퍼 크기buflen (입력/출

력)

옵션 플래그flags (입력)

● 반환값

스피어에서 레코드가 성공적으로 읽힌 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드

를 반환한다.

[참고]

tsam_sphere_read_next() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

검색 키의 내용과 전체 키가 일치하는 레코드를 읽어 들인다.TSAM_FLAG_EQUAL

검색 키의 내용보다 전체 키가 같거나 큰 레코드를 읽어 들인다.TSAM_FLAG_GTEQ

클러스터의 처음 레코드를 읽어 들인다.TSAM_FLAG_FIRST

클러스터의 마지막 레코드를 읽어 들인다.TSAM_FLAG_LAST

레코드가 이미 Lock 상태이면 기다리지 않고 바로 에러

(TSAM_ERR_RECORD_LOCKED)를 반환한다.

TSAM_FLAG_NOSUSPEND

tsam_sphere_read_prev()

스피어 브라우저를 이용해 이전 레코드를 읽는다. 성공적으로 브라우저가 준비된 후에 이 함수를 사용할

수 있다.

● 프로토타입

int tsam_sphere_read_prev(int fcnt, int *fds, int aix, int reqid, void

*ridfld, int keylen, char *buf, int *buflen, int flags);

● 파라미터

82 Tibero TSAM 안내서

설명파라미터

파일 개수fcnt (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 파일 개수를 함수의 파

라미터로 사용한다.

파일 IDfds (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 파일 ID를 함수의 파라

미터로 사용한다. 잘못된 파일 ID를 파라미터로 주면 TSAM_ERR_IN

VALID_FD 에러코드가 반환된다.

AIX 인덱스aix (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 AIX 인덱스를 함수의

파라미터로 사용한다.

브라우저 요청 IDreqid (입력)

성공한 tsam_sphere_start_br() 함수에서 사용되었던 브라우저 요청 ID를 함

수의 파라미터로 사용한다. 잘못된 브라우저 요청 ID를 파라미터로 주면

TSAM_ERR_INVALID_REQUEST_ID 에러코드가 반환된다.

레코드 인식 필드ridfld (입력/출력)

레코드 인식 필드는 스피어의 특별한 지점을 직접 읽는데 사용되는 위치 정

보이다. 옵션 플래그의 옵션에 따라 레코드 인식 필드의 내용을 다르게 인식

한다.

검색 키 길이keylen (입력)

검색 키 길이는 레코드 인식 필드가 키 값일 때 주어진 검색 키의 길이를 지정

해 주는 파라미터이다. 옵션 플래그에 TSAM_FLAG_GENERIC 플래그가 없

을 경우에는 검색 키 길이가 클러스터의 키 길이와 일치해야 하고,

TSAM_FLAG_GENERIC 플래그가 있을 경우에는 검색 키 길이가 클러스터

의 키 길이보다 작아야 한다.

레코드 버퍼buf (출력)

버퍼 크기buflen (입력/출력)

옵션 플래그flags (입력)

● 반환값

스피어에서 레코드가 성공적으로 읽힌 경우 0을 반환하고 그 외의 에러가 발생한 경우 음수의 에러코드

를 반환한다.

Appendix A. TSAM API 83

[참고]

tsam_sphere_read_prev() 함수에서 사용할 수 있는 플래그의 종류는 다음과 같다.

설명플래그

레코드 인식 필드에 주어진 값은 검색 키 값이다.TSAM_FLAG_KEY

레코드 인식 필드에 주어진 값은 상대 Byte 주소이다.TSAM_FLAG_RBA

레코드 인식 필드에 주어진 값은 상대 레코드 번호이다.TSAM_FLAG_RRN

검색 키의 내용이 전체 키의 일부분이다.TSAM_FLAG_GENERIC

검색 키의 내용과 전체 키가 일치하는 레코드를 읽어 들인다.TSAM_FLAG_EQUAL

검색 키의 내용보다 전체 키가 같거나 큰 레코드를 읽어 들인다.TSAM_FLAG_GTEQ

클러스터의 처음 레코드를 읽어 들인다.TSAM_FLAG_FIRST

클러스터의 마지막 레코드를 읽어 들인다.TSAM_FLAG_LAST

레코드가 이미 Lock 상태이면 기다리지 않고 바로 에러

(TSAM_ERR_RECORD_LOCKED)를 반환한다.

TSAM_FLAG_NOSUSPEND

84 Tibero TSAM 안내서

Appendix B. Tibero/TSAM 운영 및 관리

본 장에서는 Tibero/TSAM를 사용하기 위해 필요한 설치부터 환경설정, 초기화 작업, Tibero/TSAM 서버

의 기동과 중지, Online 백업 및 모니터링 등 운영과 관리에 관한 전반적인 사항에 대해 설명한다.

Tibero/TSAM는 Tibero RDBMS의 기반 위에 TSAM의 기능을 제공하기 위한 몇 가지 모듈들로 구성되어

있다. 따라서 Tibero/TSAM를 운영하고 관리하려면 그 기반이 되는 Tibero RDBMS를 운영하고 관리해야

한다. 여기에서는 Tibero/TSAM의 운영 및 관리의 근본이 되는 Tibero RDBMS의 운영 및 관리에 필요한

필수적인 수준의 지식만을 제공한다. 좀 더 자세한 내용은 Tibero RDBMS v3.0 안내서를 참조하도록 한

다.

참고

본 안내서는 Tibero RDBMS v3.0을 기준으로 작성되었다. SW 버전에 따라 일부 내용은 달라질 수

있다.

B.1. Tibero/TSAM 설치Tibero/TSAM를 설치한 후 설정해야 할 환경변수, 초기 파라미터 등과 설치 후 디렉터리 구조 등 확인사항

에 대해 알아본다.

B.1.1. Tibero/TSAM 환경변수

다음은 Tibero/TSAM를 설치하고 운영하기 위해서 사용하는 환경 변수에 대한 설명이다.

일반적으로 설치/운영을 위한 사용자 계정의 .profile (korn 셸의 경우)이나 .bashrc 또는 .bash_profile (bourn

셸의 경우) 등을 통해서 설정한다.

설명환경 변수

Tibero/TSAM가 설치된 가장 상위 디렉터리TB_HOME

Tibero/TSAM 서비스 IDTB_SID

성능분석용 프로파일이나 서버 프로세스의 문제 발생시의 코어 파

일이 생성되는 디렉터리

TB_PROF_DIR

서버와 접속할 때의 타임아웃TB_CONN_TIMEOUT

서버로부터 응답 타임아웃TB_READ_TIMEOUT

실행파일을 찾을 경로 (TB_HOME/bin을 포함할 것)PATH

Appendix B. Tibero/TSAM 운영 및 관리 85

설명환경 변수

라이브러리를 찾을 경로 (TB_HOME/client/lib 포함할 것) OS마다 환

경변수의 이름이 상이하다.

LD_LIBRARY_PATH

SHLIB_PATH (HPUX)

LIBPATH (IBM-AIX)

자바 런타임 환경이 설치된 디렉터리JAVA_HOME

기본적인 자바 클래스 라이브러리들의 위치나 jar 파일CLASSPATH

다음은 Tibero/TSAM 환경변수 설정 예이다. (Linux – bash 셸 가정)

~/.bashrc 혹은 ~/.bash_profile에 다음과 같은 환경변수 설정을 추가한다.

# Some Tibero/TSAM client programs require JRE

# J2SE SDK environment version 1.5.8 or later

export JAVA_HOME=/usr/java/jdk1.5.8

export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar:./

export PATH=$JAVA_HOME/bin:$PATH

# Tibero/TSAM

export TB_HOME=$HOME/tibero3

export TB_SID=TVSAM

export PATH=$TB_HOME/src/script:$TB_HOME/bin:$TB_HOME/client/bin:$PATH

export LD_LIBRARY_PATH=$TB_HOME/client/lib:$LD_LIBRARY_PATH

export TB_PROF_DIR=$HOME/tb_prof

제거{{export TBMON_HOME=$HOME/tbmon}}

export TB_CONN_TIMEOUT=15

export TB_READ_TIMEOUT=15

B.1.2. Tibero/TSAM 설치 디렉터리 구조

Tibero/TSAM를 설치하면 기본적으로 다음과 같은 디렉터리 구조가 생성된다.

참고

Tibero/TSAM 설치 전에 앞에서 설명한 환경변수를 미리 설정할 것을 권장한다.

다음은 Tibero/TSAM 설치 디렉터리 구조를 보여주는 표이며, TB_HOME은 Tibero/TSAM의 서버를 설치

할 루트 디렉터리를 의미한다.

다음은 TB_HOME 디렉터리 구조이다.

설명디렉터리

Tibero/TSAM 서버용 실행 프로그램 및 유틸리티 프로그램을 포함한다.bin

86 Tibero TSAM 안내서

설명디렉터리

Tibero/TSAM 서버의 초기 매개변수 설정파일을 포함할 디렉터리이다config

Tibero/TSAM 제품의 사용 라이선스 파일이 설치되어야 하는 디렉터리이다.license

Tibero/TSAM 서버의 초기 데이터베이스 생성에 사용되는 SQL 스크립트 등

을 포함하고 있다.

script

다음은 TB_HOME/instance 디렉터리 구조이다.

설명디렉터리

Tibero/TSAM에서 사용하는 데이터 파일, 로그 파일, 컨트롤 파일, 아카이브

로그 등이 저장되는 위치이다.

TB_SID/database

로컬 서버 프로세스 사이의 통신을 위한 named pipe 생성 위치이다.TB_SID/path

dbmslog, tracelog, tracedump 등 서버 프로세스에서 출력되는 로그 파일들

이 저장되는 위치이다.

TB_SID/log

장애 및 문제 분석을 위한 덤프 파일 등이 생성되는 디렉터리이다.TB_SID/dump

다음은 TB_HOME/client 디렉터리 구조이다.

설명디렉터리

Tibero/TSAM 클라이언트용 실행 프로그램 및 유틸리티 프로그램을 포함한

다.

bin

클라이언트 설정 정보들이 위치해야 하는 디렉터리이다. (tbnet_alias.tbr 등)config

Tibero/TSAM 클라이언트용 프로그램 작성에 필요한 헤더파일들을 포함한

다.

include

Tibero/TSAM 클라이언트용 프로그램에 사용되는 클라이언트 라이브러리들

을 포함한다.

lib

TB_HOME/client 이하의 디렉터리는 서버가 설치된 TB_HOME의 하위 디렉터리 이외의 별도 계정이나

디렉터리에 설치할 수 있다. 이 디렉터리에는 Tibero/TSAM 클라이언트에서 필요로 하는 파일들을 포함한

다.

일부 디렉터리 위치는 tip 파일(초기값 설정)의 특정 항목의 값을 변경하여 다른 위치를 지정할 수 있다.

B.1.3. Tibero/TSAM 클라이언트 라이브러리 설치

Tibero/TSAM 이외에도 TSAM/Oracle 등의 다른 TSAM 구현이 있기 때문에 TSAM을 사용하는 클라이언

트 프로그램을 만드는 경우 Tibero/TSAM를 위한 클라이언트 라이브러리를 사용할 지 TSAM/Oracle 등의

다른 TSAM 구현을 사용할 지를 선택해야 하는 문제가 있다.

Appendix B. Tibero/TSAM 운영 및 관리 87

프로그램 빌드 과정에 영향을 주지 않기 위해서 어떤 클라이언트 라이브러리를 사용하던지 클라이언트

프로그램을 빌드할 때는 실제 TSAM 클라이언트의 구현과 상관없이 –ltsam으로 동일하게 링크할 라이브

러리를 지정하도록 한다.

그리고 선택한 TSAM 클라이언트 라이브러리의 실제 구현은 libtsam.so (AIX-libtsam.a, HPUX-libtsam.sl)

로 symbolic link를 만들어서 사용하도록 한다. (32비트 라이브러리를 사용하는 경우는 libtsam32.so와 같

이 확장자 앞에 32를 붙여야 한다.)

다음은 Tibero/TSAM 클라이언트 라이브러리 설치에 대한 예이다.

ln –s $TB_HOME/client/lib/libtscli.so $TJES_HOME/lib/libtsam.so

[그림 B.1] Symbolic Link를 이용한 TSAM 클라이언트 프로그램 빌드

B.1.4. Tibero/TSAM 초기 파라미터 설정 파일 (tip 파일)

Tibero/TSAM 서버의 초기 설정내용을 지정하기 위한 텍스트 파일이다.

다음은 tip 파일의 일반적인 예이다.

DB_NAME=TVSAM

LISTENER_PORT=8629

CONTROL_FILES=/tibero3/instance/TVSAM/database/c1.ctl:

/tibero3/instance/TVSAM/database/c2.ctl:

/tibero3/instance/TVSAM/database/c3.ctl

WTHR_PROC_CNT=5

_WTHR_PER_PROC=10

TOTAL_SHM_SIZE=512M

DB_BLOCK_SIZE=8K

DB_CACHE_SIZE=200M

LOG_BUFFER=8M

88 Tibero TSAM 안내서

LOG_LVL=2

DBMS_LOG_TOTAL_SIZE_LIMIT=300M

TRACE_LOG_TOTAL_SIZE_LIMIT=300M

위의 예제에 사용된 초기화 파라미터에 대한 설명은 다음과 같다.

설명파라미터

데이터베이스 이름이다.DB_NAME

Listener가 사용하는 Port 번호이다.LISTENER_PORT

Control file들의 위치로 절대 경로로 지정한다. 라인이 길어지더라도

한 라인에 입력한다.

CONTROL_FILES

작업 프로세스의 개수를 결정한다.WTHR_PROC_CNT

하나의 작업 프로세스 안에 들어갈 작업 스레드의 개수를 결정한다._WTHR_PER_PROC

Instance내에서 사용할 전체 Shared memory의 크기를 결정한다.TOTAL_SHM_SIZE

크기는 'DB_CACHE_SIZE + LOG_BUFFER + 20M(초기 부팅시 할

당 영역) + (WTHR_PROC_CNT * _WTHR_PER_PROC) * 1M 보다

조금 더 여유있게 결정한다.

데이터베이스의 블럭 크기이다.DB_BLOCK_SIZE

데이터베이스의 Cache buffer의 크기이다.DB_CACHE_SIZE

로그를 저장하는 메모리 공간의 크기이다.LOG_BUFFER

높은 레벨을 지정할수록 많은 로그가 남는다. 하지만 로그 레벨이 높

을수록 성능에 미치는 영향이 있을 수 있으므로 주의한다.

LOG_LVL(1~5)

데이터베이스 로그 파일들의 크기 총합의 최대값이다.DBMS_LOG_TOTAL_SIZE_LIMIT

이 크기 이상의 로그 파일이 생성되려 하면, 가장 오래된 로그 파일

을 지우고 그 공간을 재활용함으로써 로그 파일들이 무한정 생기는

것을 막는다.

Trace 로그 파일들의 크기 총합의 최대값이다.TRACE_LOG_TOTAL_SIZE_LIM

IT이 크기 이상의 로그 파일이 생성되려 하면 가장 오래된 로그 파일을

지우고 그 공간을 재활용함으로써 로그 파일이 무한정 생기는 것을

막는다.

참고

이 외에도 많은 초기화 파라미터가 있다. 더 자세한 내용은 "Tibero RDBMS 레퍼런스 안내서"의 "제

1장 초기화 파라메터"를 참고한다.

Appendix B. Tibero/TSAM 운영 및 관리 89

B.1.5. Tibero/TSAM 라이선스

라이선스 발급 절차에 따라서 이메일 등으로 전달받은 Tibero/TSAM 사용 라이선스를 TB_HOME/license

디렉터리 아래에 license.xml 이라는 이름으로 복사한다.

B.1.6. tbnet_alias.tbr 설정

DSN(Data Source Name) 설정을 포함한다. DSN을 이용하면 클라이언트에서 서버를 지정하는 경우 물리

적인 네트워크 주소 대신에 간단히 약속된 이름을 가지고 지정할 수 있다.

다음은 tbnet_alias.tbr의 예이다.

# tbnet_alias.tbr

# Network Configuration File

TVSAM=(

IP=localhost,

PORT=8629,

DB_NAME=TVSAM

)

OpenFrame에서 Tibero/TSAM를 사용하는 경우 접속할 서버를 지정하기 위해서 tbnet_alias에 정의된

DSN을 사용해야 한다. 이는 OpenFrame 설정파일인 ds.conf의 TSAM 접속 관련 설정을 통해 설정할 수

있다. ds.conf의 TSAM 접속 관련 설정은 [ICF_STORAGE] 절, [TSAM_CLIENT] 절, [SYS1_CLIENT] 절

등이 있다.

참고

OpenFrame 설정파일 ds.conf와 관련한 자세한 내용은 "OpenFrame 데이터 셋 안내서"의 "설정파

일"을 참고한다.

B.2. Tibero/TSAM 초기화 작업Tibero/TSAM 제품을 설치한 후, 이를 기동하여 운영하기에 앞서 Tibero/TSAM의 초기화 작업을 수행해야

한다. Tibero/TSAM 초기화 작업은 Tibero RDBMS 관점의 초기화 작업과 TSAM 관점의 초기화 작업으로

이루어진다.

본 안내서에서는 Tibero RDBMS 관점의 초기화 작업에 대해서는 매우 간략하게만 설명하고, TSAM 관점

의 초기화 작업에 대해 중점적으로 설명한다.

TSAM 관점의 초기화 작업으로는 TSAM이 사용할 마스터 카탈로그를 생성하는 작업과 TSAM 데이터 셋

들을 저장할 볼륨을 추가하는 작업이 있다.

90 Tibero TSAM 안내서

B.2.1. tb_newmount.sh

Tibero/TSAM의 Tibero RDBMS 관점의 데이터베이스 초기화 작업을 간단히 요약하면 다음과 같다.

1. tbboot -t NOMOUNT

데이터베이스를 생성하기 위한 실행 모드인 NOMOUNT 모드로 Tibero/TSAM 서버를 기동한다.

2. CREATE DATABSE

tbsql을 이용하여 데이터베이스를 생성하기 위한 SQL 명령인 CREATE DATABASE 문을 실행한다.

3. tbdown; tbboot

데이터베이스가 생성되었다면 tbdown; tbboot를 실행하여 Tibero/TSAM 서버를 정상적인 운영 모드로

재기동 한다.

4. TB_HOME/scripts/system.sh

위에서 생성된 데이터베이스에 대한 초기화 작업을 수행하는 일련의 SQL 명령들이 수행된다.

5. CREATE TABLESPACE

tbsql을 이용하여 데이터베이스에 사용자 tablespace를 생성한다.

6. CREATE USER; GRANT

tbsql을 이용하여 데이터베이스 사용자를 생성하고 사용자에 권한을 부여한다.

참고

위의 작업에 사용되는 구체적인 명령이나 설명에 대해서는 "Tibero RDBMS 설치 및 시작 안내서"

"2.1 Tibero의 최초 설치"를 참고한다.

실제 운영에 사용하는 데이터베이스를 초기화하려면 성능, 데이터베이스 최대 크기 및 구성방식, 복구 관

련 옵션 등의 세세한 부분까지 지정해야 한다. 이에 대한 자세한 내용은 Tibero RDBMS 안내서를 참고한

다.

데이터베이스 초기화에 대한 세세한 지정을 하지 않고 간단하게 데이터베이스를 생성하고 테스트하고자

할 경우, tb_newmount.sh 명령으로 일반적으로 사용하는 표준 샘플 데이터베이스를 생성할 수 있으며,

tb_newmount.sh 명령 실행 이후에도 원하는 설정을 추가하거나 삭제, 변경할 수 있다.

B.2.2. 카탈로그용 테이블 스페이스 생성

tb_newmount.sh 명령을 수행하면 Tibero/TSAM의 Tibero RDBMS 관점의 데이터베이스가 생성된다. 여

기에 TSAM 데이터 셋을 저장하기 위해서는 미리 데이터 셋이 저장될 볼륨에 해당하는 tablespace를 생성

Appendix B. Tibero/TSAM 운영 및 관리 91

해주어야 한다. (Tibero/TSAM는 TSAM의 데이터 셋과 볼륨을 각각 Tibero RDBMS의 테이블과 테이블 스

페이스로 구현하고 있다.)

TSAM 데이터 셋 카탈로그 역시 TSAM 데이터 셋이다. 따라서, TSAM 데이터 셋 카탈로그를 생성하기 전

에 카탈로그를 저장할 볼륨, 즉 테이블 스페이스를 생성해야 한다. 예를 들어 볼륨, VOLSER=100000에

카탈로그를 생성하려면 그전에 다음과 같이 VOLSER=100000에 해당하는 테이블 스페이스를 생성해야

한다.

SQL> CREATE TABLESPACE "100000"

DATAFILE '100000.dbf' SIZE 100M

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

Tablespace '100000' created.

B.2.3. 마스터 카탈로그 생성

TSAM 데이터 셋 카탈로그를 저장할 볼륨을 Tibero/TSAM의 테이블 스페이스로 생성한 다음에는 mascat

명령을 이용하여 마스터 카탈로그를 위에서 만든 볼륨(tablespace)에 생성한다. 또한 voladd 명령을 이용

하여 Tibero/TSAM에 생성된 tablespace를 TSAM 볼륨으로 등록해야 한다.

$ mascat create SYS1.MASTER.ICFCAT 100000

$ voladd define 100000

위의 예제는 SYS1.MASTER.ICFCAT 이라는 마스터 카탈로그를 볼륨 10000에 생성 및 초기화하는 것이

다. voladd define 명령은 tablespace 10000을 TSAM 볼륨으로 등록하고 볼륨 관리를 위한 내부적으로 사

용되는 VVDS(VSAM Volume Data Set)에 해당하는 테이블을 생성한다.

참고

OpenFrame 툴 프로그램인 mascat 과 voladd의 자세한 사용법은 본 안내서 “제3장 TSAM 데이터 셋

관리” 또는 "OpenFrame 툴 참조 안내서"를 참조한다.

B.2.4. 볼륨 추가

TSAM 볼륨을 추가하기 위해서는 CREATE TABLESPACE 문을 이용하여 Tibero/TSAM에 테이블 스페이

스를 생성하고 voladd define 명령을 이용해서 이것을 볼륨으로 정의한다.

SQL> CREATE TABLESPACE "100001"

DATAFILE '100001.dbf' SIZE 2G AUTOEXTEND ON NEXT 100M MAXSIZE 3G

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 20M;

$ voladd define 100001

위의 예제는 VOLSER=100001을 추가하는 것이다. (해당 볼륨은 테이블 스페이스 100001에 해당)

92 Tibero TSAM 안내서

B.3. Tibero/TSAM 기동/중지

B.3.1. tbboot

tbboot 명령을 이용해서 Tibero/TSAM 서버를 기동한다.

tbboot 명령의 -t 옵션을 이용해서 서버를 기동할 때의 모드를 지정할 수 있다. 기동할 때 지정된 모드에 따

라서 수행할 수 있는 SQL 명령의 집합이 달라진다. 일반적으로 NORMAL 이외의 모드는 특정 관리 작업

을 수행하기 위한 모드로 제한적인 몇 가지 명령만 수행 가능하다. 예를 들면, CREATE DATABASE 문은

–t NOMOUNT 에서만 가능하다.

tbboot 명령 사용 방법은 다음과 같다.

tbboot [-h] [-v] [-t <bootmode>]

tbboot 명령어에 대한 파라미터 설명은 다음과 같다.

설명파라미터

명령어 라인 도움말을 보여준다.-h

버전 정보를 보여준다.-v

Boot mode를 지정한다.-t <bootmode>

Boot Mode에 대한 설명은 다음과 같다.

설명Boot Mode

데이터베이스가 존재하지 않을 때, Tibero 서버 프로세스만 구동시

키는 모드이다.

NOMOUNT

일반적으로는 사용하지 않고, 부트한 다음 CREATE DATABASE 문

을 이용하여 데이터베이스를 생성할 수 있다.

미디어 복구를 위해 사용되는 모드이다.MOUNT

사용자가 직접 지정하거나, 정상(NORMAL) 모드를 지정했을 때 부

트 중 데이터 파일에 문제가 있거나 예전에 백업한 파일을 되살려 사

용하는 경우 자동으로 MOUNT 모드로 전환하여 부트한다.

정상적으로 데이터베이스의 모든 기능을 사용할 수 있는 모드이다.NORMAL

마지막으로 데이터베이스를 사용했을 때 비정상 종료하였다면, 부

트할 때 자동적으로 파손 복구 (crash recovery) 를 실행한다.

기동 모드를 지정하지 않는 경우는 NORMAL 모드를 지정한 것으로

간주된다.

Appendix B. Tibero/TSAM 운영 및 관리 93

설명Boot Mode

부트하는 과정에서 로그 파일을 초기화하며, 미디어 복구 이후에 사

용한다.

RESETLOGS

직전에 데이터베이스가 비정상 종료되었을 경우에는 사용할 수 없

으며, 일단 부트가 끝나면 정상(NORMAL) 모드와 같다.

참고

MOUNT 및 RESETLOGS 모드와 미디어 복구에 대한 자세한 설명은 "Tibero RDBMS 관리자 안내

서"의 "6.4 티베로 복구 구조”절 및 "6.6 Media 복구”를 참고한다.

B.3.2. tbdown

tbdown 명령을 이용해서 Tibero/TSAM 서버의 실행을 종료한다.

-t 옵션으로 종료 방식을 지정할 수 있다.

tbdown 명령 사용 방법은 다음과 같다.

tbdown [-h] [-t <downmode>]

tbdown 명령어에 대한 파라미터 설명은 다음과 같다.

설명파라미터

명령어 라인 도움말을 보여준다.-h

Shutdown mode를 지정한다.-t <downmode>

Shutdown Mode에 대한 설명은 다음과 같다.

설명Shutdown Mode

모든 연결이 끊길 때까지 기다린다. (기본값)NORMAL

모든 트랜잭션이 종료될 때까지 기다린다.POST_TX

모든 트랜잭션을 즉시 rollback한다.IMMEDIATE

중지한다. 시작할 때 필요하면 복구를 한다.ABORT

B.4. Tibero/TSAM Fail-over (Active-Standby)Tibero/TSAM 서버 운영 중에 서버가 예측하지 못한 입력에 의해서 비정상 종료되거나 서버가 실행되고

있는 기계 자체의 하드웨어 장애, 네트워크 장애 및 전원 장애 등이 발생할 수 있다. 이러한 경우에 장애시

간을 최소화하기 위해서 Tibero/TSAM 에서는 Active-Standby 형태의 장애 대처 기능이 제공된다. 이러한

장애 대처 기능을 이용하면 최종 사용자에게 좀 더 높은 수준의 가용성을 제공할 수 있다.

94 Tibero TSAM 안내서

Tibero/TSAM의 장애 대처는 기본적으로 두 개의 동일한 구성을 공유하는 Tibero/TSAM 서버(TBSVR) 프

로세스들과 각 노드나 기계마다 Tibero/TSAM의 상태 및 노드 상태를 감시하기 위한 Tibero 클러스터 매

니져(TBCM) 프로세스들로 구현되어 있다.

TBCM은 주기적으로 Tibero/TSAM 서버의 상태를 검사해서 한쪽에 장애상황이 검출되면 해당 서버를 안

전하게 중지하고 나머지 Standby하고 있는 노드를 기동하여 빠른 시간 안에 Tibero/TSAM 서비스 장애를

극복한다.

다만 장애 시점에 Active 노드에 연결되어 처리 중이던 요청들은 실패로 끝나지만 빠른 시간 안에 Standby

노드로 연결하여 이후의 요청에 대해서는 정상적인 서비스를 수행할 수 있다.

아래 그림에서 볼 수 있듯이 Tibero/TSAM Active-Standby fail-over 기능은 공유 디스크와 몇 개의 추가적

인 통신 포트를 사용한다.

[그림 B.2] Tibero/TSAM Active-Standby fail-over 개념도

다음은 장애 상황 별 Tibero/TSAM Active-Standby 장애 대처 시나리오이다.

● 자신의 노드에 기동된 Tibero 서버 장애(down)가 있을 때

TBCM은 자신의 노드에 기동된 Tibero/TSAM 서버 프로세스들을 주기적으로 감시하고 있다가 각 서버

가 다운될 때 재기동 시켜준다.

● Active 노드의 TBCM 장애(down)가 발생했을 때

Standby 노드의 TBCM이 Active 노드의 서버들을 주기적으로 감시하고 있으므로 트랜잭션에는 이상이

없고 정상 수행된다.

● Active 노드의 TBCM과 Tibero 서버 장애(down) 가 있을 때

Appendix B. Tibero/TSAM 운영 및 관리 95

Standby 노드 TBCM이 주기적으로 Active 노드의 TBCM과 Tibero/TSAM 서버 프로세스들을 감시 하고

있다가 Standby 노드의 Tibero/TSAM 서버 프로세스들을 부트한다. 필요한 경우 crash recovery를 수행

한다.

● Active 노드의 TBCM 장애(down) 후 다시 부트할 때

Active 노드 TBCM의 다운 시 트랜잭션에는 이상이 없다가, 나중에 TBCM을 다시 부트할 때 일시적으

로 각 서버(Tibero/TSAM server)들을 재기동 한다.

● Active 노드의 네트워크 장애가 있을 때

– public IP 차단 시 Standby 노드의 TBCM과 heartbeat IP로 통신을 하므로 트랜잭션에는 이상이 없다.

– public IP와 heartbeat IP 모두 차단 시, Active 노드의 TBCM이 Alive 상태를 공유파일에 주기적으로

write하고 Standby 노드의 TBCM이 이 파일의 상태를 체크하므로 거래는 이상 없이 수행된다.

● Active 노드의 네트워크 장애와 함께 Tibero/TSAM 서버 장애(down)가 있을 때

Standby 노드 TBCM이 네트워크와 공유파일을 체크했는데, 아무런 응답이 없으면 백업 노드의

Tibero/TSAM 서버들을 기동시킨다.

B.4.1. TBCM 소개

Tibero 클러스터 매니저(이하 TBCM)는 Tibero 클러스터 관리를 편리하게 하고, 가용성을 높이기 위해 제

공하는 Tibero 데이터베이스의 부가 기능이다.

TBCM은 지속적으로 로컬 Tibero 및 클러스터에 속한 전체 노드들의 상태를 파악하여, 클러스터의 어떤

노드에서 서비스되고 있던 Tibero 서버가 비정상 상태가 되었을 경우 이를 감지하고 자동으로 다른 노드

의 Tibero 서버를 동작시켜 전체 클러스터의 서비스에 문제가 발생하지 않도록 한다.

TBCM의 동작 모드는 STANDBY_SHARED와 STANDBY_REPLICATION의 두 가지가 있다. STAND

BY_SHARED 모드는 공유 디스크에 TBCM 컨트롤 파일을 두고 이를 이용하여 클러스터 관리를 수행한

다. STANDBY_REPLICATION 모드는 공유 디스크 대신 콘트롤 노드를 공유하고 이를 이용하여 클러스

터 관리를 수행한다.

● STANDBY_SHARED

Tibero가 서비스되고 있는 노드 외에 다른 노드들은 Tibero가 동작하지 않고 있다가 서비스하던 노드가

동작을 멈춘 경우에, 다른 노드들 중 한 노드의 Tibero를 부팅시켜 서비스를 시작하고 그 외의 다른 노

드들은 모두 동작하지 않도록 하는 모드이다.

● STANDBY_REPLICATION

96 Tibero TSAM 안내서

Tibero standby 클러스터에서 active 서비스 노드 외에 다른 노드들은 standby 모드로 동작하고 있다가

active 서비스 노드가 동작을 멈춘 경우, standby 모드로 동작하던 노드들 중 한 노드가 active로 서비스

하도록 한다.

참고

여기서는 STANDBY_SHARED 모드를 사용하는 경우에 대해서만 설명한다. STANDBY_REPLICATION

모드를 사용하기 위한 설정 및 운영 방법은 "Tibero RDBMS 관리자 안내서"의 "제 8장 티베로 standby

클러스터" 와 "제9장 티베로 클러스터 매니저"를 참고한다.

tbcm 명령 사용법

다음과 같은 명령 및 옵션을 이용하여 TBCM을 기동하거나 종료할 수 있다.

tbcm -b [LOCK|UNLOCK]

TBCM 데몬을 실행하면 TBCM 데몬은 tip 파일에 설정한 관련 파라미터에 따라 동작하며, 이미 TBCM 데

몬이 동작하고 있을 경우 동일한 포트로 데몬을 실행할 수 없다. 이 경우에는 기존의 TBCM 데몬을 종료

시키거나 tip 파일에서 포트를 수정한 후 실행해야 한다.

LOCK 옵션를 이용하여 외부 명령의 수행을 막은 상태로 TBCM 데몬을 실행할 수도 있다. UNLOCK 옵션

은 외부 명령의 수행을 막지 않은 상태로 TBCM을 실행한다. LOCK 옵션를 이용에 대한 자세한 내용은

"tbcm -l" 의 설명을 참고한다. 지정하지 않은 경우 UNLOCK을 지정한 것과 동일하게 처리된다.

tbcm -d

TBCM 데몬을 종료시킨다. 실행 중인 TBCM 데몬이 없는 경우, 에러를 출력한다.

tbcm -s

TBCM 데몬이 실행되어 있는 경우, 현재 클러스터의 상태 정보를 화면에 출력한다. 실행 중인 TBCM 데몬

이 없는 경우, 에러를 출력한다.

tbcm -v

버전 정보를 출력한다. TBCM의 버전 정보는 Tibero의 버전 정보와 동일하다.

tbcm -l

실행 중인 TBCM 데몬이 Tibero의 동작을 변경하지 못하도록 외부 명령을 수행하는 것을 막는다. TBCM

이 떠 있는 상태에서 관리자가 Tibero에 관리 작업을 하고자 할 때 사용한다.

tbcm -u

위의 tbcm -l 명령으로 TBCM의 외부 명령 수행을 막았던 것을 다시 풀어준다.

Appendix B. Tibero/TSAM 운영 및 관리 97

B.4.2. TBCM 설정

TBCM은 Tibero/TSAM의 환경 변수와 초기 설정 파일을 공유한다. 즉 tbcm은 Tibero/TSAM의 TB_HOME,

TB_SID 환경 변수를 사용하고 TBCM 설정을 위한 파라미터는 Tibero/TSAM의 초기 설정 파일(tip 파일)

을 이용하여 설정한다.

TBCM 초기 설정 파라미터

다음은 TBCM 초기 설정 파라미터에 대한 설명이다.

설명파라미터

TBCM이 어떠한 모드로 동작할 것인지를 지정한다. 현재, STAND

BY_SHARED와 STANDBY_REPLICATION의 두 가지 모드가 사용

가능하다. 지정하지 않을 경우 기본값은 STANDBY_SHARED이다.

TBCM_CLUSTER_MODE

Active-Standby 클러스터에서 노드를 구분하기 위한 노드 이름이다.

노드를 구분하기 위한 식별자로 [노드 이름 + 호스트 이름] 을 사용

TBCM_NAME

하기 때문에, 호스트 이름이 같은 경우에는 반드시 각 노드의 이름이

유일해야 하며, 호스트가 다르더라도 가급적 유일한 이름을 사용하

는 것이 좋다. 노드 이름은 30자까지 가능하며, 세미콜론(;) 문자는

사용할 수 없다.

TBCM 데몬이 사용할 TCP 포트 번호이다. 한 머신에서 두 개 이상

의 TBCM 데몬을 수행할 경우에는 반드시 다르게 지정해 주어야 하

며, 지정하지 않을 경우 기본값은 8631이다.

TBCM_PORT

TBCM 데몬끼리 클러스터를 구성하기 위해 각 데몬들의 TCP 접속

정보를 설정한다. 한 노드의 주소를 IP주소:포트번호 의 형태로 지정

TBCM_NODES

하며, 각 노드 주소 간에는 세미콜론(;)을 이용하여 서로 구분한다.

파라미터의 전체 값은 큰 따옴표(" ")를 이용하여 문자열로 지정한다.

예)

TBCM_NODES="hostp1:8631;hostp2:8631"

TBCM에서 사용하는 시간 단위(tick)를 지정한다. TBCM은 이 단위

시간마다 자신의 노드에 설치된 Tibero 서버와 다른 노드들의 현재

TBCM_TIME_UNIT

상태를 감지한다. 시간은 0.1초 단위로 지정하며 기본값은 10 (즉, 1

초) 이다.

TBCM 데몬 간에는 서로 heartbeat을 통해서 활성화되어 있는지를

알리는데, 이 heartbeat이 얼마동안 오지 않으면 노드를 비활성화된

TBCM_HEARTBEAT_EXPIRE

상태로 판단할 것인지를 설정한다. TBCM_TIME_UNIT 파라미터에

서 지정한 시간 단위로 설정하며, 기본값은 10 (ticks) 이다.

TBCM이 자신의 노드에 설치된 Tibero 서버의 상태를 감지할 때, 얼

마동안 연결이 되지 않으면 서버가 비활성화된 상태라고 판단할 지

TBCM_PROBE_EXPIRE

98 Tibero TSAM 안내서

설명파라미터

를 설정한다. TBCM_TIME_UNIT 파라미터에서 지정한 시간 단위로

설정하며, 기본값은 10 (ticks) 이다.

TBCM은 자신의 노드에 설치된 Tibero의 상태 감지, 부팅, 종료를 위

해서 외부 명령을 사용한다. 이 파라미터들은 각각 그에 해당하는 외

TBCM_PROBE_CMD /

TBCM_BOOT_CMD /부 명령어를 지정한다. 큰 따옴표(" ")를 이용하여 문자열로 기록한

다.TBCM_DOWN_CMD

예)

TBCM_PROBE_CMD="tbprobe"

TBCM_BOOT_CMD="$TB_HOME/scripts/tbcm_boot_cmd.sh"

TBCM_DOWN_CMD="tbdown"

TBCM 데몬이 기동되어 있지 않은 경우에 Tibero를 스스로 종료하

도록 하는 watchdog 기능을 사용할 지를 설정한다. 기본값은 N이지

TBCM_USE_WATCHDOG

만 관리자의 실수로 인하여 Tibero가 여러 노드에서 동시에 부팅되

지 않도록 하기 위해 사용하는 것이 좋다. Watchdog 기능을 사용하

고 TBCM으로만 Tibero를 부팅하는 것이 안전하다.

단, 처음에 Tibero를 newmount 할 때는 반드시 watchdog 기능을 꺼

야 한다. TBCM이 없는 상태에서 Tibero를 부팅하면 아래의

TBCM_WATCHDOG_EXPIRE에서 설정한 시간이 지난 후 자동으

로 종료되기 때문이다.

Watchdog 기능을 사용할 경우에, Tibero가 TBCM으로부터 얼마동

안 watchdog 메시지를 받지 못하면 TBCM을 비활성화된 상태로 판

TBCM_WATCHDOG_EXPIRE

단하고 Tibero를 스스로 종료할 것인지를 설정한다. 이 값은

TBCM_HEARTBEAT_EXPIRE 파라미터의 값보다 작은 값으로만

지정할 수 있다. 그렇지 않을 경우, 다른 노드가 이 노드의 Tibero가

활성화되어 있음에도 불구하고 비활성화된 것으로 판단하여 Tibero

를 부팅시키므로 클러스터의 상태가 비정상적이 될 수 있기 때문이

다. TBCM_TIME_UNIT 파라미터에서 지정한 시간 단위로 설정하며,

기본값은 9 (ticks) 이다.

TBCM 초기 설정 파일의 예

다음은 각각 Active 노드와 Standby 노드의 초기 설정 파일의 예이다. 여기서 Active 노드와 Standby 노드

는 각각 별도의 기계에 설치되어 있고 '/shared' 이하의 디렉터리는 두 기계 사이에 공유되어 있는 상황을

가정한다.

● Active 노드의 초기 설정 파일

Appendix B. Tibero/TSAM 운영 및 관리 99

# Tibero Initialization Parameter

DB_NAME=TVSAM

LISTENER_PORT=8629

CONTROL_FILES=/shared/TVSAM/database/c1.ctl:/shared/TVSAM/database/c2.ctl:

/shared/TVSAM/database/c3.ctl

DB_CREATE_FILE_DEST=/shared/TVSAM/database

WTHR_PROC_CNT=5

_WTHR_PER_PROC=10

TOTAL_SHM_SIZE=512M

DB_BLOCK_SIZE=8K

DB_CACHE_SIZE=200M

LOG_BUFFER=8M

LOG_LVL=2

DBMS_LOG_TOTAL_SIZE_LIMIT=300M

TRACE_LOG_TOTAL_SIZE_LIMIT=300M

# TBCM Parameter (Shared Disk Active-Standby)

TBCM_CLUSTER_MODE=STANDBY_SHARED

TBCM_NAME=TVSAM_N1

TBCM_PORT=8631

TBCM_FILE_NAME=/shared/TVSAM/tbcm.ctl

TBCM_NODES="hostp1:8631;hostp2:8631"

TBCM_PROBE_CMD="tbprobe"

TBCM_BOOT_CMD="$TB_HOME/scripts/tbcm_boot_cmd.sh"

TBCM_DOWN_CMD="tbdown"

TBCM_USE_WATCHDOG=Y

● Standby 노드의 초기 설정 파일

# Tibero Initialization Parameter

DB_NAME=TVSAM

LISTENER_PORT=8629

CONTROL_FILES=/shared/TVSAM/database/c1.ctl:/shared/TVSAM/database/c2.ctl:

/shared/TVSAM/database/c3.ctl

DB_CREATE_FILE_DEST=/shared/TVSAM/database

WTHR_PROC_CNT=5

_WTHR_PER_PROC=10

TOTAL_SHM_SIZE=512M

DB_BLOCK_SIZE=8K

DB_CACHE_SIZE=200M

LOG_BUFFER=8M

LOG_LVL=2

DBMS_LOG_TOTAL_SIZE_LIMIT=300M

TRACE_LOG_TOTAL_SIZE_LIMIT=300M

# TBCM Parameter (Shared Disk Active-Standby)

TBCM_CLUSTER_MODE=STANDBY_SHARED

100 Tibero TSAM 안내서

TBCM_NAME=TVSAM_N2

TBCM_PORT=8631

TBCM_FILE_NAME=/shared/TVSAM/tbcm.ctl

TBCM_NODES="hostp1:8631;hostp2:8631"

TBCM_PROBE_CMD="tbprobe"

TBCM_BOOT_CMD="$TB_HOME/scripts/tbcm_boot_cmd.sh"

TBCM_DOWN_CMD="tbdown"

TBCM_USE_WATCHDOG=Y

클라이언트 접속 설정 (tbnet_alias.tbr)

Tibero/TSAM가 Active 노드 혹은 standby 노드에서 실행될 수 있기 때문에, tbnet_alias.tbr 파일에 각 노

드의 DB에 대한 접속정보를 모두 기술해야 한다.

다음은 클라이언트 접속 설정 예제이다. 굵은 글씨체로 표시된 부분은 운영 환경과 설정에 맞게 수정해야

한다.

primaryDB_SID=(

IP=primaryDB_hostname

PORT=primaryDB_port

DB_NAME=cluster_DB_NAME

)

secondaryDB_SID=(

IP=secondaryDB_hostname

PORT=secondaryDB_port

DB_NAME=cluster_DB_NAME

)

● primaryDB_SID와 secondaryDB_SID

각각 서로 다른 이름으로 지정한다. 또한 DSN으로 사용할 수 있는 값이어야 한다.

● cluster_DB_NAME

각 노드의 Tibero/TSAM tip 파일 설정시 지정한 공통의 DB_NAME을 지정해야 한다.

즉, 위에서 예제로 보인 Active 노드와 Standby 노드의 TBCM 초기 설정 파일을 이용하는 경우, tbnet_alias.tbr

은 다음과 같이 작성할 수 있다.

DBP1=(

IP=hostp1

PORT=8629

DBNAME=TVSAM

)

DBP2=(

IP=hostp2

PORT=8629

Appendix B. Tibero/TSAM 운영 및 관리 101

DBNAME=TVSAM

)

OpenFrame에서 Active-Standby 클러스터 방식으로 운영되는 Tibero/TSAM를 활용하기 위해서는 ds.conf

의 [ICF_BACKUP] 절, [TSAM_BACKUP] 절, [SYS1_BACKUP] 절을 설정할 때 위의 tbnet_alias.tbr에 추

가로 설정된 (예, DBP2) DSN을 지정해야 한다.

참고

OpenFrame 설정파일 ds.conf와 관련한 자세한 내용은 "OpenFrame 데이터 셋 안내서"의 " A.5 설정

파일"을 참고한다.

B.4.3. Tibero/TSAM Fail-over 운영 방법

앞서 설명한 대로 Tibero/TSAM와 TBCM을 설정한 후 실제로 Tibero/TSAM Active-Standby 클러스터를

운영하는 방법은 다음과 같다.

1. Active-Standby 방식 운영을 위한 기동

먼저 Active 노드에서 tbcm -b 명령으로 TBCM을 기동하고 TBCM의 감시하에 Tibero/TSAM를 기동(tb

boot)한다. 이어서 Standby 노드에서 tbcm -b 명령으로 TBCM을 기동해 둔다. 즉, Active 노드에는 TBCM

과 TBSVR가 기동되어 있어야 하고 Standby 노드에는 TBCM만 기동되어 있어야 한다.

● Active 노드 운영 단말

[01] $ tbcm -b

[02] $ tbboot

[03] $

● Standby 노드 운영 단말

[01]

[02]

[03] $ tbcm -b

2. Fail-over 동작

Tibero/TSAM를 운영하는 중에 Active 노드에서 Fail-over할 수 없는 형태의 장애상황이 발생하면,

Standby 노드의 TBCM이 자신의 노드에서 Tibero/TSAM를 기동하고 이 후에는 Standby 노드에서

Tibero/TSAM가 운영된다.

3. 장애 문제 해결

운영자는 Active 노드에서 발생한 장애의 원인을 파악하고 해결한다. 이 때 장애가 해결되더라도 가급

적 Tibero/TSAM를 이용하는 서브 시스템을 종료할 수 있을 때까지는 Standby 노드에서 계속 Tibero/TSAM

102 Tibero TSAM 안내서

를 운영하는 것이 좋다. 해당 서브시스템을 운영중에 Standby 노드의 Tibero/TSAM를 종료하고 Active

노드로 전환하게 되면 그 당시 진행 중인 거래가 실패할 수 있기 때문이다.

4. Active 노드에서 서비스 재운영 (fail-back)

해당 장애의 원인을 해결한 후 다시 Active 노드에서 Tibero/TSAM를 운영한다.

Standby 노드에서 tbcm -l 명령으로 Standby 노드의 tbcm이 자신의 노드에서 TBSVR를 재기동하지 못

하도록 해두고 tbdown 명령으로 Standby 노드의 Tibero/TSAM를 종료한다. Active 노드에서 TBCM과

TBSVR를 기동한 후 마지막으로 Standby 노드에서 tbcm -u 명령으로 다음 Fail-over시에 Standby 노드

에서 TBSVR가 기동될 수 있도록 한다.

● Active 노드 운영 단말

[01]

[02]

[03] $ tbcm -b

[04] $ tbboot

[05]

● Standby 노드 운영 단말

[01] $ tbcm -l

[02] $ tbdown

[03]

[04]

[05] $ tbcm -u

B.5. Tibero/TSAM Online 백업Tibero/TSAM Online 백업기능을 사용하면 서버를 다운(shutdown)시키지 않은 상태에서 추후 복원에 사

용될 데이터베이스 파일들의 백업 카피를 얻을 수 있다.

특히 오랫동안 데이터베이스 서버를 재기동하지 않고 계속 사용하는 경우 아카이브 로그 및 해당 시점의

데이터 파일이 없으면 완전하게 복구하는 것이 불가능할 수 있기 때문에 적절한 주기로 백업을 해야 한다.

이때 Online 백업을 이용하면 데이터베이스 서버를 내리지 않고도 필요한 백업 카피를 얻을 수 있다.

결과적으로 Tibero/TSAM 운영/관리를 위한 tbboot/tbdown 과정이 필요 없어짐으로써 운영/관리 절차상의

실수를 미연에 방지할 수 있으며 동시에 운영/관리를 위한 서비스 다운타임을 최소화할 수 있다.

Tibero/TSAM Online 백업은 안정적인 데이터 파일의 백업을 보장하기 위해 백업용 복사본을 만들기 전/

후에 백업 작업의 시작과 끝을 Tibero/TSAM 서버에 알려 주어야 한다. 이 사이에 운영체제의 복사 명령을

사용하여 안전하게 백업을 할 수 있다. 백업 작업의 시작과 끝을 알려주기 위해서는 alter tablespace

<tablespace-name> begin backup 명령과 alter tablespace <tablespace-name> end backup 명령을

사용한다.

Appendix B. Tibero/TSAM 운영 및 관리 103

경고

begin backup과 end backup 명령 사이에는 해당 테이블 스페이스에 대한 데이터베이스의 변경사항

에 대한 로그의 양이 늘어나기 때문에 데이터베이스에 불필요한 부담이 가중되게 된다. 따라서, 일단

begin backup을 시작한 이후에는 가능한 신속하게 백업을 종료하여 end backup 상태로 복귀 시켜야

한다.

일반적인 Tibero/TSAM 데이터베이스의 Online 백업 절차 및 고려사항은 다음과 같다.

1. 백업 카피를 저장할 디렉터리 생성

데이터 파일과 컨트롤 파일을 백업할 디렉터리를 생성하는 예이다.

$ mkdir -p /backup/{backup_date}

아카이브 로그 파일을 백업할 디렉터리를 생성하는 예이다.

$ mkdir -p /arcback/{backup_date}

2. 백업 대상 파일 조사

미리 백업할 테이블 스페이스와 그에 해당하는 데이터 파일의 목록을 조사해 둔다.

다음 SQL을 이용하여 데이터베이스에 어떠한 테이블 스페이스들이 있는지 알 수 있다.

SQL> select name,type from v$tablespace;

NAME TYPE

------------------------------ ----

SYSTEM DATA

UNDO UNDO

TEMP TEMP

USR DATA

TACF00 DATA

100000 DATA

100001 DATA

7 rows selected

예를 들어 테이블 스페이스 '100000'를 백업하려는 경우 다음 SQL을 이용하여 이 테이블 스페이스에

해당하는 데이터 파일의 목록을 알 수 있다.

SQL> select f.name

from v$tablespace t join v$datafile f on t.ts# = f.ts#

where t.name = '100000';

NAME

------------------------------------------------------------

/tibero3/instance/TVSAM/database/100000.dbf

104 Tibero TSAM 안내서

1 row selected

3. 테이블 스페이스를 Online 백업 상태로 변경 (begin backup)

Online 백업은 가급적 시스템의 부하가 없는 시점에 하도록 사전에 계획한다.

다음은 begin backup 명령을 실행하여 테이블 스페이스 '100000'을 Online 백업 상태로 변경하는 예이

다.

SQL> alter tablespace '100000' begin backup;

altered

4. 백업 복사

다음은 Tibero/TSAM 인스턴스의 database 디렉터리의 컨트롤 파일들과 테이블 스페이스 '100000'에

해당하는 데이터 파일들을 미리 생성해둔 백업 디렉터리로 복사하는 예이다.

$ cp /tibero3/instance/TVSAM/database/100000*.dbf /backup/{backup_date}

$ cp /tibero3/instance/TVSAM/database/*.ctl /backup/{backup_date}

5. 테이블 스페이스를 정상운영 상태로 원복 (end backup)

다음은 end backup 명령을 실행하여 테이블 스페이스 '100000'을 Online 백업 상태에서 정상 운영 상

태로 복구하는 예이다.

SQL> alter tablespace '100000' end backup;

altered

6. 아카이브 로그 백업

다음은 Tibero/TSAM 인스턴스의 archive 디렉터리 밑에 있는 아카이브 로그 파일들을 미리 만들어둔

백업 디렉터리로 복사하는 예이다. 아카이브 로그는 begin backup 과 end backup 명령 없이 복사할 수

있다.

$ cp /tibero3/instance/TVSAM/database/archive/* /arcback/{backup_date}

$rm –f /tibero3/instance/TVSAM/database/archive/*

아카이브 로그 파일들은 Tibero/TSAM 서버에서 운영을 위해서 사용하는 파일이 아니므로 백업 디렉터

리에 복사본을 만든 후에는 삭제할 수 있다.

Appendix B. Tibero/TSAM 운영 및 관리 105

B.6. Tibero/TSAM 모니터링 및 문제 분석

B.6.1. Dynamic views and DBA tables for Monitoring

Tibero/TSAM 서버의 성능 및 상태를 조사하기 위해 동적 뷰(Dynamic View)의 내용이나 데이터베이스 관

리자를 위한 테이블(DBA Table)을 검색하려면 sys 사용자로 Tibero/TSAM에 접속하여 다음과 같은 SQL

명령을 실행한다.

여기서는 데이터베이스 관리자가 빈번하게 조사하게 되는 몇 가지 동적 뷰와 DBA 테이블을 이용하는 예

제를 살펴본다.

V$TRANSACTION

운영 중인 트랜잭션의 정보를 보여준다.

SQL> select sess_id, slot, state, start_time, start_base from v$transaction;

SESS_ID SLOT STATE START_TIME START_BASE

---------- ---------- ---------- ---------- ----------

62 34 3 2009/02/03 1325990

64 44 3 2009/02/03 1325990

66 13 3 2009/02/03 1326005

3 rows selected.

V$SESSION

각각의 세션 정보를 보여준다.

SQL> select sid, serial#, status, username, ipaddr, client_pid from v$session;

SID SERIAL# STATUS USERNAME IPADDR CLIENT_PID

---------- ---------- ------- ---------------- ---------------- ----------

22 4 RUNNING SYS 6072

23 5 ACTIVE TIBERO 13499

24 8 ACTIVE TIBERO 13496

25 17 ACTIVE TIBERO 13498

26 23 ACTIVE TIBERO 13491

27 16 ACTIVE TIBERO 13502

28 24 ACTIVE TIBERO 13492

32 50 ACTIVE TIBERO 13500

33 32 ACTIVE TIBERO 13503

34 72 ACTIVE TIBERO 13499

10 rows selected.

106 Tibero TSAM 안내서

DBA_TABLESPACES

데이터베이스에 정의된 테이블 스페이스에 관한 정보를 보여준다.

SQL> select tablespace_name, ts_id, datafile_count, next_extent, status, contents,

allocation_type from dba_tablespaces;

TABLESPACE_NAME TS_ID DATAF NEXT_EXTENT STATUS CONTENTS ALLOCAT

--------------- ----- ----- ----------- ------- --------- -------

SYSTEM 0 1 131072 ONLINE PERMANENT SYSTEM

UNDO 1 1 131072 ONLINE UNDO SYSTEM

TEMP 2 1 131072 ONLINE TEMPORARY UNIFORM

USR 3 1 131072 ONLINE PERMANENT SYSTEM

TACF00 4 1 131072 ONLINE PERMANENT SYSTEM

100000 5 1 131072 ONLINE PERMANENT SYSTEM

100001 6 1 131072 ONLINE PERMANENT SYSTEM

7 rows selected.

DBA_DATA_FILES

데이터베이스에서 사용중인 물리적인 데이터 파일에 관한 정보를 보여준다.

SQL> select file_id, tablespace_name, bytes, autoextensible, maxbytes, increment_by

from dba_data_files;

FILE_ID TABLESPACE_NAME BYTES AUT MAXBYTES INCREMENT_

---------- ---------------- ---------- --- ---------- ----------

0 SYSTEM 104857600 YES 1073741824 1280

1 UNDO 996147200 YES 1073741824 1280

2 USR 104857600 YES 1073741824 1280

3 TACF00 67108864 NO 3.436E+10 32

4 100000 104857600 NO 3.436E+10 32

5 100001 104857600 NO 3.436E+10 32

6 rows selected.

DBA_EXTENTS

데이터베이스 스토리지의 기본할당 단위인 익스텐트(extent)가 각 테이블스페이스 및 세그먼트 관계하에

서 어떻게 할당되어 있는지에 관한 정보를 보여준다.

SQL> select segment_name, segment_type, extent_id, file_id, block_id, blocks

from dba_extents where tablespace_name='100000';

SEGMENT_NAME SEGMENT_TYPE EXTENT_ID FILE_ID BLOCK_ID BLOCKS

---------------------- ------------ ---------- ---------- ---------- ----------

Appendix B. Tibero/TSAM 운영 및 관리 107

...

SYS1.MASTER.ICFCAT TABLE 0 4 7 16

SYS1.MASTER.ICFCAT TABLE 1 4 2551 16

SYS1.MASTER.ICFCAT_KEY INDEX 0 4 23 16

SYS1.RBA.V100000 TABLE 0 4 39 16

SYS1.RBA.V100000_KEY INDEX 0 4 55 16

SYS1.VVDS.V100000 TABLE 0 4 71 16

SYS1.VVDS.V100000_NUM INDEX 0 4 87 16

...

117 rows selected.

참고

위에서 설명한 동적 뷰와 DBA 테이블 외에도 많은 동적 뷰와 DBA 테이블이 있다. 자세한 내용은

"Tibero RDBMS 레퍼런스 안내서"의 "제3장 정적 뷰"와 "제4장 동적 뷰"를 참조한다.

B.6.2. 문제 분석용 로그 파일들

dbms 로그

dbms 로그에는 데이터베이스 시스템 운영에 도움이 될 수 있는 여러 가지 메시지들이 저장된다. 일반적

으로 운영할 때 지속적인 검토가 필요한 메시지들을 보관한다. dbms log2는 $TB_HOME/in

stance/$TB_SID/log/dbmslog 디렉터리에 있다.

dbms 로그에 저장되는 메시지의 종류는 다음과 같다.

● 데이터베이스 구조나 구성에 관련된 중요 특성의 변경

● 데이터베이스 시스템 운영에 도움이 될 수 있는 이벤트

● 시스템 주요 속성을 변경과 관련된 SQL문

● 기타 경고 메시지

trace 로그

데이터베이스 서버 문제를 분석할 때 사용하기 위한 trace 로그를 저장하는 로그파일이다. 적당한 레벨의

trace 로그를 남기면 문제 분석 시에 도움이 되는 자료로 활용된다. 실제 운영할 때 낮은 레벨(1~3)의 trace

로그를 남기고 문제 재연 시는 높은 레벨로 변경하는 방식을 사용한다. trace 로그는 $TB_HOME/in

stance/$TB_SID/log/tracelog 디렉터리에 있다.

정상적인 운영을 할 경우에는 trace 로그를 참조할 필요가 없다.

108 Tibero TSAM 안내서

다음과 같은 SQL을 이용하여 Tibero/TSAM 서버의 트레이스 로그 레벨을 동적으로 변경할 수 있다.

다음은 로그 레벨을 5로 변경하는 예이다.

SQL> alter system set log_lvl=5;

altered

tbsvr.out

Tibero/TSAM 서버(TBSVR)는 이 파일에 문제 상황의 분석에 도움이 될 만한 여러가지 메시지들을 저장한

다. 이 파일은 $TB_HOME/instance 디렉터리에 tbsvr.out.<pid> 와 같은 파일 이름으로 생성된다.

경고

tbsvr.out.<pid> 파일은 Tibero/TSAM 서버가 기동 될 때마다 하나씩 생기므로, 자주 tbboot/tbdown을

반복하는 경우에 이 파일들이 많아질 수 있다. 주기적으로 확인하고 삭제하는 작업이 필요할 수 있

다.

Appendix B. Tibero/TSAM 운영 및 관리 109

용어해설

논리 레코드 (Logical Record)

논리 레코드는 TSAM 데이터 셋에 저장되는 정보의 기본 단위이다. 논리 레코드는 애플리케이션에서 처리되

는 개별 항목에 대한 정보의 Byte로 구성되어 있다. 이 항목은 고객에 대한 정보일 수도 있고, 직원에 대한 정

보일 수도 있다.

논리 레코드는 애플리케이션의 목적 및 레코드에 저장할 정보의 내용에 따라서 응용프로그래머에 의해 설계

된다. 예를 들어 고객에 대한 정보를 갖는 논리 레코드라면 고객의 이름, 주소, 계좌번호 등의 필드를 저장하게

끔 설계할 수 있을 것이다.

논리 레코드는 업무 요구사항 및 저장할 정보의 특성에 따라서 고정길이 레코드나 가변길이 레코드가 될 수

있다. TSAM은 데이터 셋의 유형에 따라 고정길이 레코드와 가변길이 레코드를 모두 지원한다.

데이터 셋 이름 (DSNAME)

새로운 데이터 셋을 할당할 때마다 사용자는 데이터 셋에 유일한 이름을 지어 주어야 한다. 일반적으로 데이

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

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

그먼트는 마침표(.)로 구분하며 퀄리피케이션의 레벨을 나타낸다.

예를 들어 PERSCOM.ENLIST.PSNLREC라는 데이터 셋 이름은 세 개의 이름 세그먼트로 구성되어 있다. 첫

번째 이름 세그먼트는 상위 레벨 퀄리파이어 (High Level Qualifier)라고 불리고, 마지막 이름 세그먼트는 하위

레벨 퀄리파이어 (Low Level Qualifier)라고 불린다.

TSAM 데이터 셋은 다음과 같은 이름 규칙을 갖고 생성된다.

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

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

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

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

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

레코드 인식자 (Record Identifier)

TSAM에서 논리 레코드를 찾는 방법은 아래와 같은 세가지 방법이 있다. 이 세 가지를 통칭하여 레코드 인식

자 혹은 레코드 구분자라고 부른다.

● 키 필드

용어해설 111

논리 레코드의 일부분으로 레코드를 구분하기 위한 정보를 갖는다. 키 필드를 갖는 특정 데이터 셋의 모든

레코드상에서 키 필드의 위치는 동일하다. 키 필드의 최대 크기는 255 Byte이다.

● 상대 Byte 주소 (RBA: Relative Byte Address)

논리 레코드의 RBA는 파일의 처음에서부터 논리 레코드의 첫 번째 Byte까지의 오프셋을 말한다. 그러면

TSAM 파일에서 첫 번째 논리 레코드의 RBA는 0이고, 두 번째 논리 레코드는 첫 번째 레코드의 레코드 길이

와 같게 된다. 논리 레코드의 RBA는 이 논리 레코드 앞에 포함되어 있는 여유 공간과 컨트롤 정보를 포함한

오프셋이다.

● 상대 레코드 번호 (RRN: Relative Record Number)

TSAM RRDS 데이터 셋에서 사용되는 논리 레코드의 상대 번호를 의미한다. 만약 어떤 논리 레코드의 RRN

이 3이라면 이것은 데이터 셋의 세번째 논리 레코드를 의미한다.

물리 레코드 (Physical Record)

물리 레코드는 데이터 셋이 정의될 때 크기가 결정되는 장치 의존적인 레코드이다. 모든 물리 레코드는 같은

길이를 가진다. 물리 레코드는 물리 블록(Physical Block) 또는 그냥 블록이라고 불린다.

물리 레코드의 데이터는 일반적으로 한 번의 읽기 또는 쓰기 동작으로 전송되는 논리 레코드의 집합이다. 액

세스 메소드는 BLKSIZE라는 파라미터로 물리 레코드의 길이를 결정한다.

카탈로그 (Catalog)

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

사용한다. VTOC는 한 볼륨 안에 있는 데이터 셋의 목록을 관리하고, 한 데이터 셋에 대한 기타 다른 정보와 더

불어 물리적인 디스크 주소와 데이터 셋의 크기를 관리한다.

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

모든 종류의 데이터 셋은 아래의 방법을 통해 카탈로그에 등록될 수 있다.

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

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

이미 존재하는 데이터 셋은 IDCAMS의 DEFINE RECATALOG 명령을 통해 카탈로그에 등록할 수 있다.

컴포넌트 (Component)

컴포넌트는 TSAM 데이터 셋을 구성하는 파트이다. 각 컴포넌트는 이름을 가지고 있고, 카탈로그와 VTOC에

등록된다. KSDS와 VRDS는 데이터 컴포넌트와 인덱스 컴포넌트를 가지고 있고, ESDS와 RRDS는 데이터 컴

포넌트만 가지고 있다.

● 데이터 컴포넌트 (Data Component)

데이터 컴포넌트는 데이터 레코드를 포함하는 TSAM 데이터 셋, 보조 인덱스 또는 카탈로그의 구성 파트이

다.

112 Tibero TSAM 안내서

● 인덱스 컴포넌트 (Index Component)

특정한 키가 주어지면 인덱스를 사용해서 TSAM은 데이터 컴포넌트에서 임의로 레코드를 읽어 들일 수 있

다. 여기서 키는 데이터 셋 안에서 레코드의 위치를 결정한다.

클러스터 (Cluster)

클러스터는 최대 두 개로 이루어진 관련된 컴포넌트의 집합이다. KSDS의 경우에 하나의 클러스터는 하나의

데이터 컴포넌트와 하나의 인덱스 컴포넌트로 이루어 진다. 클러스터의 개념은 데이터 컴포넌트와 인덱스 컴

포넌트를 하나의 엔티티로 묶고, 카탈로그에 등록함으로써 TSAM 처리를 단순화시킨다.

RRDS와 ESDS는 인덱스 컴포넌트가 없는 클러스터로 간주되고, 일관성을 위해서 데이터 셋을 처리하기 위

해 클러스터 이름이 사용된다.

키 필드 (Key Field)

논리 레코드의 중요한 필드 중의 하나가 키 필드이다. 특정한 논리 레코드를 읽어 들일 때 사용되며, 고객 번호

나 부품 번호 등이 키 필드가 될 수 있다.

베이스 클러스터에서 사용되는 키를 기본키 또는 베이스 키라고 부르고, 보조 인덱스에서 사용되는 키를 보조

키라고 부른다.

KSDS 데이터 셋에서 각각의 레코드는 반드시 같은 위치에 고정길이의 유일한 기본키를 가지고 있어야 한다.

기본키는 최소 1 Byte에서 최대 255 Byte까지 될 수 있다.

하나의 논리 레코드 타입에 대해 대체키(Alternate Key) 또는 보조키(Secondary Key)라고 불리는 여러 개의

추가적인 키 필드를 정의할 수 있다. 항상 유일한 값을 가지고 있어야 하는 기본키와는 달리, 동일한 보조키 값

을 갖는 여러 개의 논리 레코드가 존재할 수 있다.

VSAM

VSAM은 기존 Non-VSAM의 비효율적인 점을 개선하기 위한 좀 더 발전된 액세스 메소드이다. 특히 KSDS는

기존의 ISAM이 제공하던 인덱스 데이터 셋에 대한 처리의 비효율성을 개선하는 것이 주요 목적이다. 이외에

도 ESDS는 순차 데이터 셋을, RRDS는 직접 데이터 셋을 좀 더 효율적으로 처리하려는 목적을 가지고 있다.

그러나 Non-VSAM 데이터 셋 중에서도 가장 기본적이고 구현이 간단한 순차 데이터 셋과 이를 처리하는 액세

스 메소드인 BSAM 및 QSAM은 VSAM의 ESDS로 대체할 이유가 없기 때문에 현재까지도 사용되고 있다. 또

한 분할 데이터 셋과 이를 처리하는 액세스 메소드인 BPAM 역시 라이브러리 관리 등의 고유한 용도로 현재까

지 사용되는 데이터 셋 및 액세스 메소드이다.

용어해설 113

색인

AAccess Method Service (AMS), 31

JJCL (Job Control Language), 31

SSTANDBY_REPLICATION, 96

STANDBY_SHARED, 96

TTSAM/RDB (Oracle), 4

TSAM/Tibero, 4

동적 액세스 (Dynamic Access), 34

사용자 데이터 셋, 3

순차 액세스 (Sequential Access), 6, 7, 8, 34, 35

스킵 순차 액세스 (Skip-Sequential Access), 8

임의 액세스 (Random Access), 34, 35

입력 모드 (Input Mode), 33

입출력 모드 (Input/Output Mode), 33

직접 액세스 (Direct Access), 6, 7, 8

출력 모드 (Output Mode), 33

카탈로그 정보, 3

확장 모드 (Extend Mode), 33

색인 115