ユーティリティの使用

このドキュメントでは、次のトピックについて説明します。

なお、プラットフォーム(UNIX および Windows)によって操作に大幅な相違がある場合には、特定のセクションが設けらされています。


入出力デバイスの割り当て

ユーティリティに対するすべてのコマンドは stdin または SYS$INPUT から読み込まれ、出力は stdout または SYS$OUTPUT に送られます。標準入出力は、通常オペレーティングシステムでサポートされているファイルに対して向けられます。デフォルトでは、指定されているユーティリティパラメータは標準出力に含まれません。ただし、環境変数 ADAPARLOG を YES に設定すると、パラメータが対話形式で指定されていない場合に、パラメータの仕様が stdout/SYS$OUTPUT にコピーされます。

ユーティリティが 1 つ以上の出力ファイルを処理する場合、ユーティリティを開始する前に、各出力ファイルに対応する環境変数/論理名を論理ファイル名に設定する必要があります。環境変数/論理名の割り当てに関する詳細については、当該ユーティリティの記述部分を参照してください。ユーティリティから出力されるファイルと、そのファイルに割り当てられる環境変数/論理名については、各ユーティリティの説明の初めの方に記載されています。ユーティリティを起動する前に出力ファイルの環境変数/論理名を設定しないと、出力ファイルは現在のディレクトリに作成され、出力ファイル名は論理名と同じになります。コマンドログファイルまたはプロテクションログファイルの環境変数/論理名がユーティリティ開始前に設定されていないと、出力ファイルは現在のディレクトリに作成され、出力ファイル名はシーケンス番号付きの環境変数/論理名と同じになります。

いくつかのユーティリティは、ユーザー出口やハイパー出口に対しても環境設定を必要とします。詳細については、「ユーザー出口とハイパー出口」セクションを参照してください。

ユーティリティの実行(UNIX)

ユーティリティの実行形態には、対話形式とバックグランド形式があります。

前提条件

ユーティリティを実行するためには必要な権限を持たなければなりません。インストールでは、次のように権限を設定します。Software AG 製品管理者ユーザー(例えば、sag)およびそれに相当するグループに属しているすべてのユーザー(例えば、sag)によりユーティリティは実行されます。このグループが、現在の所属グループでない場合は、ユーティリティ(ADANUC を含む)を実行する前に newgrp コマンドでグループを変更することをお勧めします。グループを変更しないと、他のユーザーに権限の問題が生じる可能性があります。これは、ユーザーが作成した IPC リソース用のグループがユーティリティを実行するユーザーの現在のグループとなっていて、一部の IPC リソースはそのグループにしかアクセスを許可していないことが理由です。

使用するファイル名がデフォルト値と異なる場合は、ユーティリティを実行する前に、必要な環境変数を設定する必要があります(この章の「"環境変数"」を参照)。

プログラム dbgen は、それらが新規データベースを作成するときに、assign.bsh(Bourne シェルおよび Korn シェルの場合)または assign.csh(C シェルの場合)というファイルを生成します。このファイルの中の情報がシェルに読み込まれ、コンテナファイル、コマンドログ、およびプロテクションログの環境変数が設定されます。このファイルを使って環境変数を設定する場合は、ワーキングディレクトリをデータベースディレクトリに変更してから、次のコマンドを入力してください。

.  ./assign.bsh

コンテナファイルに対して外部的に環境変数を設定していない場合、ユーティリティは、コンフィグレーションファイル Adabas.INI および DBxxx.INI を介して設定を抽出します(『Adabas 拡張オペレーションセクション』を参照)。

ユーティリティの入力行にコントロールステートメントを入力する場合、入力できる内容は、パラメータの設定と実行対象の機能のいずれか、または両方を定義する文字列です。

機能とパラメータに関する説明はドキュメントに記載されていますが、ヘルプ機能のメッセージの中にも出力されます。

ユーティリティのインストール先はディレクトリ $ADAPROGDIR です。このディレクトリを PATH 環境変数に定義している場合は、オペレーティングシステムプロンプトにその名前を指定して、ユーティリティを直接実行できます。定義していない場合は、ユーティリティ名の前に "$ADAPROGDIR" を指定する必要があります。次からの例では、ディレクトリ名 $ADAPROGDIR が PATH 環境変数に定義されていることを前提にしています。

対話形式でのユーティリティの実行

ユーティリティを対話形式で実行する場合は、オペレーティングシステムのプロンプトでユーティリティ名を入力し、Return キーまたは Enter キーを押します。

ユーティリティが起動すると、日付、時刻、およびバージョン番号から成るメッセージが表示されます。次に、ユーティリティ名とコロンに続く部分に、コントロールステートメントを入力します。

%ADAREP-I-STARTED, 18-JUL-2005 11:39:49, Version 5.1.1
adarep:

対話モードの場合、入力行の開始位置は、ユーティリティのプロンプトのすぐ後になります。

入力行が物理的に 1 行におさまらず、複数行にわたって入力する必要がある場合は、各行の終わりにバックスラッシュ("\")と改行コードを続けて入力します。ユーティリティの画面では、継続行の開始位置にプロンプト(">")が表示されます。

コールレベルでのユーティリティの実行

コントロールステートメントにはコールレベルを指定することもできます。ADAREP ユーティリティの例では、次のようになります。

adarep dbid=20 summary

また、コントロールステートメントを入力ファイルからリダイレクトすることも可能です。例えば、rep.in というファイルが次の行で構成されているとします。

dbid=20
summary

この場合、次のように指定すれば、この 2 つのコントロールステートメントを指定して ADAREP を実行できます。

adarep <rep.in

ユーティリティが生成する情報の出力先は、通常、stdout ですが、リダイレクトして変更することもできます。したがって、次のように指定すれば、サンプルの ADAREP コールの出力は rep.out というファイルにリダイレクトされます。

adarep <rep.in >rep.out

注意:

  1. UNIX シェルはカッコ、一重引用符および二重引用符などの一部の文字に対して特殊な取り扱い方法がある点に注意してください。これは、パラメータの値に 1 つ以上のこれらの文字が含まれている場合、適宜パラメータの指定を変更する必要があることを意味します。
  2. 対話型入力では、空白は改行と等価です。パラメータ値に空白が必要な場合は、バックスラッシュを先行させるか、一重または二重引用符で囲みます。
  3. 環境変数 ADAPARLOG を YES に設定すると、対話形式で指定されたとおりにパラメータが表示されるので、パラメータの指定のエラーを見つけるのに役立つことがあります。

adadcu fields 'NEW RECORD',AA,AB end_of_fields

このコントロールステートメントは、意味としては次のようになるため無効です。

adadcu
fields
NEW RECORD,AA,AB
end_of_fields

引用符が必要です。

adadcu fields \'NEW RECORD\',AA,AB end_of_fields

このコントロールステートメントは、意味としては次のようになるため無効です。

adadcu
fields
'NEW
RECORD',AA,AB
end_of_fields

リテラルは 1 行内に指定する必要があります。

adadcu fields \'NEW\ RECORD\',AA,AB end_of_fields

このコントロールステートメントは、意味としては次のようになるため有効です。

adadcu
fields
'NEW RECORD',AA,AB
end_of_fields
adadcu "fields 'NEW RECORD',AA,AB end_of_fields"

このコントロールステートメントは、意味としては次のようになるため無効です。

adadcu
fields 'NEW RECORD',AA,AB end_of_fields

fields および end_of_fields は別の行で指定する必要があります。

adadcu fields "'NEW RECORD'",AA,AB end_of_fields

または

adadcu fields "'NEW RECORD',AA,AB" end_of_fields

これらの両方のコントロールステートメントは、意味としては次のようになるため有効です。

adadcu
fields
'NEW RECORD',AA,AB
end_of_fields

コマンド行から標準入力へのパラメータ入力の切り替え

ユーティリティのパラメータ入力をコマンド行から標準入力に切り替える場合は、コマンド行に指定した最後のパラメータの後に「+」(プラス記号)を入力します。

例:

adafdu dbid=35 file=36 + <employee.fdu

ユーティリティの実行(Windows)

ユーティリティの実行形態には、対話形式とバックグランド形式があります。

インストールした Adabas バージョンの Adabas ユーティリティを実行するために、いくつかの環境変数を設定しなければなりません。これは、Adabas Server Command Prompt を選択して実行します。

標準のコマンドプロンプトから Adabas コマンドを実行する場合は、「インストールの完了」の説明に従って、「ローカル」の Adabas サーバー環境を構成する必要があります。

  • Set Adabas System Environment]を選択すると、Adabas で必要とされる環境変数をシステム環境変数として設定できます。[Unset Adabas System Environment]を選択すると、これらの環境変数を削除して元に戻すことができます。

  • 環境変数をシステム環境変数として設定しない場合は、現在の Adabas バージョンの bin フォルダにある startenv.cmd コマンドを実行します。このフォルダの名前は、[Adabas Command Prompt]を右クリックして[Properties]を選択すればわかります。

使用するファイル名がデフォルト値と異なる場合は、ユーティリティをオフラインで実行する前に、必要な環境変数を設定する必要があります(この章の「"環境変数"」を参照)。

コンテナファイルに対して外部的に環境変数を設定しない場合、ユーティリティはコンフィグレーションファイル Adabas.INI および DBxxx.INI を経由してそれ自身の設定を抽出します。

ユーティリティの入力行にコントロールステートメントを入力する場合、入力できる内容は、パラメータの設定と実行対象の機能のいずれか、または両方を定義する文字列です。

機能とパラメータに関する説明は、このマニュアルに記載されていますが、ヘルプ機能のメッセージの中にも出力されます。

ユーティリティは、インストールディレクトリのサブディレクトリ「Adabas」にあります。このディレクトリが PATH 環境変数に定義している場合は、オペレーティングシステムプロンプトにその名前を指定して、ユーティリティを直接実行できます。定義していない場合は、ユーティリティ名の前に "%ADAPROGDIR%" を指定する必要があります。以下の例では、ディレクトリ名 %ADAPROGDIR% が PATH 環境変数に定義されていることを前提にしています。

対話形式でのユーティリティの実行

ユーティリティを対話形式で実行する場合は、オペレーティングシステムのプロンプトでユーティリティ名を入力し、Return キーまたは Enter キーを押します。

ユーティリティが起動すると、日付、時刻、およびバージョン番号から成るメッセージが表示されます。次に、ユーティリティ名とコロンに続く部分に、コントロールステートメントを入力します。

%ADAREP-I-STARTED, 18-JUL-2005 11:39:49, Version 5.1.1
adarep:

対話モードの場合、入力行の開始位置は、ユーティリティのプロンプトのすぐ後になります。

入力行が物理的に 1 行におさまらず、複数行にわたって入力する必要がある場合は、各行の終わりにバックスラッシュ("\")と改行コードを続けて入力します。ユーティリティの画面では、継続行の開始位置にプロンプト(">")が表示されます。

コールレベルでのユーティリティの実行

コントロールステートメントにはコールレベルを指定することもできます。ADAREP ユーティリティの例では、次のようになります。

adarep dbid=20 summary

また、コントロールステートメントを入力ファイルからリダイレクトすることも可能です。例えば、rep.in というファイルが次の行で構成されているとします。

dbid=20
summary

この場合、次のように指定すれば、この 2 つのコントロールステートメントを指定して ADAREP を実行できます。

adarep <rep.in

ユーティリティが生成する情報の出力先は、通常、stdout ですが、リダイレクトして変更することもできます。したがって、次のように指定すれば、サンプルの ADAREP コールの出力は rep.out というファイルにリダイレクトされます。

adarep <rep.in >rep.out

注意:
対話型入力では、空白は改行と等価です。パラメータ値に空白が必要な場合は、二重引用符で囲みます。

adadcu fields 'NEW RECORD',AA,AB end_of_fields

このコントロールステートメントは、意味としては次のようになるため無効です。

adadcu
fields
'NEW
RECORD',AA,AB
end_of_fields

リテラルは 1 行内に指定する必要があります。

adadcu "fields 'NEW RECORD',AA,AB end_of_fields"

このコントロールステートメントは、意味としては次のようになるため無効です。

adadcu
fields 'NEW RECORD',AA,AB end_of_fields

fields および end_of_fields は別の行で指定する必要があります。

adadcu fields "'NEW RECORD'",AA,AB end_of_fields

または

adadcu fields "'NEW RECORD',AA,AB" end_of_fields

これらの両方のコントロールステートメントは、意味としては次のようになるため有効です。

adadcu
fields
'NEW RECORD',AA,AB
end_of_fields

コマンド行から標準入力へのパラメータ入力の切り替え

ユーティリティのパラメータ入力をコマンド行から標準入力に切り替える場合は、コマンド行に指定した最後のパラメータの後に「+」(プラス記号)を入力します。

例:

adafdu dbid=35 file=36 + <employee.fdu

ユーティリティのリモート実行

オプション LOCAL_UTILITIES を Adabas データベースのアクティブニュークリアスに設定していない場合、ローカルおよびリモートマシンのアーキテクチャが同一(例えば、両方のマシンがバイトスワッピングを使用)であれば、そのデータベースは、Software AG の製品 Entire Net-Work や NET-WORK ACCESS を使用することにより、特定の Adabas ユーティリティでリモートアクセスすることができます。データベースにリモートアクセスできるユーティリティは次のとおりです。

  • ADACMP

  • ADADBM

  • ADAFDU

  • ADAREC

  • ADAREP

  • ADATST

  • ADAULD

ADADBM と ADAULD については、ニュークリアスが実行しているときに許される機能だけがリモートで実行することができます。

注意:
ADAM ファイルを定義しているか、または FORMAT パラメータを指定している場合、ADAFDU はリモートで実行することができません。

ユーティリティ構文

関数と引数

関数の引数はパラメータと呼ばれます。パラメータによって、持つ値はさまざまです。論理的に相互に切り替わる、2 つの値のみを持ち得るパラメータはスイッチと呼ばれます。

関数は、予約キーワードで表現されます。使用される関数タイプは次の 3 つです。

  • 引数を必要としない関数。

  • 1 つの引数を必要とする関数。

  • 複数の引数を必要とする関数。

引数を必要としない関数はスイッチであり、LOCK や UNLOCK などのキーワードによって関数の有効または無効を制御できます。

引数は、次のタイプに分けられます。

  • 文字列
    文字列とは、連続した ASCII 文字を指します。ただし、ASCII 文字のうち、コンマ(,)、改行文字(<CR>)、セミコロン(;)、および丸カッコ("(" と ")")は文字列としては扱われず、文字列のデリミタとして扱われます。また、空白やタブが含まれていれば削除されます。バックスラッシュ(\)は、エスケープ文字として使用できます。

    ほとんどの文字列は大文字に変換されます。等号の代わりに、コロン「:」を指定することもできます。違いは、コロンの後の文字列は大文字に変換されないことです。ユーティリティの構文記述でコロンが許可されない他のパラメータにもコロンを指定できますが、コロンは上記の場合にのみ使用することをお勧めします。そうしないと、パラメータ指定の結果が未定義になることがあります。

    例:

    adatst: rb=test
    adatst: rb
      <<<<<< RECORD BUFFER >>>>>>
    
    00000000    54455354 ........ ........ ........    TEST............
    adatst: rb:test
    adatst: rb
      <<<<<< RECORD BUFFER >>>>>>
    
    00000000    74657374 ........ ........ ........    test............
    

    「rb=test」を指定した場合、文字列「test」は大文字に変換されますが、「rb:test」を指定した場合は変換されません。

  • キーワード
    キーワードは、あらかじめ定義された文字列です。

  • 数値
    数値は、符号なし整数を数の並びとして表現したものです。数値は、"0x" という 2 桁の文字列を付加して 16 進フォーマットで入力することもできます。

  • 数値範囲
    数値範囲を指定するときは、範囲になる数値をハイフンでつなぎます。

  • キーワード、文字列、数値、数値範囲のリスト形式表記
    キーワード、文字列、または数値をリスト形式で指定する場合は、それぞれの値をコンマで区切り、全体を丸カッコで囲みます。

引数は、次の規約に従って指定します。

  • 最初の引数は、機能キーワードに続く等号(=)の後に指定します。

  • 後続の引数は、等号と値を伴うキーワードを用いて指定します。

例:

adadbm: recover
adadbm: renumber = (3,14)
adadbm: reuse = (isn,ds), file = 6
adarec: regenerate = *
adarec: plog = 654
adarec: checkpoint = synp
adarec: block = 0x1A

引数のリストは後続の行に継続することもできます。多機能ユーティリティの場合には、このリストがすべて整い、正しい場合に機能が実行されます。

構文の一覧で使用される記号

引数が必須またはデフォルト値を持つ場合は、ユーティリティ記述の先頭にある引数のリストの中に文字 M または D があります。

現在設定されているパラメータの確認

設定ないしプリセットされた全パラメータの現在の値は、アスタリスク(*)を入力することによって表示されます。

adarep:*<cr>
%ADAREP-I-PARSET setting of COUNT=<set>
%ADAREP-I-PARSET setting of DBID=5
%ADAREP-I-PARSET setting of FDT=<set>
%ADAREP-I-PARSET setting of FILES=(10)

スイッチが設定されている場合は、"<set>" と表示されます。

絶対時間

一部のユーティリティ(ADACLP、ADADBM、ADAREP)の引数は、絶対時間(日付と時刻の両方を含む文字列)の形式で指定する必要があります。使用する文字列は、次の絶対形式と同じでなければなりません。

dd-mmm-yyyy[:hh:mm:ss]

絶対時間の指定方法の詳細については、該当するユーティリティのドキュメントを参照してください。

単一機能ユーティリティと多機能ユーティリティ

ユーティリティは、1 回の実行で実行可能な機能の数に応じて、単一機能ユーティリティと多機能ユーティリティに分けられます。

単一機能ユーティリティでは、各キーワード値の正誤はそれが入力された後でチェックされます。引数の設定が整っているかどうかは、そのユーティリティのプロンプトで Ctrl キーと D キーを同時に押したとき(UNIX)、または Ctrl キーと Z キーを同時に押してから改行キーを押して(Windows)、ユーティリティが実行したときにチェックされます。単一機能ユーティリティは機能が実行されると終了します。

多機能ユーティリティでは、機能の指定またはパラメータの設定、またはその両方を使用できます。機能やパラメータの指定は一定の順序に従わなければなりません。機能はこの順序が完全で正しいときに実行されます。多機能ユーティリティの機能を実行した場合、正常終了したのかどうかがわかるように、終了時にメッセージが出力されます。ユーティリティ自身は、明示的に終了しない限り、機能の実行が終了した後でも終了しません。

ユーティリティの終了

ユーティリティの終了には、制御ステートメント QUIT またはその省略形の "Q" を使用します。QUIT の同義語として EXIT も使用できます。

注意:
ユーティリティ制御パラメータは常に大文字に変換されます。したがって、QUITEXIT は小文字でも指定できます。QUITEXIT は、FDT 解析モードでも指定できます。例えば FIELDS パラメータを指定した後などです。ただし、LOWER_CASE_FIELD_NAMES パラメータを指定している場合は、FDT 解析モードで大文字への変換は行われません。この場合は、QUIT または EXIT を大文字で指定する必要があります。

単一機能ユーティリティでは、QUIT により機能が中止され、ユーティリティが終了します。EOF(UNIX の場合は Ctrl キーと D キーを同時に押す、Windows の場合は Ctrl キーと Z キーを同時に押す)を入力すると、まず機能が実行した後でユーティリティが終了します。

多機能ユーティリティでは、QUIT でユーティリティが終了します。機能のパラメータを設定している途中で QUIT を入力した場合は、機能が中止され、ユーティリティが終了します。ただし、EOF はユーティリティの終了前に機能の実行が試行されます。必要とされるパラメータがいくつか指定されていない場合、ユーティリティは該当機能が実行される前にエントリの要求を行います。

終了時はすべての場合に、入出力ファイルに対する I/O 件数が示され、ユーティリティ名、日付、時刻、経過時間を記載した情報メッセージが発行されます。

%ADAFRM-I-IOCNT,      500  IOs on dataset WORK
%ADAFRM-I-IOCNT,      800  IOs on dataset DATA
%ADAFRM-I-IOCNT,      600  IOs on dataset ASSO
%ADAFRM-I-TERMINATED,   28-JUL-2005 11:39:50, elapsed time: 00:00:51

ユーティリティが正常終了すると、最終メッセージ TERMINATED が表示され、プログラム終了ステータスにゼロが設定されます。そうでない場合には異常終了メッセージ ABORTED が発行され、プログラム終了ステータスにはゼロ以外の値が設定されます。多機能ユーティリティは、入力のリダイレクトなしで対話型に使用される場合、常に正常終了します。

いくつかのケースでは、ユーティリティは TERMINATED メッセージを表示し、例外を示すためにゼロ以外の終了ステータスを返します。例えば、エラーが見つかったときのユーティリティ ADAVFY、またはレコードが棄却されたときのユーティリティ ADACMP などです。

エラー処理

ユーティリティコマンド内のエラーがある部分は、後続行内の上矢印によって示され、その後の行にエラーメッセージが表示されます。左から右に向かって評価され、その過程で検出されたエラーが順番に表示されます。

パラメータ設定のシーケンス内にエラーが発生した場合、エラーの前の設定部分は実行されます。

adadbm: refresh = 30
                   ^      
%ADADBM-E-NOTLOAD,  file not loaded

入力行内のエラーの位置は、後続行内の上矢印によって示されます。

Adabas シーケンシャルファイル

概要

Adabas ニュークリアスまたはユーティリティは、通常、シーケンシャルファイルの入出力を処理します。これらのシーケンシャルファイルに加えて、所定の内部 Adabas フォーマットの内部ファイル(例えばプロテクションログ)、およびユーザー定義フォーマットの外部ファイル(例えば圧縮解除したデータ)もあります。

内部 Adabas シーケンシャルファイルの出力先は、ファイルシステム、RAW セクション、またはテープデバイスに設定することができます。シーケンシャルファイルの中には、出力先を名前付きパイプに設定できるものもあります。次の表は、内部 Adabas シーケンシャルファイル、RAW デバイスアクセスに対する ADADEV キーワード、およびディスクセクション(UNIX のみ)、テープデバイスまたはファイルシステムに設定可能な対応する環境変数をリストしています。環境変数が定義されていない場合、Adabas は、現在のワーキングディレクトリのファイルを環境変数名付きで使用します。

シーケンシャルファイルタイプ ADADEV キーワード 環境変数
プロテクションログ PLG DEVPLGx、NUCPLGx(*)、PLPLEX、PLPPLGx、RECPLGx
コマンドログ CLG CLPCLGx、DEVCLGx、NUCCLGx
バックアップファイル BCK BCK00nx、DEV00nx、ULD00nx
バックアップファイルコピー BCKOUT BCKOUTx、DEVOUTx
圧縮データ DTA CMPDTAx、DCUDTAx、DEVDTAx、MUPDTAx、ULDDTAx
ディスクリプタバリューテーブル DVT CMPDVTx、DEVDVTx、MUPDVTx、ULDDVTx
ADAMUP テンポラリデータ MUPTMP MUPTMPx
ADAMUP ログ
(DTA/DVT)
MUPLOG DEVLOGx、MUPLOGx
リオーダファイル ORDEXP DEVEXPx、ORDEXPx
ユーティリティエラーファイル ERR ERRINx、CMPERRx、DCUERRx、
DEVERRx、INVERRx、MUPERRx、
RECERRx

ただし、n = 1~9、x は省略または 2 以上
(*)NUCPLG はテープ上には存在しません。

次の Adabas シーケンシャルファイルがファイルシステム内に存在する必要があります。

シーケンシャルファイルタイプ 環境変数
ADAMUP ISN リスト MUPISN
LOB 処理用の ADAMUP 一時ワークスペース MUPLOB、MUPLBI
フィールド定義データ FDUFDT、CMPFDT、DCUFDT
圧縮解除した未加工データ CMPIN、DCUOUT

ディスクスペース管理ユーティリティ ADADEV を使用して、RAW ディスクセクションのファイルを管理できます。詳細については、「ADADEV」を参照してください(UNIX のみ)。

プラットフォームによる依存性

Adabas シーケンシャルファイルは、上位優先と下位優先のプラットフォームでは内部フォーマットが異なりますが、バイト順が同じプラットフォームであれば、互換性が保証されます。

プラットフォーム 1 バイト順 プラットフォーム 2 バイト順 互換性あり
Solaris 上位優先 AIX 上位優先
LINUX(Intel) 下位優先 Windows 下位優先
Solaris 上位優先 Windows 下位優先 ×

次のファイルのみがすべてのプラットフォームで互換性を持ちます。

  • 非圧縮データファイル

  • FDT ファイルなどの純粋なテキストファイル

上位優先と下位優先のプラットフォーム間でデータを交換する場合、次の手順に従います。

  1. ADAULD を使用してアンロードします

  2. ADADCU を使用して圧縮解除します

  3. ADACMP を使用して圧縮します

  4. ADAMUP を使用してロードします

非圧縮レコードが大きすぎるため、この手順が不可能な場合、ソースデータベースからデータを読み取るプログラムを作成する必要があります。このプログラムを作成する際に、ファイルシステム内の中間ファイルにデータを書き込む方法があります。別のプログラムが、この中間ファイルを読み込んで、ターゲットデータベースにデータを書き込みます。また、Entire Net-Work を使用してデータを直接データベースに格納する方法もあります。

名前付きパイプの使用

名前付きパイプは、ユーティリティの出力を別のユーティリティやアプリケーションに処理させるとき、または、ユーティリティ入力が他のユーティリティやアプリケーションの出力だった場合、ストレージスペースを節約するために使用することができます。名前付きパイプは、MUPDTA、MUPDVT、MUPISN、MUPLBI、MUPLOB、MUPLOG、MUPTMP、NUCPLG、ORDEXP、PLPLEX、PLPPLG、ULD00n 以外のすべての Adabas シーケンシャルファイルに使用することができます。

Windows で動作する名前付きパイプは、一時的なオブジェクトです。環境変数に名前付きパイプの名前が指定されている場合(例えば \\.\pipe\パイプ名)、名前付きパイプに書き込みを試行するユーティリティは暗黙的に名前付きパイプを作成します。それから、このユーティリティは、ユーティリティの読込み処理が発生するまで、前もって定められた一定時間を待ってから、名前付きパイプから読み込みを開始します。読み込みユーティリティの処理無しで時間が経過した場合、書き込みユーティリティは I/O エラーで中断します。

Adabas シーケンシャルファイルの複数エクステント

シーケンシャルファイルに割り当てられたスペースが、ユーティリティがそれを作成している間に使い切ってしまった場合、Adabas は、別の空きスロットにファイルを継続しようとします。これは、割り当てたスペースまたは事前割り当てが行われたスペースがすべて使われた場合、またはシーケンシャルファイルが設置されたファイルシステムがいっぱいになった場合に、RAW デバイスに設置されたすべてのシーケンシャルファイルに対して適用されます。次のように、環境変数の名前にカウンタを付加すれば、環境変数を何回も使用することができます。

例(C シェル)

setenv  NUCPLG  /dev/rdsk/c4d0s2
setenv  NUCPLG2  /usr/adabas/PLOG_2
setenv  NUCPLG3  /dev/rdsk/c7d0s2

上記の 3 つのデバイスは、ニュークリアスセッション中にプロテクションログに使用されます。

次に示すように、1 つの環境変数内でファイル/デバイス名のすべてを設定する方法もあります。

注意:
デリミタは、UNIX プラットフォームでは空白で、Windows プラットフォームではセミコロン(";")です。

例(C シェル)

setenv NUCPLG "/dev/rdsk/c4d0s2  /usr/adabas/PLOG_2  /dev/rdsk/c7d0s2"

Adabas の起動時に、最初の環境変数(この場合は NUCPLG)から処理されますが、環境変数に値が設定されていなければ、そのデフォルト(デフォルトは環境変数と同じ名前のカレントディレクトリのファイル)が処理されます。ファイルの末尾に達したとき、またはファイルシステムがいっぱいになったとき(ファイルシステムが使用された場合)、ファイルはクローズされ、次の環境変数(NUCLPG2)が解釈され、関連ファイルやディスクセクションがオープンされます。その後、次のエクステントのために使用されるディスクセクションから空きスペースが割り当てられます。後続の環境変数(例えば NUCPLG4)が存在しない場合、Adabas はもう一度最初から処理し、最初のディスクセクション(NUCPLG)に戻ります。

1 つの環境変数だけが定義されており、ディスクセクションに割り当てられている場合、後続のファイルエクステントはすべて同じディスクセクションに作成されます。1 つの環境変数だけが定義されてファイルシステムに割り当てられている場合、ファイルシステムがいっぱいになると、Adabas は継続することができません。

1 つのファイルエクステントから別のファイルエクステントへの切り換えが発生した場合、クローズされたエクステントは、通常その名前にエクステント番号が付加され名前が変わります。例えば、ディスクセクションの PLG.3 というファイルエクステントは PLG.3(1) という名前に変更されます。また、ファイルシステムの/tmp/BCK_DB というファイルエクステントは /tmp/BCK_DB(1) という名前に変更されます。新規ファイルエクステントの名前には新規ファイルエクステント番号が含まれます。したがって、ディスクセクションの新規ファイルエクステントは PLG.3(2) と命名され、ファイルシステムの新規ファイルエクステントは /tmp/BCK_DB(2) と命名されます。

注意:
環境変数の値のサイズは、オペレーティングシステムに応じて 512 バイトまたはそれ以上に制限されます。1 つの環境変数で多数のエクステントを指定すると、環境変数の値が切り捨てられて、エラーが発生する場合があります。このような場合には、エクステントを個別の環境変数で指定する必要があります。

ユーティリティの呼び出し

複数のエクステントを持つファイルを指定してユーティリティを使用する場合には、重要な制限事項が 1 つ適用されます。その制限事項とは、複数のファイルエクステントが必要になり、1 つの環境変数に 1 つの値だけが設定されている場合に、入力のリダイレクトができなくなることです。この場合、ユーティリティは次のメッセージを表示して異常終了します。

%ADABCK-E-SFNOTPO, subsequent file extents not possible with input redirection

次のように入力すると、それぞれのモードが正常に動作します。

対話モード(UNIX)

adabck <RETURN>
dbid=5, dump=4 <RETURN>
<CTRL/D>

対話モード(Windows)

adabck <RETURN>
dbid=5, dump=4 <RETURN>
<CTRL/Z><RETURN>

対話モード(コマンド行)

adabck dbid=5 dump=4

バッチジョブ

adabck dbid=5 dump=4 &

新しいテープが必要になると、ユーティリティの処理は停止します。停止したら、ジョブをフォアグラウンドに切り替えれば、有効なデバイス名を入力して、処理を続行できるようになります。

複数エクステントファイルの読み込み

複数エクステントに分割されたシーケンシャルファイルを読み込むとき、正しい環境変数が設定されている場合、Adabas は、それぞれのエクステントが終了しているかどうかチェックし、読み込みを継続する次のエクステントのファイル/デバイスがどこにあるのかパス名を探します。

例:

ADAREC は、2 セクションに分割されたプロテクションログを 1 つにまとめます。環境変数 RECPLG はプロテクションログ 5(PLG.5(1))の最初のエクステントをポイントする必要があります。その処理が終了すると、ADAREC は次のエクステントのファイル/デバイスのパス名を求めます。

 Enter next file/device path name to continue PLG.5(2)

ファイルエクステントはディスクセクションまたはファイルシステムまたはテープデバイスに配置できます。後続のエクステントをオープンした後、Adabas は、指定エクステントが予期されたものであるかを確認するためのチェックを行います。これが正しいエクステントではない場合、エラーメッセージが表示され、正しいファイル/デバイス名に対するプロンプトが再表示されます。このようなプロンプトが表示された場合は、「"quit"」を入力して他の処理を中止できます。Adabas はプロテクションログエクステントを予期していますが、後続のプロテクションログエクステントが存在しない状況が発生することがあります。この場合は、「"close"」と入力して、エラーなしで現在のプロテクションログファイルの処理を終了できます。

counted 環境変数を使用する場合、プロンプトなしで、1 回の実行でファイルを処理することもできます。この場合、ファイルを作成したときと同じ方式が使用されます。ファイル(複数可)は RAW デバイス、ファイルシステムまたはテープデバイスに配置することができます。

C シェルの場合は、次のようになります。

setenv RECPLG /dev/rmt/0m
setenv RECPLG2 /dev/rdsk/c10d0s2
setenv RECPLG3 /dev/rdsk/c7d0s2

Bourne シェル、Korn シェルの場合は、次のようになります。

RECPLG = /dev/rmt/0m
export RECPLG
RECPLG2 = /dev/rdsk/c10d0s2
export RECPLG2
RECPLG3 = /dev/rdsk/c7d0s2
export RECPLG3

Windows:

set RECPLG=\\.\TAPE0
set RECPLG2=C:\BCK_2
set RECPLG3=D:\BCK_3

1 つの環境変数内で、すべてのファイル/デバイス名を設定する方法としては、次の例のような方法もあります。

一括更新ユーティリティ ADAMUP が 2 エクステントに分割されたデータファイル(DTA)を使用する場合、次のように設定することができます。

C シェルの場合は、次のようになります。

setenv  MUPDTA  "/dev/rdsk/c5d0s2  /usr/adabas/DTA_2"

Bourne シェル、Korn シェルの場合は、次のようになります。

MUPDTA  = "/dev/rdsk/c5d0s2  /usr/adabas/DTA_2"export MUPDTA

Windows:

set MUPDTA=\\.\TAPE0;C:\adabas\DTA_2

テープデバイスのサポート

テープの使用

Adabas ユーティリティはテープデバイスを直接読み書きすることができます。この機能を使用できるようにするために、対応する環境変数はテープデバイス名をポイント先として設定しなければなりません。ユーティリティはそれ自身のテープフォーマット(他のテープ操作ユーティリティの互換性がない)を使用します。

ユーティリティを開始する前に、テープデバイスの名前がポイント先になるように環境変数を設定する必要があります。例えば、バックアップユーティリティ ADABCK を HP-UX マシンで使用する場合、次のように入力すべきです。

C シェルの場合は、次のようになります。

setenv BCK001 /dev/rmt/0m

Bourne シェル、Korn シェルの場合は、次のようになります。

BCK001 = /dev/rmt/0m
export BCK001

例えば、テープデバイス \\.\TAPE0 に書き込むために、Windows でバックアップユーティリティ ADABCK を使用したい場合、次を入力する必要があります。

Windows:

set BCK001=\\.\TAPE0

テープドライブのデバイス名は \\.\TAPE<tape id> 形式を持っています(<tape id>は 0 から始まるテープデバイス番号です)。

複数テープサポート

非常に大規模なファイルは、何本かのテープに分けることが必要になる場合もあります。テープがいっぱいになった場合、ユーティリティはユーザーの交換が必要な旨のメッセージを表示し、入力を求めます。テープを交換した後、ユーザーは継続するために再度デバイス名を入力する必要があります。

例:

%ADABCK-I-TDEVFU, end of tape reached, rewinding
                  Insert new tape and enter device name, [/dev/rmt/0m]  (UNIX)
                  Insert new tape and enter device name, [\\.\TAPE0]  (Windows)

複数テープを読み込むとき、同様の方式が使用されます。ユーティリティは、テープが正しい順番でマウントされているかをチェックします。テープが間違った順番で挿入されている場合、ユーティリティはエラーメッセージを発行し、入力を促します。

例:

%ADABCK-F-ILLSUB, illegal subsequent tape detected,
                  present 1, expected 3

継続するため、ユーザーは正しいテープをマウントし、デバイス名を入力しなければなりません(テープデバイス名は最初と同じであってはいけません)。標準ファイル名および RAW セクションは入力できません。

自動テープ交換

プロンプトなしの自動テープ交換をサポートするため、1 つの環境変数に複数のテープデバイスを設定することができます。これは、例えば最初に選択されたテープの空きスペースがなくなった場合に、Adabas は自動的に次のテープに切り替えることを意味します。このメカニズムは、テープの読み込みと書き込みの両方でサポートされています。

例(C シェル):

setenv  BCK001  "/dev/rmt/0m  /dev/rmt/1m"
setenv  RECPLG  "/dev/rmt/0m  /dev/rmt/1m"

または

setenv BCK001 /dev/rmt/0m
setenv BCK0012 /dev/rmt/1m
setenv RECPLG /dev/rmt/0m
setenv RECPLG2 /dev/rmt/1m

例(Windows):

set BCK001=\\.\TAPE0;\\.\TAPE1
set RECPLG=\\.\TAPE0;\\.\TAPE1

大規模データベースを選択された 2 つのテープにダンプします。2 つのテープでは十分でない場合、Adabas は 3 番目のテープに交換するよう促します。

ユーティリティの呼び出し

テープ処理が伴うユーティリティの使用には重要な制限事項が 1 つ適用されます。その制限事項とは、複数テープが必要になっても、自動テープ交換機能(上記参照)を使用していない場合には、入力のリダイレクトができなくなることです。この場合、ユーティリティは次のメッセージを出力して異常終了します。

%ADABCK-E-STNOTPO, subsequent tapes not possible with input redirection

次のように入力すると、それぞれのモードが正常に動作します。

対話モード(UNIX)

adabck <RETURN>
dbid=5, dump=4 <RETURN>
<CTRL/D>

対話モード(Windows)

adabck <RETURN>
dbid=5, dump=4 <RETURN>
<CTRL/Z><RETURN>

対話モード(コマンド行)

adabck dbid=5 dump=4

バッチジョブ(UNIX)

adabck dbid=5 dump=4 &

新しいテープが必要になると、ユーティリティの処理は停止します。停止したら、ジョブをフォアグラウンドに切り替えれば、有効なデバイス名を入力して、処理を続行できるようになります。

単一テープの複数ファイル

Adabas では、1 本のテープに保存された複数ファイルを扱うことができますが、これはお使いのオペレーティングシステムでサポートされている場合に限ります(例えば、巻き戻しなしテープを備えた mt インターフェイスなど)。この機能を使用するため、テープでの必要な位置までスキップし、その後、ユーティリティを実行します。

例:

mt fsf 1
adabck db=5 dump=3

テープの最初のファイルをスキップし、データベースを 2 番目のファイルとしてテープにダンプします。

サポートされないテープフォーマット

Adabas がサポートしていないテープフォーマットのテープに、外部データ(非圧縮データなど)が入っていることがありますが、この場合には、Adabas から I/O エラーが返されます。このようなテープは、UNIX コマンド dd を使用すれば、ファイルを名前付きパイプに読み込むことができます。その後、Adabas ユーティリティは名前付きパイプから読み込むことができます。

ADAMUP および ADAINV の実行の最適化

インデックスを作成するには、ユーティリティ ADAINV と ADAMUP でディスクリプタ値をソートする必要があります。ソート実行の効率は、ユーティリティパラメータ LWP のサイズの影響を受ける可能性があります。このパラメータは、ユーティリティに割り当てられた最小メモリに加えて使用できるメモリの量を指定しています。以下では、ソート処理の実行に対する LWP パラメータのサイズの影響について説明します。

  • LWP パラメータのサイズに応じて、メモリ内の領域がメモリ内ソート用に提供されます。LWP の大きさが十分な場合は、すべてのディスクリプタ値をメモリ内でソートでき、インデックスを作成できます。また、SORT コンテナは必要ありません。ADAMUP および ADAINV SUMMARY 機能で、メモリ内ソートに必要な値が表示されます。

  • 領域が小さすぎてメモリ内でソートできない場合は、ソート対象のデータが、メモリ内でソートできるサブセットに分割されます。サブセットの数は、LWP パラメータのサイズしだいです。LWP のサイズを大きくすると、サブセットの数を減らすことができます。これらのサブセットをメモリ内でソートすると、ソートされたサブセットが SORT コンテナに書き込まれます。

  • すべてのサブセットをソートしたら、ソートしたサブセットをマージする必要があります。ただし、1 回のパスでは限られた数のサブセットしかマージできません。サブセットの数が制限値を超えない場合は、マージ後にすべてのディスクリプタ値がソートされ、インデックスが作成されます。単一パスのマージに必要な LWP 値と SORT コンテナの必要なサイズは、ADAMUP および ADAINV SUMMARY 機能で表示されます。

  • サブセットの数が多い場合、マージされたサブセットは再度ディスクに書き込まれ、別のマージパスが必要になります。つまり、1 回のマージパスで十分な場合の SORT コンテナサイズと比較して、2 倍のサイズが必要になります。ADAMUP および ADAINV SUMMARY 機能で、SORT コンテナの必要サイズが表示されます。

  • SORT コンテナの必要サイズは、マージパスの回数にのみ依存し、LWP パラメータの値には依存しません。LWP パラメータが単一パスのマージに十分な大きさの場合、必要となるディスクスペースは、2 回以上のパスでマージする際の半分になります。

  • メモリ内ソートは、1 回以上の追加のマージパスを使用するソートよりも必ずしも高速であるとは限りません。これは、提供されているメモリに、ソートアルゴリズムでランダムにアクセスすることが理由です。LWP=0 の場合は、通常、メモリキャッシュミスは多くなりませんが、LWP パラメータが大きくなると、メモリキャッシュミスが多くなります。そのため、ソートされたサブセットのマージに必要な時間よりも、ソートに必要な時間が長くなる場合があります。ソートされたサブセットをマージする際には、多くのメモリキャッシュミスは発生しません。また、SORT コンテナの I/O への悪影響も限定的です。これは、I/O が非同期的に実行されているためです。また、データが SORT コンテナのファイルシステムキャッシュに残っていることもあります。

  • システムコンポーネントのパフォーマンスは、コンピュータによって大きく異なる場合があります。したがって、定期的に ADAMUP や ADAINV を実行する場合は、異なる方法を試してみることをお勧めします。これらのユーティリティを頻繁に実行しない場合は、上記の作業は労力に見合う価値がない可能性があります。

  • ADAMUP SUMMARY の実行は非常に高速です。これは、MUPDTA および MUPDVT ファイルが作成されたときに、すでにディスクリプタサマリが作成されていて、MUPDTA ファイルに保存されているからです。これに対して、ADAINV SUMMARY は、ディスクリプタサマリを作成するために、ファイルのすべての DATA ブロックを読み取る必要があるので、比較的低速になります。

  • SUMMARY 機能は、推奨される TEMP サイズも計算します。ユーティリティは一度に 1 つのディスクリプタしか処理できませんが、常にすべてのディスクリプタの値を確認します。ADAINV が DATA ブロックを読み直すのを回避するために、他のディスクリプタの値は、ディスクリプタごとにグループ化されて TEMP に格納されます。TEMP は、最大のディスクリプタを格納できるようにする必要があります。すべてのディスクリプタを 1 回のパスで処理できる十分な大きさの TEMP が理想的です。ADAINV は、ディスクリプタサイズを事前に認識しないので、1 回のパスに必要な TEMP サイズは比較的大きくなります。ADAINV SUMMARY は、2 回のパスでディスクリプタを処理するための TEMP サイズも表示します。

  • SUMMARY 機能によって計算された値は正確な最小値ではありません。この値は切り上げられています。つまり、これらの値は十分ですが、より小さい値でも目的にかなう場合があります。

ニュークリアスとユーティリティの間の同期

ユーティリティコミュニケーションブロック(UCB)

ほとんどのユーティリティはデータベースコンテナに書き込むことができます。また、オンラインモード(つまりニュークリアスがアクティブであるとき)とオフラインモード(つまりニュークリアスがアクティブでないとき)の両方で実行できます。つまり、データベースの整合性を保証するには、ニュークリアスがアクティブかどうかに関係なく、ニュークリアスとユーティリティの同期メカニズムが必要です。

その目的で、各 Adabas データベースに、ユーティリティコミュニケーションブロック(UCB)が含まれています。UCB は、ASSO コンテナの RABN 3 に保存されています。1 つ以上のファイルに対する読み取りまたは書き込みアクセス権がユーティリティで必要になるたびに、以下の情報を含む UCB エントリを最初に作成する必要があります。

  • 処理する Adabas ファイルのファイル番号。

  • アクセスモード(読み取りまたは書き込み)。

さらに、データベースコンテナ内の一部のグローバルデータ構造へのアクセスは、ニュークリアスとユーティリティの間で同期される必要があります。

オンラインモードでは、ユーティリティとニュークリアスの同期は、常にニュークリアスを介して実行されます。ユーティリティは特別な Adabas コマンド(U コール)を発行し、UCB とその他のグローバルデータベースブロックを更新します。

オフラインモードでは、ユーティリティ自体によって UCB およびその他のグローバルデータベースブロックが更新されます。2 つのユーティリティプロセスがブロックを同時に更新する状況を回避するために、セマフォを介してアクセスが保護されます。セマフォでは、グローバルデータ構造へのアクセスのみが保護され、ファイル固有データへのアクセスは UCB を介して保護されます。

ユーティリティが終了すると、通常、UCB のエントリは再び削除されます。ただし、ユーティリティが異常終了した場合は、ユーティリティの UCB エントリが削除されない可能性があります。この場合は、ADADBM RESET=UCB を使用して、UCB を手動で削除する必要があります。

注意:
ニュークリアスおよび他のユーティリティ(ADAREP および ADAPRI)と同期しない、読み取り専用ユーティリティがいくつかあります。このようなユーティリティには、いつでも実行できるという利点がありますが、まれにユーティリティが異常終了するというリスクがあります。

読み取り専用モードのデータベース

コンテナが書き込み保護されている場合、またはニュークリアスパラメータ OPTION=READONLY を指定した場合は、データベースを読み取り専用モードになります。読み取り専用モードのデータベースの場合は、UCB を書き込めませんが、それでも同期が必要です。これは、読み取り専用モードが、ニュークリアスパラメータ OPTION=READONLY のみによって生じていることがあり、その際にはコンテナが書き込み可能なことが理由です。ニュークリアスおよびユーティリティは、ジェネラルコントロールブロック(GCB)が保存されている共有メモリにアクセスします。これは、最初のニュークリアスまたはユーティリティプロセスが開始したときに作成される共有メモリです。最後に共有メモリを使用したニュークリアスおよびユーティリティプロセスが終了すると、再び削除されます。この共有メモリは、データベースを読み取り専用としてマークするために使用されます。これは、共有メモリが作成され、コンテナが読み取り専用の場合、またはニュークリアスが OPTION=READONLY で開始された場合に行われます。

次の規則が適用されます。

  • 共有メモリが読み取り専用としてマークされている場合は、ニュークリアスを読み取り専用モードで起動すること、またはデータベースコンテナの読み取りのみを行うユーティリティ機能を起動することのみが可能です。書き込みを実行するニュークリアスやユーティリティは、共有メモリを削除した後にのみ開始できます。

  • 共有メモリが読み取り専用としてマークされていない場合は、ニュークリアスを読み取り専用モードで起動することはできません。これは、共有メモリを作成したユーティリティがデータベースを変更する可能性があることが理由です。読み取り専用ニュークリアスは、この変更が行われないことを前提としています。