시스템 환경설정

본 장에서는 OSI 시스템의 운영을 위해 필요한 환경설정 방법 및 예제에 대해 기술한다.

1. 개요

OSI 시스템 설치가 완료된 후에 사용자는 먼저 OSI 시스템의 환경에 기본적으로 설정되어야 하는 항목에 대해 시스템에서 지정한 대로 설정을 완료해야 한다.

OSI 시스템 환경에 구성해야 하는 내용은 다음과 같다.

2. 시스템 환경설정 파일

OSI 시스템에 필요한 시스템 설정값 중 동적으로 반영할 수 없는 항목은 대부분 환경설정 파일에 기술되고, OSI 시스템이 기동될 때 지정된 값이 시스템에 적용된다.

2.1. openframe_osi.conf

OSI 시스템을 운영하기 위해서는 openframe_osi.conf 파일에 다음의 서브젝트 항목들을 설정한 후 ofconfig 툴을 이용하여 OpenFrame 시스템에 적용해야 한다.

서브젝트 설명

osi

OSI 시스템의 모든 모듈에서 공통으로 참조하는 항목으로, 항목에 설정된 값은 OSI의 모든 모듈에 적용된다.

osi.[IMSID]

OSI에서 각 IMS 시스템에 해당하는 IMSID로 구분하며, 항목에 설정된 값은 해당 IMS 시스템의 모든 모듈에 적용된다. IMSID는 4자리의 Alphanumeric 문자로 설정해야 한다.

osi.[osiotmasvrname]

OSI와 IBM MQ 간의 OTMA 기능을 위한 설정을 한다. 한 개의 OTMA 서버당 한 개의 서브젝트 항목이 필요하며, osiotmasvrname은 MQ 사용자 서버 설정에 등록된 서버 이름으로 설정해야 한다.

ssm.[IMSID][SSM]

OSI에서 IMS 시스템별로 MultipleRM을 사용하기 위해 Tmax XA 서버에 적용하는 항목을 설정한다.

  1. OpenFrame 환경설정을 위한 서브젝트와 설정방법에 대한 자세한 내용은 OpenFrame OSI "환경설정 안내서"를 참고한다.

  2. ofconfig 툴과 관련된 사용법 및 자세한 설명은 OpenFrame Base "툴 참조 안내서"를 참고한다.

2.2. osi.ofsys.seq

OSI 시스템에서 리전 서버(Region Server)를 제외한 Base, Batch, TACF 서버들의 이름을 지정하여 osiboot할 때 기동할 Tmax 서버들을 선택할 수 있다. OTMA 서버도 여기에 포함된다.

다음은 osi.ofsys.seq의 예제이다.

#BASE
TPFMAGENT
ofrsasvr
ofrlhsvr
ofrdmsvr
ofrdsedt
ofrcmsvr
ofruisvr
ofrsmlog

#BATCH
obmjmsvr
obmjschd
obmjinit
obmjhist
obmjspbk
ofrpmsvr
obmtsmgr
obmjtimr

#TACF
tmsvr

#OSI
#IMSAOTMA

2.3. TCache 설정

OSI는 멀티 노드 클러스터링 기능 지원을 위해 RTSD를 포함하여 리전 간에 공유가 필요한 정보들을 DB 테이블에서 관리하고 있는데, TCache를 이용하여 DB 테이블로부터 Access하는 데이터를 공유 메모리에 캐싱함으로써 Read 성능을 보장하고 있다. TCache 설정은 노드별로 필요하며, 사용할 공유 메모리 키와 리전별 리소스 정보를 설정한다.

기본 설정에 대한 자세한 사항은 "Tmax TCache 안내서"를 참고한다.

다음은 pfmtcache.conf의 예제이다. LOCK_WAITTIME 설정은 사용하는 TCache 버전에 맞는 설정을 사용한다.

# the configuration file of TCACHE
SHMKEY=0x70005                      # the key of shared memory
IPCPERM=0600                        # permission of the shared memory
SIZE_LOCAL=32                       # L1 cache size in kilo-bytes
LIB_PTHREAD=libpthread.so           # the pthread library file name
INVALIDATE_TYPE=0                   # Invalidate type 0:multi-node 1:multi-domain
AGENT_SVC=SPFMAGENT                 # multi-node sync. svc SPFMAGENT|2 = SPFMAGENT01, SPFMAGENT02

# lock wait time for earlier than r11724
# LOCK_WAITTIME=1000                  # read, write lock wait time (default: 1000)

# lock wait time for r11724 and later
# WRITE_LOCK_WAITTIME=1000            # write lock wait time (default: 1000, recommed larger value than READ_LOCK_WAITTIME)
# READ_LOCK_WAITTIME=1000             # read lock wait time (default: 0)

# cache for OSI Region Status
CACHE_NAME=OFM_OSI_REGION_STATUS    # table name
SIZE_MEM=32                         # the total cache memory size in kilo-bytes
SIZE_HASH=32                        # the number of hash key (MAX=65536)
SIZE_KEY=4                          # the number of digits of the index column
SIZE_REC=8                          # the size of a single record in bytes
INV_TIMEOUT=0                       # invalidation timeout in sec

# cache for IMSA Region
CACHE_NAME=IMSA                     # IMSID
SIZE_MEM=65535                      # the total cache memory size in kilo-bytes
SIZE_HASH=32                        # the number of hash key (MAX=65536)
SIZE_KEY=13                         # the number of digits of the index column
SIZE_REC=289                        # the size of a single record in bytes
INV_TIMEOUT=0                       # invalidation timeout in sec

#cache for OFM_OSI_DBD
CACHE_NAME=OFM_OSI_DBD              # the name of cache
SIZE_MEM=65535                      # the total cache memory size in kilo-bytes
SIZE_HASH=32                        # the number of hash key (MAX=65536)
SIZE_KEY=64                         # the number of digits of the index column
SIZE_REC=2048                       # the size of a single record in bytes
INV_TIMEOUT=0                       # invalidation timeout in sec

#cache for OFM_OSI_PSB
CACHE_NAME=OFM_OSI_PSB              # the name of cache
SIZE_MEM=65535                      # the total cache memory size in kilo-bytes
SIZE_HASH=32                        # the number of hash key (MAX=65536)
SIZE_KEY=64                         # the number of digits of the index column
SIZE_REC=1024                       # the size of a single record in bytes
INV_TIMEOUT=0                       # invalidation timeout in sec

3. 라이브러리 설정

시스템 기동 전에 시스템 운영에 필요한 정보들이 미리 준비되어 있어야 한다. 본 절에서는 OSI 운영에 필요한 정보들의 종류와 정보별로 해당 정보를 준비하는 과정을 설명한다. 대부분의 정보들은 RDB 테이블의 레코드 형태로 저장되며, MDA, MFS 등 일부는 데이터셋 또는 UNIX 파일 형태로 저장된다.

OSI 운영에 필요한 라이브러리는 다음과 같다.

라이브러리 설명

DBDLIB

OpenFrame HiDB의 사용을 위한 DBD 정보를 저장하는 라이브러리이다.

DFSRESLB

데이터셋의 동적 사용에 필요한 정보를 저장하는 라이브러리이다.

FORMAT

OSI에서 매핑 기능을 지원하기 위한 MFS 정보를 저장하는 Staging Library이다.

FORMATA / FORMATB

OSI에서 매핑 기능을 지원하기 위한 MFS 정보를 저장하고 Online에서 실제 사용하는 라이브러리이다.

IMSACB

PSB와 DBD를 통합 관리를 위한 ACB 정보를 저장하는 Staging Library이다.

IMSACBA/IMSACBB

PSB와 DBD를 통합 관리를 위한 ACB 정보를 저장하고 Online에서 실제 사용하는 라이브러리이다.

MODBLKS

OSI 운영을 위한 시스템 정보를 저장하는 Staging Library이다.

MODBLKSA / MODBLKSB

OSI 운영을 위한 시스템 정보를 저장하고 Online에서 실제 사용하는 라이브러리이다.

MODSTAT

동적 변경을 지원하는 데이터셋의 현재 ACTIVE 데이터셋 정보를 담고 있는 데이터셋이다.

PSBLIB

애플리케이션 프로그램의 사용을 위한 PSB 정보를 저장하는 라이브러리이다.

RESLIB

데이터셋의 동적 사용에 필요한 MDA 정보를 저장하는 라이브러리이다. (DFSRESLB과 동일)

STEPLIB

애플리케이션 개발자가 작성한 프로그램의 Shared Object 형태 실행 모듈 관리를 위한 디렉터리이다.

  1. 각 라이브러리 설명 중 데이터셋 사용법 및 PDS의 자세한 설명은 OpenFrame Base "데이터셋 안내서"를 참고한다.

  2. 각 라이브러리 설명 중 IDCAMS 사용법의 자세한 내용은 OpenFrame Batch "유틸리티 참조 안내서"를 참고한다.

  3. 각 라이브러리 설명 중 DBD, PSB, ACB, MDA 정보 등록 및 관리와 OpenFrame HiDB 생성의 자세한 내용은 OpenFrame HiDB "HiDB 안내서"를 참고한다.

  4. 라이브러리 설정하는 과정에 사용되는 툴과 관련된 사용법 및 자세한 설명은 OpenFrame OSI "툴 참조 안내서"를 참고한다.

3.1. DBDLIB

DBD는 OpenFrame HiDB의 특징을 정의하는 매크로 파라미터 문장의 집합으로 데이터베이스 구조, 액세스 메소드, 데이터베이스 내의 세그먼트와 필드 및 세그먼트 타입 간의 관계를 정의한다.

데이터셋 생성

DBDLIB을 사용하기 위해서는 시스템 준비 과정에서 데이터셋을 생성하는 절차가 필요하다. DBDLIB은 PDS 형태로 구성되며 개별 환경설정 파일은 DBDLIB의 멤버 형태로 저장된다. OSI에서 DBDLIB을 생성하기 위해서는 pdsgen이라는 툴을 사용한다.

다음은 pdsgen을 사용하여 IMS.DBDLIB을 DEFVOL이라는 볼륨에 생성하는 예제이다.

$ pdsgen IMS.DBDLIB DEFVOL -f LB -l 32760
pdsgen version 7.1.0(0) oframe@tmax:ofsrc/base(#1) 2020-06-29 17:30:26
PDS Dataset Generation Program

pdsgen: *** PDS IMS.DBDLIB is created.
DBD 정보 등록

OSI에서 DBD를 사용하기 위해서는 dbdgen이라는 툴을 사용하여 DBD 정보를 등록해야 한다.

다음은 DBD 컨트롤문이 들어 있는 OIVPIDBD라는 파일을 dbdgen을 이용하여 DBD 정보를 등록하는 예제이다.

$ dbdgen OIVPIDBD
dbdgen version 7.2.0(0) oframe@tmax:ofsrc/ims(#3) 2020-08-08 16:21:16
Database Description Block Generation Program

dbdgen: force flag on; the tool overwrites existing data
dbdgen: 1 files are requested in total
------------------------------------------------------------
dbdgen: processing DBD script "OIVPIDBD"
------------------------------------------------------------

dbdgen: processing DBD "OIVPIDBD"
dbdgen: removing existing DBD OIVPIDBD metadata
dbdgen: successfully processed DBD "OIVPIDBD"
dbdgen: successfully processed for the requested DBDs (total 1)

현재 버전에서는 dbdgen을 수행하게 되면 DBD 스크립트에 기술되어 있는 데이터베이스 스키마 정보가 메타 테이블에 저장된다. 실제로 DBDLIB에는 아무것도 저장되지 않는다.

3.2. DFSRESLB

PSB 리소스를 사용하는 프로그램을 기동하려면 사용할 PSB 정보와 DBD에 정의한 데이터셋 정보를 프로그램에 전달할 수 있는 방법이 필요하다.

OpenFrame Batch는 JCL을 사용하여 애플리케이션 프로그램을 실행하는데, 이때 JCL의 DD 문을 통해 PSB 정보와 DBD의 데이터셋 정보를 프로그램에 전달할 수 있다. 하지만 OSI는 하나의 Region에서 여러 프로그램을 수행해야 하고 Region을 기동할 때 사용하는 JCL에는 모든 DD 문을 기술할 수 없기 때문에 OpenFrame Batch와는 다른 방법으로 필요한 정보를 프로그램에 전달해야 한다. 따라서 OSI에서는 DFSRESLB에 데이터셋의 동적 사용에 필요한 정보를 저장하는 방식을 이용한다.

동적 DD 할당에 대한 자세한 사항은 IBM IMS DFSMDA macro 매뉴얼을 참조한다.

데이터셋 생성

DFSRESLB를 위해서는 시스템을 준비하는 과정에서 데이터셋을 생성하는 절차가 필요하다. DFSRESLB는 PDS 데이터셋 형태로 구성되며 개별 설정 파일은 DFSRESLB의 멤버 형태로 저장된다. OSI에서 DFSRESLB를 생성하기 위해서는 pdsgen 툴을 사용한다.

다음은 pdsgen을 사용하여 IMS.RESLIB을 DEFVOL이라는 볼륨에 생성하는 예제이다.

$ pdsgen IMS.RESLIB DEFVOL -f LB -l 32760
pdsgen version 7.1.0(0) oframe@tmax:ofsrc/base(#1) 2020-06-29 17:30:26
PDS Dataset Generation Program

pdsgen: *** PDS IMS.RESLIB is created.
MDA 정보 등록

OSI에서 MDA를 사용하기 위해서는 imsdaloc 툴을 사용하여 MDA 정보를 등록해야 한다.

다음은 MDA를 정의하는 스크립트가 저장되어 있는 OIVPIDBD 파일을 이용해서 DFSRESLB에 MDA 정보를 등록하는 예제이다.

<OIVPIDBD>

  DFSMDA    TYPE=DATABASE,DBNAME=OIVPIDBD
  DFSMDA    TYPE=DATASET,DSNAME=IMS.TEST.OIVPI,DDNAME=OIVPI
  END

imsdaloc으로 MDA 정보를 등록한다.

$ imsdaloc -l IMS.RESLIB -v DEFVOL OIVPIDBD
imsdaloc version 7.2.0(0) oframe@tmax:ofsrc/ims(#3) 2020-08-08 16:21:16
Dynamic Allocation Block Generation Program

IMSDALOC FCOUNT=1,RESLIB=IMS.RESLIB,VOLSER=DEFVOL
------------------------------------------------------------
*** processing filepath="OIVPIDBD"
------------------------------------------------------------
mdaparser: *** dfsmda_statement matched!
mdaparser: *** dfsmda_statement matched!
mdaparser: *** end_statement matched!
mdaparser: *** mda_generation finished!!!
------------------------------------------------------------
*** ims_parse_mda("OIVPIDBD") success.
------------------------------------------------------------
  MDA TYPE=DATABASE,DBNAME=OIVPIDBD
    DATASET TYPE=DATASET,DDNAME=OIVPI,DSNAME=IMS.TEST.OIVPI,DISP=
------------------------------------------------------------
*** ims_print_mda("OIVPIDBD") success.
------------------------------------------------------------
PROGRAM COMPLETED SUCCESSFULLY.

3.3. FORMAT / FORMATA / FORMATB

FORMAT은 OSI에서 매핑 기능을 지원하기 위한 정보를 저장하는 라이브러리이다.

Mapping 기능은 포맷을 사용하여 포맷 안에 정의되어 있는 필드들과 애플리케이션 데이터들 간의 관계를 맺어주는 것을 의미한다. 데이터셋은 MODBLKS, IMSACB와 같이 3개를 준비한다.

데이터셋 생성

FORMAT을 사용하기 위해서는 시스템 준비 과정에서 데이터셋을 생성하는 절차가 필요하다.

FORMAT은 PDS 형태로 구성되며 개별 환경설정 파일은 MFSLIB의 멤버 형태로 저장된다. OSI에서 FORMAT을 생성하기 위해서는 pdsgen 툴을 사용한다.

다음은 pdsgen을 사용하여 OSI.IMSA.MFSLIB을 DEFVOL이라는 볼륨에 생성하는 예제이다.

$ pdsgen OSI.IMSA.MFSLIB DEFVOL -f LB -l 32760
pdsgen version 7.1.0(0) oframe@tmax:ofsrc/base(#1) 2020-06-29 17:30:26
PDS Dataset Generation Program

pdsgen: *** PDS OSI.IMSA.MFSLIB is created.
Map 정보 등록

다음은 OIVP001.TXT 파일을 이용해서 OSI.IMSA.MFSLIB에 맵 정보를 등록하는 예제이다.

<OIVP001.TXT>

         PRINT ON,NOGEN
*******************************************************************
         TITLE 'FORMAT SET FOR OPENFRAME ONLINE IVP'
*******************************************************************
OIVP001  FMT
         DEV   TYPE=(3270,2),                                          X
               FEAT=IGNORE,                                            X
               DSCA=X'00A0',                                           X
               PFK=(PFKFIELD,                                          X
               12='/FOR OIVP006O')
         DIV   TYPE=INOUT
         DPAGE CURSOR=((7,40)),                                        X
               FILL=PT
CURDATE  DFLD  POS=(1,2),                                              X
               LTH=8,                                                  X
               ATTR=(PROT,ALPHA,NORM,NOMOD)
         DFLD  '** WELCOME TO OPENFRAME ONLINE **',                    X
               POS=(2,24),                                             X
               ATTR=(PROT,ALPHA,HI,NOMOD),                             X
               EATTR=YELLOW
         DFLD  '-------------------------------------------------------X
               -----------------------',                               X
               POS=(3,2),                                              X
               ATTR=(PROT,ALPHA,NORM,NOMOD),                           X
               EATTR=YELLOW
         DFLD  '** OSI INSTALLATION VERIFICATION PROCEDURE **',        X
               POS=(4,17),                                             X
               ATTR=(PROT,ALPHA,HI,NOMOD),                             X
               EATTR=GREEN
         DFLD  'CODE ',                                                X
               POS=(7,34),                                             X
               ATTR=(PROT,ALPHA,NORM,NOMOD)
CODE     DFLD  POS=(7,40),                                             X
               LTH=4,                                                  X
               ATTR=(NOPROT,ALPHA,NORM,MOD),                           X
               EATTR=HREV
         DFLD  ' ',                                                    X
               POS=(7,45),                                             X
               ATTR=(PROT,ALPHA,HI,NOMOD)
         DFLD  'INQR  INQUIRY ACCOUNT INFORMATION',                    X
               POS=(10,23),                                            X
               ATTR=(PROT,ALPHA,HI,NOMOD)
         DFLD  'INSR  INSERT NEW ACCOUNT',                             X
               POS=(11,23),                                            X
               ATTR=(PROT,ALPHA,HI,NOMOD)
         DFLD  'UPDT  UPDATE ACCOUNT INFORMATION',                     X
               POS=(12,23),                                            X
               ATTR=(PROT,ALPHA,HI,NOMOD)
         DFLD  'DELT  DELETE ACCOUNT',                                 X
               POS=(13,23),                                            X
               ATTR=(PROT,ALPHA,HI,NOMOD)
         DFLD  '-------------------------------------------------------X
               -----------------------',                               X
               POS=(18,2),                                             X
               ATTR=(PROT,ALPHA,NORM,NOMOD),                           X
               EATTR=YELLOW
ERRMSG   DFLD  POS=(19,2),                                             X
               LTH=79,                                                 X
               ATTR=(PROT,ALPHA,NORM,NOMOD),                           X
               EATTR=TURQ
         DFLD  'ENTER APPROPIATE CODE.',                               X
               POS=(20,2),                                             X
               ATTR=(PROT,ALPHA,NORM,NOMOD),                           X
               EATTR=PINK
         DFLD  '-------------------------------------------------------X
               -----------------------',                               X
               POS=(21,2),                                             X
               ATTR=(PROT,ALPHA,NORM,NOMOD),                           X
               EATTR=YELLOW
         DFLD  '[SYS INFO] - OSI IVP STARTING NOW',                    X
               POS=(22,2),                                             X
               ATTR=(PROT,ALPHA,HI,NOMOD),                             X
               EATTR=RED
CURTIME  DFLD  POS=(22,71),                                            X
               LTH=8,                                                  X
               ATTR=(PROT,ALPHA,NORM,NOMOD),                           X
               EATTR=RED
         DFLD  '-------------------------------------------------------X
               -----------------------',                               X
               POS=(23,2),                                             X
               ATTR=(PROT,ALPHA,NORM,NOMOD),                           X
               EATTR=YELLOW
         DFLD  'CopyRight(c) 2007, TmaxSoft, All Rights Reserved.',    X
               POS=(24,31),                                            X
               ATTR=(PROT,ALPHA,NORM,NOMOD),                           X
               EATTR=BLUE
         FMTEND
*********************************************************************
         EJECT
*********************************************************************
OIVP001I MSG   TYPE=INPUT,                                             X
               SOR=(OIVP001,IGNORE),                                   X
               NXT=OIVP001O
         SEG
         MFLD  'OIVPMPP1',                                             X
               LTH=8
         MFLD  CODE,                                                   X
               LTH=4
         MSGEND
*********************************************************************
OIVP001O MSG   TYPE=OUTPUT,                                            X
               SOR=(OIVP001,IGNORE),                                   X
               NXT=OIVP001I
         SEG
         MFLD  (CURDATE,DATE2)
         MFLD  CODE,                                                   X
               LTH=4
         MFLD  ERRMSG,                                                 X
               LTH=79
         MFLD  (CURTIME,TIME)
         MSGEND
*********************************************************************
         END

osimfsgen으로 맵 정보를 등록한다.

$ osimfsgen -m OSI.IMSA.MFSLIB OIVP001.TXT
osimfsgen 7.2.0(0) oframe@tmax:ofsrc/osi(#1) 2020-11-12 19:43:54
[/home/oframe/products/ofsrc/OpenFrame/volume_default/OSI.IMSA.MFSLIB/OIVP001.mfs] create ok.
[/home/oframe/products/ofsrc/OpenFrame/volume_default/OSI.IMSA.MFSLIB/OIVP001I.mfs] create ok.
[/home/oframe/products/ofsrc/OpenFrame/volume_default/OSI.IMSA.MFSLIB/OIVP001O.mfs] create ok.

3.4. IMSACB / IMSACBA / IMSACBB

OSI에서 PSB와 DBD 정보는 개별로 관리 및 운영되지 않고 PSB와 DBD를 하나의 라이브러리로 통합하여 관리된다. PSB와 DBD가 통합된 라이브러리를 ACB라고 한다. MODBLKS와 마찬가지로 3개의 데이터셋을 준비한다.

데이터셋 생성

ACBLIB을 사용하기 위해서는 시스템 준비 과정에서 데이터셋을 생성하는 절차가 필요하다. ACBLIB은 PDS 형태로 구성되며 개별 환경설정 파일은 ACBLIB의 멤버 형태로 저장된다. OSI에서 PSBLIB을 생성하기 위해서는 pdsgen 툴을 사용한다.

다음은 pdsgen을 사용하여 IMS.ACBLIB을 DEFVOL이라는 볼륨에 생성하는 예제이다.

$ pdsgen IMS.ACBLIB DEFVOL -f LB -l 32760
pdsgen version 7.1.0(0) oframe@tmax:ofsrc/base(#1) 2020-06-29 17:30:26
PDS Dataset Generation Program

pdsgen: *** PDS IMS.ACBLIB is created.
ACB 정보 등록

OSI에서 ACB를 사용하기 위해서는 acbgen이라는 툴을 사용하여 ACB 정보를 등록해야 한다.

다음은 PSBLIB의 OIVPI002라는 이름의 PSB에 대하여 ACBLIB에 ACB 정보를 등록하는 예제이다.

$ acbgen build -p IMS.PSBLIB -d IMS.DBDLIB -l IMS.ACBLIB PSB=OIVPI002
acbgen version 7.2.0(0) oframe@tmax:ofsrc/ims(#3) 2020-08-08 16:21:16
Application Control Block Generation Program

ACBGEN COMMAND=BUILD,OPERAND=(PSB=OIVPI002),ACBLIB=IMS.ACBLIB
------------------------------------------------------------
*** ACBGEN BUILD PSB=OIVPI002
------------------------------------------------------------
*** BUILDING PSB BLOCK....... PSBNAME=OIVPI002
*** BUILDING DBD BLOCK....... DBDNAME=OIVPIDBD
*** BUILDING DBD BLOCK....... DBDNAME=OIVPIX1
------------------------------------------------------------
PROGRAM COMPLETED SUCCESSFULLY.

현재 버전에서는 acbgen을 수행하게 되면 DBD 메타 정보 및 PSB 메타 정보를 이용해서 ACB 메타 정보를 생성한 후 각각의 메타 테이블에 저장된다. 실제로 ACBLIB에는 아무것도 저장되지 않는다.

3.5. MODBLKS / MODBLKSA / MODBLKSB

IMS/DC에서 매크로를 이용해서 등록하고 관리하는 시스템 정의(System Definition)를 OSI에서는 OSD(Online System Definition)라는 구조로 대신한다.

OSD는 OSI를 운영하기 위해 필요한 각종 시스템 설정 정보 중 동적으로 운영이 가능한 정보들을 저장하는 영역이다. OSD는 실제 데이터가 저장되는 데이터셋과 OSD 관리를 위한 기타 모듈로 구성된다. OSD는 시스템이 구동될 때 RTSD(RunTime System Definition)라는 별도의 영역이 활성화되어 시스템 정보의 동적 관리 및 OSD의 변경 작업을 용이하게 한다.

데이터셋은 Staging Library와 접미사A,B가 붙은 3개를 준비한다. 데이터 등록은 A,B에 직접 하는 것도 가능하지만, 동적 변경을 하는 경우는 Staing Library에 넣은 정보를 동적 변경 툴과 명령어로 적용하도록 한다.

현재 버전의 OSD에서 데이터는 데이터셋이 아닌 메타 테이블에 저장되어 관리된다. Staging Library를 포함한 3개의 데이터셋은 Control Region을 기동하는 시점에만 필요하고, 실제로 해당 데이터셋에는 아무것도 저장되지 않는다.

테이블 생성

OSD를 사용하기 위해서는 시스템 준비 과정에서 메타 테이블을 생성하는 절차가 필요하다. 메타 테이블은 osiinit이라는 툴을 사용한다.

다음은 osiinit 툴을 이용해서 OSD 중 APPLCTN 매크로와 관련된 정보를 저장할 메타 테이블을 DEFVOL이라는 테이블 스페이스에 생성하는 예제이다.

$ osiinit create -t OFM_OSI_SD_APPLCTN -st DEFVOL
osiinit version 7.2.0(0) oframe@tmax:ofsrc/osi(#1) 2020-11-12 19:43:54
Initialize OpenFrame OSI System Tables

Creating OFM_OSI_SD_APPLCTN...
 > "OFM_OSI_SD_APPLCTN" created...

메타 테이블에 대한 자세한 내용은 리소스 테이블을 참고한다.

데이터셋 생성

IMS/DC에서 Control Region을 기동하는 JCL을 OSI에서 그대로 사용하기 위해서는 시스템 준비 과정에서 데이터셋을 생성하는 절차가 필요하다. 데이터셋은 idcams라는 툴을 사용하여 생성할 수 있다.

다음은 idcams 툴을 이용하여 OSD 데이터셋을 DEFVOL이라는 볼륨에 생성하는 예제이다.

$ idcams define -t CL -n OSI.IMSA.DEFLIB -o KS -k 10,0 -l 100,32760 -s 1024,128,128 -v DEFVOL
idcams version 7.1.0(0) oframe@tmax:ofsrc/base(#1) 2020-06-29 17:30:26
Access Method Services for Catalogs

IDCAMS COMMAND=DEFINE,TYPE=CL,NAME=OSI.IMSA.DEFLIB,RELATE=,CATALOG=

tbESQL Precompiler 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.


/home/oframe/products/ofsrc/OpenFrame/tsam/temp/OSI_IMSA_DEFLIB.tbc is precompiled successfully!

COMPLETED SUCCESSFULLY.
리소스 정보 등록

생성한 OSD 테이블에 시스템을 운영할 때 사용하는 리소스 정보를 설정하는 방법은 IMS/DC에서 매크로를 이용해서 리소스를 정의하는 방식과 유사하다.

OSI에서는 osisdgen이라는 툴이 해당 기능을 제공한다. osisdgen은 Batch JOB 환경이 아닌 UNIX 환경에서 동작하는 툴 프로그램이다. osisdgen은 설정할 리소스 정보가 저장된 입력 파일과 리소스 정보를 저장할 Region의 IMSID를 가지고 작업을 수행하며 리소스 정보는 기존 IMS/DC에서 사용하던 매크로 문법을 그대로 지원한다.

다음은 일부 리소스 정의 스크립트가 저장되어 있는 osi_sdlib.dat 파일을 이용해서 IMSA라는 Region에 리소스 정보를 등록하는 예제이다.

<osi_sdlib.dat>

TYPE
TERMINAL NAME=OIVPTRM1,                                                X
         FEAT=(PFK,CARD,PEN)
NAME     N031E01

APPLCTN PSB=OIVPI001,PGMTYPE=(,,),SCHDTYP=PARALLEL
TRANSACT CODE=OIVPMPP1,MSGTYPE=(SNGLSEG,RESPONSE,1),PRTY=(1,5),        X
        MODE=SNGL

APPLCTN PSB=OIVPI002,PGMTYPE=(TP,,1),SCHDTYP=PARALLEL
TRANSACT CODE=OIVPMPP2,MSGTYPE=(SNGLSEG,RESPONSE,1),PRTY=(1,5),        X
        MODE=SNGL,MAXRGN=1

APPLCTN PSB=OIVPI003,PGMTYPE=(TP,,1),SCHDTYP=PARALLEL
TRANSACT CODE=OIVPMPP3,MSGTYPE=(SNGLSEG,RESPONSE,1),PRTY=(1,5),        X
        MODE=SNGL

APPLCTN PSB=OIVPI004,PGMTYPE=(TP,,1),SCHDTYP=PARALLEL
TRANSACT CODE=OIVPMPP4,MSGTYPE=(SNGLSEG,RESPONSE,1),PRTY=(1,5),        X
        SPA=(60,STRUNC),MODE=SNGL

APPLCTN PSB=OIVPI005,PGMTYPE=(TP,,1),SCHDTYP=PARALLEL
TRANSACT CODE=OIVPMPP5,MSGTYPE=(SNGLSEG,RESPONSE,1),PRTY=(1,5),        X
        SPA=(60,STRUNC),MODE=SNGL

APPLCTN PSB=OIVPIL02,PGMTYPE=(BATCH,,1),SCHDTYP=PARALLEL
TRANSACT CODE=OIVPBMP2,MSGTYPE=(SNGLSEG,RESPONSE,1),PRTY=(1,5),        X
        MODE=SNGL

APPLCTN PSB=OIVPIL03,PGMTYPE=BATCH,SCHDTYP=PARALLEL
TRANSACT CODE=OIVPBMP3,MSGTYPE=(SNGLSEG,RESPONSE,1),PRTY=(1,5),        X
        MODE=SNGL

APPLCTN PSB=OIVPIL04,PGMTYPE=BATCH,SCHDTYP=PARALLEL
TRANSACT CODE=OIVPBMP4,MSGTYPE=(SNGLSEG,RESPONSE,1),PRTY=(1,5),        X
        MODE=SNGL

APPLCTN PSB=OIVPIL05,PGMTYPE=BATCH,SCHDTYP=PARALLEL
TRANSACT CODE=OIVPBMP5,MSGTYPE=(SNGLSEG,RESPONSE,1),PRTY=(1,5),        X
        MODE=SNGL

osisdgen로 리소스 정보를 등록한다.

$ osisdgen osi_sd.dat IMSA
[2020-12-21T16:59:20.510891] [osisdgen(21666)         ] [M] [OSI7203M] Processing result : Success[20], Ignore[0], Error[0]

데이터셋에 등록된 리소스를 기동 중인 OSI 시스템에 반영하기 위해서는 다음 명령어들을 수행한다.

$ dfsuocu0 IMSA MODBLKS
- ACTIVE MODBLKS is MODBLKSA
- Succeeded to copy MODBLKS to MODBLKSB

$ imscmd IMSA /MOD PREPARE MODBLKS
IMS control region : [IMSA]
Requested command  : [MOD PREPARE MODBLKS]
----------------------------------------
ACTIVE DD: MODBLKSA IMSACBA FORMATA
MODIFY PREPARE COMMAND COMPLETED
*20356/170207*
----------------------------------------
Command '/MOD PREPARE MODBLKS' execution done

$ imscmd IMSA /MOD COMMIT
IMS control region : [IMSA]
Requested command  : [MOD COMMIT]
----------------------------------------
ACTIVE DD: MODBLKSB IMSACBA FORMATA
MODIFY COMMIT COMMAND COMPLETED
*20356/170211*
----------------------------------------
Command '/MOD COMMIT' execution done

3.6. MODSTAT

OSI에서 사용하는 데이터셋 가운데 MODBLKS, IMSACB, FORMAT의 Active Library의 정보를 보관하는 라이브러리이다.

MODSTAT을 처음 생성해서 레코드가 없는 경우, OSI는 부팅할 때 위의 3가지 라이브러리의 Staging Library의 내용을 접미사 A,B가 붙은 데이터셋 모두에 복사해준 뒤, A가 붙은 데이터셋들을 Active Library로 지정한다. OSI는 시스템을 부팅할 때마다 Active Library의 리소스를 읽어와서 사용한다.

현재 버전에서 MODSTAT의 Active Library 정보는 데이터셋이 아닌 메타 테이블에 레코드 형태로 저장되어 관리된다. 데이터셋은 Control Region을 기동하는 시점에만 필요하고, 실제로 해당 데이터셋에는 아무것도 저장되지 않는다.

테이블 생성

MODSTAT 리소스를 저장 및 관리하기 위해서는 시스템 준비 과정에서 메타 테이블을 생성하는 절차가 필요하다. 메타 테이블은 osiinit이라는 툴을 사용한다.

다음은 osiinit 툴을 이용해서 MODSTAT 테이블을 DEFVOL이라는 테이블 스페이스에 생성하는 예제이다.

$ osiinit create -t OFM_OSI_MODSTAT -st DEFVOL
osiinit version 7.2.0(0) oframe@tmax:ofsrc/osi(#1) 2020-11-12 19:43:54
Initialize OpenFrame OSI System Tables

Creating OFM_OSI_MODSTAT...
 > "OFM_OSI_MODSTAT" created...

메타 테이블에 대한 자세한 내용은 리소스 테이블을 참고한다.

데이터셋 생성

IMS/DC에서 Control Region을 기동하는 JCL을 OSI에서 그대로 사용하기 위해서는 시스템 준비 과정에서 데이터셋을 생성하는 절차가 필요하다. 데이터셋은 idcams라는 툴을 사용하여 생성할 수 있다.

다음은 idcams 툴을 이용하여 MODSTAT 데이터셋을 DEFVOL이라는 볼륨에 생성하는 예제이다.

$ idcams define -t CL -n OSI.IMSA.MODSTAT -o KS -k 8,0 -l 160,160 -s 1024,128,128 -v DEFVOL
idcams version 7.1.0(0) oframe@tmax:ofsrc/base(#1) 2020-06-29 17:30:26
Access Method Services for Catalogs

IDCAMS COMMAND=DEFINE,TYPE=CL,NAME=OSI.IMSA.MODSTAT,RELATE=,CATALOG=

tbESQL Precompiler 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.


/home/oframe/products/ofsrc/OpenFrame/tsam/temp/OSI_IMSA_MODSTAT.tbc is precompiled successfully!

COMPLETED SUCCESSFULLY.

3.7. PSBLIB

PSB는 애플리케이션에서 사용되는 데이터베이스나 메시지를 사용하기 위한 컨트롤 블록인 PCB의 집합체로, 통상 하나의 사용자 프로그램당 하나의 PSB가 구성된다.

PCB(Program Communication Block)는 애플리케이션에서 OpenFrame HiDB에 대한 VIEW나 메시지 소스 또는 메시지 대상과 통신하기 위해 시스템에서 제공하는 컨트롤 블록이다. IO PCB/ALT PCB는 PCB 중에서도 OSI에서 제공하는 메시지 큐에 데이터를 읽고 쓰기 위해서 사용되는 리소스로서 IO PCB/ALT PCB는 OSI를 기동시킨 경우에만 사용이 가능하다. IO PCB는 OSI에서 구동되는 프로그램이라면 PSB의 기술과 상관없이 프로그램의 첫 번째 파라미터로 제공되는 IOPCB-MASK를 이용해서만 사용이 가능한 반면, ALT PCB는 PSB에 필요한만큼 기술하여 사용이 가능하다.

데이터셋 생성

PSBLIB을 사용하기 위해서는 시스템 준비 과정에서 데이터셋을 생성하는 절차가 필요하다.

PSBLIB은 PDS 형태로 구성되며 개별 환경설정 파일은 PSBLIB의 멤버 형태로 저장된다. OSI에서 PSBLIB을 생성하기 위해서는 pdsgen이라는 툴을 사용한다.

다음은 pdsgen을 사용하여 IMS.PSBLIB을 DEFVOL이라는 볼륨에 생성하는 예제이다.

$ pdsgen IMS.PSBLIB DEFVOL -f LB -l 32760
pdsgen version 7.1.0(0) oframe@tmax:ofsrc/base(#1) 2020-06-29 17:30:26
PDS Dataset Generation Program

pdsgen: *** PDS IMS.PSBLIB is created.
PSB 정보 등록

OSI에서 PSB를 사용하기 위해서는 psbgen이라는 툴을 사용하여 PSB 정보를 등록해야 한다.

다음은 PSB를 정의하는 스크립트가 저장되어 있는 OIVPI002 파일을 이용해서 PSB 정보를 등록하는 예제이다.

<OIVPI002>

 PCB   TYPE=TP,MODIFY=YES
 PCB   TYPE=DB,DBDNAME=OIVPIDBD,KEYLEN=10,PROCOPT=A
 SENSEG  NAME=DBSEG
 PSBGEN  LANG=COBOL,PSBNAME=OIVPI002
 END

psbgen으로 PSB 정보를 등록한다.

$ psbgen OIVPI002
psbgen version 7.2.0(0) oframe@tmax:ofsrc/ims(#3) 2020-08-08 16:21:16
Program Specification Block Generation Program

psbgen: force flag on; the tool overwrites existing data
psbgen: 1 files are requested in total
------------------------------------------------------------
psbgen Processing PSB script "OIVPI002"
------------------------------------------------------------

psbgen: Processing PSB "OIVPI002"
psbgen: removing existing PSB OIVPI002 metadata
psbgen: successfully processed PSB "OIVPI002"

psbgen: successfully processed for the requested PSBs (total 1)

현재 버전에서는 psbgen을 수행하게 되면 PSB 스크립트에 기술되어 있는 메타 정보는 메타 테이블에 저장된다. 실제로 PSBLIB에는 아무것도 저장되지 않는다.

3.8. RESLIB

데이터셋의 동적 사용에 필요한 MDA 정보를 저장하는 라이브러리이다. 상세한 내용은 DFSRESLB와 동일하다.

3.9. STEPLIB

OSI 서버에서 작동하는 애플리케이션 프로그램은 COBOL 프로그래밍 언어로 개발된다.

애플리케이션 개발자는 작성한 프로그램을 컴파일한 후 생성된 바이너리를 STEPLIB에 배치해야 한다. 컴파일 전에 전처리가 필요한 경우 전처리를 수행하도록 한다. 배치된 프로그램은 OSD 테이블에 프로그램 리소스 정의를 등록한 후 OSI 시스템을 기동하면 동작시킬 수 있다.

데이터셋 생성

FORMAT 생성과 마찬가지로 pdsgen을 사용하여 생성한다.

다음은 pdsgen을 사용하여 OSI.IMSA.STEPLIB를 DEFVOL이라는 볼륨에 생성하는 예제이다.

$ pdsgen OSI.IMSA.STEPLIB DEFVOL -f LB -l 32760
pdsgen version 7.1.0(0) oframe@tmax:ofsrc/base(#1) 2020-06-29 17:30:26
PDS Dataset Generation Program

pdsgen: *** PDS OSI.IMSA.STEPLIB is created.

4. 스토리지 설정

OSI는 시스템 운영을 위해서 스토리지 역할을 위한 시스템 테이블의 준비가 필요하다.

4.1. MQ

OSI는 터미널과 애플리케이션 사이에 메시지 전달을 위해서 기본적으로 TP-Monitor인 Tmax의 기능을 이용하고, 동시에 모든 메시지는 MQ(Message Queue) 테이블에 저장한다. OSI 시스템을 운영하기 위해서는 Master, MPP(Terminal), BMP 테이블 그리고 MQ 데이터셋을 준비한다.

현재 버전에서는 운용 중에 전달되는 모든 메시지를 MQ 테이블에 저장한다. MQ 데이터셋은 Control Region이 기동하는 시점에만 필요하며, 실제로 해당 데이터셋에는 아무것도 저장되지 않는다.

테이블 생성

MQ 시스템 테이블을 생성하기 위해서는 osiinit 툴을 사용한다.

다음은 osiinit 툴을 이용하여 3개의 MQ 테이블을 생성하는 예제이다.

$ osiinit create -t OFM_OSI_MQ -st DEFVOL
osiinit version 7.2.0(0) oframe@tmax:ofsrc/osi(#1) 2020-11-12 19:43:54
Initialize OpenFrame OSI System Tables

Creating OFM_OSI_MQ...
 > "OFM_OSI_MQ" created...

MQ 시스템 테이블에 대한 자세한 내용은 리소스 테이블을 참고한다.

데이터셋 생성

IMS/DC에서 Control Region을 기동하는 JCL을 OSI에서 그대로 사용하기 위해서는 시스템 준비 과정에서 데이터셋을 생성하는 절차가 필요하다. 데이터셋은 idcams라는 툴을 사용하여 생성할 수 있다.

다음은 idcams 툴을 이용하여 MQ 데이터셋을 DEFVOL이라는 볼륨에 생성하는 예제이다.

$ idcams define -t CL -n OSI.IMSA.MQLIB -o KS -k 32,0 -l 10000,32000 -s 1024,128,128 -v DEFVOL
idcams version 7.1.0(0) oframe@tmax:ofsrc/base(#1) 2020-06-29 17:30:26
Access Method Services for Catalogs

IDCAMS COMMAND=DEFINE,TYPE=CL,NAME=OSI.IMSA.MQLIB,RELATE=,CATALOG=

tbESQL Precompiler 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.


/home/oframe/products/ofsrc/OpenFrame/tsam/temp/OSI_IMSA_MQLIB.tbc is precompiled successfully!

COMPLETED SUCCESSFULLY.

데이터셋 사용법의 자세한 설명은 OpenFrame Base "데이터셋 안내서"를 참고한다.

4.2. REGION

OSI 시스템을 운영하는데 사용되는 사용자 서버(Dependent Region)의 Region ID, JOB 이름, PSB 이름, PROGRAM 이름 등과 같은 정보들을 저장한다.

테이블 생성

REGION 테이블을 생성하기 위해서는 osiinit 툴을 사용한다.

다음은 osiinit 툴을 이용하여 REGION 테이블을 생성하는 예제이다.

$ osiinit create -t OFM_OSI_REGION -st DEFVOL
osiinit version 7.2.0(0) oframe@tmax:ofsrc/osi(#1) 2020-11-12 19:43:54
Initialize OpenFrame OSI System Tables

Creating OFM_OSI_REGION...
 > "OFM_OSI_REGION" created...

REGION 테이블에 대한 자세한 내용은 리소스 테이블을 참고한다.

4.3. RTSD

OSI에서 각 Control Region이 기동되는 시점에 시스템 정의(System Definition) 리소스를 RTSD(RunTime System Definition)라는 별도의 영역으로 복사하여 관리한다. 시스템 운용 중에는 동일한 IMS 시스템 내에 있는 모든 Region 서버들이 동시에 같은 RTSD 리소스를 공유하게 된다.

테이블 생성

RTSD 테이블을 생성하기 위해서는 osiinit 툴을 사용한다.

다음은 osiinit 툴을 이용하여 APPLCTN, TRANSACT 테이블을 DEFVOL이라는 테이블 스페이스에 생성하는 예제이다.

$ osiinit create -t OFM_OSI_RTSD_APPLCTN -st DEFVOL
osiinit version 7.2.0(0) oframe@tmax:ofsrc/osi(#1) 2020-11-12 19:43:54
Initialize OpenFrame OSI System Tables

Creating OFM_OSI_RTSD_APPLCTN...
 > "OFM_OSI_RTSD_APPLCTN" created...

$ osiinit create -t OFM_OSI_RTSD_TRANSACT -st DEFVOL
osiinit version 7.2.0(0) oframe@tmax:ofsrc/osi(#1) 2020-11-12 19:43:54
Initialize OpenFrame OSI System Tables

Creating OFM_OSI_RTSD_TRANSACT...
 > "OFM_OSI_RTSD_TRANSACT" created...

RTSD 테이블에 대한 자세한 내용은 리소스 테이블을 참고한다.