OpenFrame NDBのインストールと使用
本章では、OpenFrame NDBの構成とインストール前の準備および使用方法について説明します。
1. OpenFrame NDBの構成と準備
OpenFrame NDB(Network Database、以下NDB)は、富士通メインフレームのAIM/DB製品に対応されるTmaxSoftのOpenFrame製品です。NDBを使用するには、いくつかの準備が必要です。
以下の図は、NDBの構成要素を示しています。
-
NDBニュークリアス
NDBの中核領域です。入力されたADLを分析するかNDBデータを処理し、関連メモリ・バッファーやストレージなどを管理します。
-
インターフェース
富士通 AIM/DBと同じインターフェースを提供しており、COBOL、PL/I、Cなどの既存のプログラムをそのまま使用することができます。
-
スキーマ情報
NDBでndbadlgenツールを使用してスキーマ情報に基づてNDBメタ表に保存します。ndbadlgenツールの詳細については、 OpenFrame NDBのツール を参照してください。
2. ディレクトリの構造
OpenFrame AIMのインストールが完了したら、NDB関連のツール、ユーティリティおよびライブラリ・ファイルが正常にインストールされていることを確認します。
以下は、NDBのツール、ユーティリティおよびライブラリ・ファイルがインストールされているOpenFrameのディレクトリ構造です。
${OPENFRAME_HOME}
|---- bin
|---- cobcopy
|---- subscpy
|---- config
|---- data
|---- ndb
|---- lib
|---- temp
|---- lib
|---- scripts
|---- util
- bin
-
NDBが提供するツールが格納されています。NDBツールは、NDBの作成、削除、変更など、NDBの運用に必要な機能とデータ・マイグレーション関連の機能を提供しており、システム管理者の利便性を向上させます。サブディレクトリに格納されるツールの詳細については、 OpenFrame NDBのツール を参照してください。
- cobcopy/subscpy
-
subscツールによって作成されたサブスキーマのコピーブックが格納されています。subscツールの詳細については、 OpenFrame NDBのツール を参照してください。
- config
-
環境設定ファイルが格納されています。サブディレクトリに格納される環境設定ファイルの詳細については、OpenFrame NDB『環境設定ガイド』を参照してください。
- data
-
NDBのエラーコード・ファイルが格納されています。
- ndb/lib
-
以下は、サブディレクトリについての説明です。
サブディレクトリ 説明 lib
NDBの各スキーマのレコードI/Oに必要な .soファイルが格納されます。
temp
ndbmgr schm dmlgenで作成された各スキーマのレコード単位で .tbcファイルが格納されます。ndbmgr schm dmlgenの詳細については、 OpenFrame NDBのツール を参照してください。
- lib
-
NDBで提供されるライブラリが格納されます。次は、NDBのライブラリおよび機能についての説明です。
ライブラリ 説明 libndb.so
NDBレコードの検索、保存、変更などのデータ入出力処理や索引管理などの主要機能を提供します。
libndbcom.so
NDBで共通して使用する機能を処理します。
libndbddl.so
NDBレコードを検索、保存、変更するための表と索引を作成および削除します。
libndbdml.so
NDBレコードの検索、保存、変更、データ入出力などの主要機能を提供します。
libndbmeta.so
NDBを定義するか、データベースにアクセスするアプリケーションの特徴を記述するために使用されるADLを処理してメタデータを保存します。
libndbrstd.so
NDBのレコード・リソースにRESTRICTとINHIBITを実行してリソースをブロックするか、あるいはリソース・ブロックの有無を確認します。
- scripts
-
NDBのDML I/Oのために共通して使用される機能をテンプレート形式で保存して提供します。
- util
-
NDBが提供するユーティリティが格納されます。NDBはデータベースを構築および運用するために必要なさまざまなユーティリティを提供しており、NDB、索引、拡張索引などの機能が提供されるプログラムをNDBユーティリティといいます。サブディレクトリに格納されるユーティリティの詳細については、 OpenFrame NDBのユーティリティ を参照してください。
3. NDBの使用
本節では、NDBの使用方法およびアプリケーションの例について説明します。また、スキーマおよびNDBを作成する方法やアプリケーションを使用してNDB DMLを使用する方法について説明します。
3.2. DBスキーマの作成
NDBを作成する前に、スキーマ・ファイルを作成します。スキーマ・ファイルには、使用するデータベースの物理的・論理的な構造に加え、レコード形式、拡張索引などの情報が含まれています。
|
スキーマ・ファイルは、スキーマ・コマンドを使用してNDBを定義します。スキーマ・コマンドの詳細と使用方法については、富士通の『OS IV AIM ADL REFERENCE MANUAL (V20L10)』を参照してください。 |
以下は、作成するNDBの構成図を示しています。
以下の例は、上記のNDBを作成するためのDBスキーマ・ファイルの内容です。
***********************
* SCHEMA ENTRY *
***********************
SCHEMA NAME IS SCHOOL FOR DB
; SCHEMA GROUP NAME IS SG01
; AUTHOR IS RONA
; DATE-WRITTEN 2019.12.05
; REMARKS CREATE SCHOOL TABLE.
***********************
* RECORD ENTRY *
***********************
RECORD NAME IS CLASS1
; LOCATION MODE IS INDEX USING CLA-NAME.
01 CLA-AREA ; PIC X(2).
01 CLA-NAME ; PIC X(30).
01 CLA-TEL ; PIC 9(10).
RECORD NAME IS SUBJECT.
01 SUB-NAME ; PIC X(20).
01 SUB-TEL ; PIC 9(10).
RECORD NAME IS TEACHER
; LOCATION MODE IS INDEX USING TEA-NAME.
01 TEA-NAME ; PIC X(20).
01 TEA-ED ; PIC X(2).
01 TEA-BD ; PIC 9(8).
01 TEA-NO ; PIC 9(8).
RECORD NAME IS STUDENT.
01 STU-NAME ; PIC X(20).
01 STU-BD ; PIC X(2).
***********************
* SET ENTRY *
***********************
SET NAME IS CLASUB
; OWNER IS CLASS1
; MEMBER IS SUBJECT LINKED TO PRIOR.
SET NAME IS SUBTEA
; OWNER IS SUBJECT
; INSERTION IS LAST
; MEMBER IS TEACHER LINKED TO PRIOR.
SET NAME IS TEASTU
; OWNER IS TEACHER
; MEMBER IS STUDENT LINKED TO PRIOR.
***********************
* RANGE ENTRY *
***********************
***********************
* RANGE TEARNG *
***********************
RANGE NAME IS TEARNG
; RECORD NAME IS TEACHER
; LOCATION KEY IS TEA-ED
; STRETCHED BY 4 TIMES
; DIVIDED RECORD SIZE IS 512
; RATE IS 100
; LOGICAL PAGE IS 1
; ALARM POINT IS 70 FOR PRIME.
SUBRANGE NAME IS TEASRG0000
; PRIME IS 2700
; LOCATION VALUE IS '00' THRU '09'.
SUBRANGE NAME IS TEASRG0001
; PRIME IS 2700
; LOCATION VALUE IS '10' THRU '19'.
***********************
* RANGE CLARNG *
***********************
RANGE NAME IS CLARNG
; RECORD NAME IS CLASS1, SUBJECT
; LOCATION KEY IS CLA-AREA
; STRETCHED BY 4 TIMES
; DIVIDED RECORD SIZE IS 512
; RATE IS 100
; LOGICAL PAGE IS 1
; ALARM POINT IS 70 FOR PRIME.
SUBRANGE NAME IS CLASRG0000
; PRIME IS 2700
; LOCATION VALUE IS '00' THRU '09'.
SUBRANGE NAME IS CLASRG0001
; PRIME IS 2700
; LOCATION VALUE IS '10' THRU '19'.
***********************
* RANGE STURNG *
***********************
RANGE NAME IS STURNG
; RECORD NAME IS STUDENT
; LOCATION KEY IS STU-BD
; STRETCHED BY 4 TIMES
; LOGICAL PAGE IS 1
; ALARM POINT IS 70 FOR PRIME.
SUBRANGE NAME IS STUSRG0000
; PRIME IS 2700
; LOCATION VALUE IS '00' THRU '09'.
SUBRANGE NAME IS STUSRG0001
; PRIME IS 2700
; LOCATION VALUE IS '10' THRU '19'.
***********************
* DATASET ENTRY *
***********************
DATASET NAME IS TSDAT.SHCOOL.H01
; PAGE CONTAINS 32632 .
VOLUME IS DEFVOL
; UNIT NAME IS F6425
; EXTENT-ID IS 1
; LOCATE IS TEARNG(TEASRG0000).
DATASET NAME IS TSDAT.SCHOOL.H02
; PAGE CONTAINS 32632 .
VOLUME IS DEFVOL
; UNIT NAME IS F6425
; EXTENT-ID IS 2
; LOCATE IS TEARNG(TEASRG0001).
DATASET NAME IS TSDAT.SCHOOL.H03
; PAGE CONTAINS 32632 .
VOLUME IS DEFVOL
; UNIT NAME IS F6425
; EXTENT-ID IS 3
; LOCATE IS CLARNG(CLASRG0000).
DATASET NAME IS TSDAT.SCHOOL.H04
; PAGE CONTAINS 32632 .
VOLUME IS DEFVOL
; UNIT NAME IS F6425
; EXTENT-ID IS 4
; LOCATE IS CLARNG(CLASRG0000).
DATASET NAME IS TSDAT.SCHOOL.H05
; PAGE CONTAINS 32632 .
VOLUME IS DEFVOL
; UNIT NAME IS F6425
; EXTENT-ID IS 5
; LOCATE IS STURNG(STUSRG0000).
DATASET NAME IS TSDAT.SCHOOL.H06
; PAGE CONTAINS 32632 .
VOLUME IS DEFVOL
; UNIT NAME IS F6425
; EXTENT-ID IS 6
; LOCATE IS STURNG(STUSRG0001).
*******************************
* EXTENDED INDEX ENTRY *
*******************************
EXTENDED INDEX NAME IS TEAXENT
USING TEA-NO OF TEACHER.
END.
上記のように作成されたスキーマ・ファイルをスキーマ・ディレクトリに登録する必要があります。
次のようにUNIXプロンプトでndbadlgenツールを実行すると、スキーマ・ファイルのメタデータがメタ表に登録されます。
$ ndbadlgen store -p <schema-file-name>
3.3. XIFスキーマの作成
拡張索引を使用するには、以下の例のようなXIFスキーマ・ファイルを作成する必要があります。XIFスキーマの作成方法は、DBスキーマの作成を参照してください。
************************
* XIFSCHEMA ENTRY *
************************
XIFSCHEMA NAME IS SCHXIF
; SCHEMA NAME IS SCHOOL.
************************
* RECORD ENTRY *
************************
RECORD NAME IS TEAXENT.
************************
* RANGE ENTRY *
************************
RANGE NAME IS TEAXRG
; RECORD NAME IS TEAXENT
; LOGICAL PAGE IS 1
; RATE IS 100
; RESIDENT BLOCK IS 3 USING STATIC
; ALARM POINT IS 70
; DEGENERATE IS 10.
*
* ; PRIME IS 1698.
*
************************
* DATASET ENTRY *
************************
DATASET NAME IS TSDAT.TSTXIF01.H1
; PAGE CONTAINS 2932 .
VOLUME IS DEFVOL
; UNIT IS F6425
; EXTENT-ID IS 1
; LOCATE TEAXRG.
END.
以下は、UNIXプロンプトでndbadlgenツールを実行してXIFスキーマを登録する例です。
$ ndbadlgen store -p <xif-schema-file-name>
4. アプリケーションの例
本節では、作成したスキーマ・ファイルをベースにして、NDBを使用するCOBOLアプリケーションの例について説明します。
4.1. サブスキーマの作成
アプリケーションを使用する前に、ターゲットNDBのレコードとセット情報が含まれるスキーマを作成します。
以下は、サブスキーマの例です。
************************
* SUBSCHEMA *
************************
SUBSCHEMA NAME IS SCHSUB
; SCHEMA NAME IS SCHOOL.
************************
* RECORD *
************************
01 CLASS1.
01 SUBJECT.
01 TEACHER.
01 STUDENT.
************************
* SET *
************************
SET CLASUB.
SET SUBTEA.
SET TEASTU.
END.
以下は、サブスキーマの作成方法です。
$ ndbadlgen store -p <sub-schema-file-name>
アプリケーションを実行する前に、プログラムの実行環境について記述したPEDファイルを作成して登録します。各アプリケーションのためのPEDファイルを登録するときは、jxdddmsツールを使用します。
$ jxdddms store -p <ped-file-name>
*******************
* PED ENTRY *
*******************
PED NAME IS CLARNGCR
; SWAP POINT IS NOTHING.
*******************
* AP ENTRY *
*******************
AP NAME IS CLACOB
; TRANSACTION-POINT IS SYSTEM .
*******************
* DATABASE ENTRY *
*******************
DATABASE NAME IS SCHSUB
; ACCESS MODE IS
UPDATE FOR SCHOOL
; PAGE BUFFER IS 10
; INDEX BUFFER IS 10
; EXTENDED INDEX BUFFER IS 10
; INCLUSION SCHEMA IS SCHOOL
; EXCLUSIVE UNIT IS RANGE.
*
END.
4.2. CLARNG RANGEにデータを作成
以下は、CLARNG RANGEにデータを作成するCOBOLアプリケーションの例です。
例では、NDBのCLASS1レコードとSUBJECTレコードに値を保存しています。NDBを使用するには、まず、READYコマンドとサブスキーマ名を指定してデータ操作を準備し、STOREコマンドを使用してデータを保存します。NDBを終了するときは、FINISHコマンドを使用してNDB処理を終了します。
IDENTIFICATION DIVISION.
PROGRAM-ID. 'CLACOB'.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER .
FACOM .
OBJECT-COMPUTER .
FACOM .
SUBSCHEMA-NAME.
'SCHSUB'.
DATA DIVISION.
*----------------------------------------------------------------*
WORKING-STORAGE SECTION.
*----------------------------------------------------------------*
01 WK-EOF-FLG PIC X(01) VALUE SPACE.
*----------------------------------------------------------------*
PROCEDURE DIVISION.
*----------------------------------------------------------------*
* MAIN CONTROL *
*----------------------------------------------------------------*
MAIN-CONTROL-PROC SECTION.
READY.
MOVE "01" TO CLA-AREA OF CLASS1.
MOVE "EXERCISE" TO CLA-NAME OF CLASS1.
MOVE 01012345678 TO CLA-TEL OF CLASS1.
STORE 'CLASS1'.
DISPLAY 'CLA-AREA :' CLA-AREA OF CLASS1.
DISPLAY 'CLA-NAME :' CLA-NAME OF CLASS1.
DISPLAY 'CLA-TEL :' CLA-TEL OF CLASS1.
DISPLAY 'STORE DBECB :' DBECB OF FCOM.
MOVE "YOGA" TO SUB-NAME OF SUBJECT.
MOVE 01012345678 TO SUB-TEL OF SUBJECT.
STORE 'SUBJECT'.
DISPLAY 'CLA-AREA :' CLA-AREA OF CLASS1.
DISPLAY 'CLA-NAME :' CLA-NAME OF CLASS1.
DISPLAY 'CLA-TEL :' CLA-TEL OF CLASS1.
DISPLAY 'STORE DBECB :' DBECB OF FCOM.
FINISH.
MAIN-CONTROL-EXIT.
DISPLAY '*** CLARNGCOB END ***'.
4.3. TEARNG RANGEにデータを作成
以下は、TEARNG RANGEにデータを作成するアプリケーションで使用されるPEDファイルの例です。
*******************
* PED ENTRY *
*******************
PED NAME IS TEARNGCR
; SWAP POINT IS NOTHING.
*******************
* AP ENTRY *
*******************
AP NAME IS TEACOB
; TRANSACTION-POINT IS SYSTEM .
*******************
* DATABASE ENTRY *
*******************
DATABASE NAME IS SCHSUB
; ACCESS MODE IS
UPDATE FOR SCHOOL
; PAGE BUFFER IS 10
; INDEX BUFFER IS 10
; EXTENDED INDEX BUFFER IS 10
; INCLUSION SCHEMA IS SCHOOL
; EXCLUSIVE UNIT IS RANGE.
*
END.
以下は、TEARNG RANGEにデータを作成するCOBOLアプリケーションの例です。
例では、INPUTファイルからデータを読み取り、NDBのTEACHERレコードに保存しています。
<TEACOB.jcl>
//TEARNG JOB CLASS=A,MSGCLASS=A //*--------------------------------------------------------------------* //DBTST EXEC PGM=TEACOB,TIME=(,30) //STEPLIB DD DSN=SYS1.USERLIB,DISP=SHR //AIMPED DD SUBSYS=(AIM,TEARNGCR,APG01,00),DISP=SHR //SYSOUT DD SYSOUT=* //SSYSIN DD DSN=TEARNG.INFILE,DISP=SHR //SSYSOUT DD SYSOUT=* //
<TEARNG.INFILE>
RONANAM 021993021403
<TEACOB.COBOL>
IDENTIFICATION DIVISION.
PROGRAM-ID. 'TEACOB'.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SUBSCHEMA-NAME. 'SCHSUB'.
SOURCE-COMPUTER .
FACOM .
OBJECT-COMPUTER .
FACOM .
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO SSYSIN.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-DATA.
02 IN-TEANAME PIC X(20).
02 IN-TEAED PIC X(2).
02 IN-TEABD PIC 9(8).
02 IN-TEANO PIC 9(8).
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
OPEN INPUT IN-FILE.
MAIN-CONTROL-PROC SECTION.
READY 'SCHSUB'.
READ IN-FILE.
MOVE IN-DATA TO TEACHER.
STORE 'TEACHER'
FINISH.
CLOSE IN-FILE.
4.4. STURNG RANGEにデータを作成
以下は、STURNG RANGEにデータを作成するアプリケーションで使用されるPEDファイルの例です。
*******************
* PED ENTRY *
*******************
PED NAME IS STURNGCR
; SWAP POINT IS NOTHING.
*******************
* AP ENTRY *
*******************
AP NAME IS STUCOB
; TRANSACTION-POINT IS SYSTEM .
*******************
* DATABASE ENTRY *
*******************
DATABASE NAME IS SCHSUB
; ACCESS MODE IS
UPDATE FOR SCHOOL
; PAGE BUFFER IS 10
; INDEX BUFFER IS 10
; EXTENDED INDEX BUFFER IS 10
; INCLUSION SCHEMA IS SCHOOL
; EXCLUSIVE UNIT IS RANGE.
*
END.
以下は、STURNG RANGEにデータを作成するCOBOLアプリケーションの例です。
例では、INPUTファイルからデータを読み取り、IN-IDが「T」の場合はTEACHERレコードで検索し、「T」でない場合はNDBのSTUDENTレコードに保存しています。
<STUCOB.jcl>
//STURNG JOB CLASS=A,MSGCLASS=A //*--------------------------------------------------------------------* //DBTST EXEC PGM=STUCOB,TIME=(,30) //STEPLIB DD DSN=SYS1.USERLIB,DISP=SHR //AIMPED DD SUBSYS=(AIM,STURNGCR,APG01,00),DISP=SHR //SYSOUT DD SYSOUT=* //SSYSIN DD DSN=STURNG.INFILE,DISP=SHR //SSYSOUT DD SYSOUT=* //
<STURNG.INFILE>
TRONANAM 02
<STUCOB.COBOL>
IDENTIFICATION DIVISION.
PROGRAM-ID. 'STUCOB'.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SUBSCHEMA-NAME. 'SCHSUB'.
SOURCE-COMPUTER .
FACOM .
OBJECT-COMPUTER .
FACOM .
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO SSYSIN.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-DATA.
02 IN-ID PIC X(1).
02 IN-TEACHER.
03 IN-TEA-NAME PIC X(20).
03 IN-TEA-ED PIC X(2).
02 IN-STU REDEFINES IN-TEACHER.
03 IN-STU-NAME PIC X(20).
03 IN-STU-BD PIC X(2).
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
OPEN INPUT IN-FILE.
MAIN-CONTROL-PROC SECTION.
READY 'SCHSUB'.
READ-DATA.
READ IN-FILE AT END GO TO END-APP.
IF IN-ID NOT = 'T' GO TO ST-STU.
GT-TEA.
DISPLAY 'IN-TEA-NAME :' IN-TEA-NAME.
DISPLAY 'IN-TEA-ED :' IN-TEA-ED.
MOVE IN-TEA-NAME TO TEA-NAME OF TEACHER.
MOVE IN-TEA-ED TO TEA-ED OF TEACHER.
FIND ANY 'TEACHER'.
GO TO READ-DATA.
ST-STU.
MOVE IN-STU TO STUDENT.
STORE 'STUDENT'.
GO TO READ-DATA.
END-APP.
FINISH.
CLOSE IN-FILE.
STOP RUN.