OpenFrame NDBのインストールと使用

本章では、OpenFrame NDBの構成とインストール前の準備および使用方法について説明します。

1. OpenFrame NDBの構成と準備

OpenFrame NDB(Network Database、以下NDB)は、富士通メインフレームのAIM/DB製品に対応されるTmaxSoftのOpenFrame製品です。NDBを使用するには、いくつかの準備が必要です。

以下の図は、NDBの構成要素を示しています。

figure 1 1
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.1. データベースの作成と削除

以下の図は、NDBの作成手順を示しています。

figure 1 2
NDBの作成手順

3.2. DBスキーマの作成

NDBを作成する前に、スキーマ・ファイルを作成します。スキーマ・ファイルには、使用するデータベースの物理的・論理的な構造に加え、レコード形式、拡張索引などの情報が含まれています。

スキーマ・ファイルは、スキーマ・コマンドを使用してNDBを定義します。スキーマ・コマンドの詳細と使用方法については、富士通の『OS IV AIM ADL REFERENCE MANUAL (V20L10)』を参照してください。

以下は、作成するNDBの構成図を示しています。

figure 1 3
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.