Reorganize 関数

Reorganize 関数は、1 つのデータベースまたは論理的に関連するデータベースのセットを再編成するための簡単なメカニズムを提供します。

Reorganize 関数は、1 つのデータベースまたは論理的に関連するデータベースのセットを再編成するための簡単なメカニズムを提供します。この関数を使用すると、個別の Unload および Load 関数の作成と実行が自動化されます。PtrUpdate ステップは、論理子が含まれているすべてのデータベースに対して自動的に実行されます。

構文

mfims imsdbu REOR {database-name|filename}
     [[NO]CLS]
     [ECHO(keyword,msglvl,stoplvl
     [[NO]INI(filespec)]
     [[NO]LIST(filespec)]
     [LISTOPEN(disp)]
     [[NO]LOG(filespec)]
     [PROGRESS(no-of-segments)]

パラメタ

database-name
関数を実行するデータベースの名前。
filename
関数を実行するデータベースのリストを含んでいるファイルの名前。
CLS
ユーティリティの起動前に画面をクリアします。NOCLS を使用すると、初期クリア画面は防止されます。NOCLS は、コマンド・ファイルで一連のユーティリティを実行している場合に役立ちます。
デフォルト: NOCLS
ECHO
IMSDBU によって表示されるメッセージの表示とそれらのメッセージとの対話を制御します。
デフォルト: ECHO(MSGS,4,8)
サブパラメータ
keyword 表示される情報のカテゴリ。次のいずれかを指定します。
ALL
処理メッセージ、入力ソースまたは詳細情報、および終了メッセージを常に表示します。メッセージ・レベルが msglvl および stoplvl 値以上の場合は、警告およびエラー・メッセージが表示され、ユーザ入力を求めて停止します。
MSGS
処理メッセージと終了メッセージを常に表示します。ソースや詳細情報は表示されません。メッセージ・レベルが msglvl および stoplvl 値以上の場合は、警告およびエラー・メッセージが表示され、ユーザ入力を求めて停止します。
ERREND
ユーティリティ終了メッセージを常に表示します。メッセージ・レベルが msglvl および stoplvl 値以上の場合は、警告およびエラー・メッセージが表示され、ユーザ入力を求めて停止します。
ENDMSG
ユーティリティ終了戻りコードが msglvl 以上の場合のみ終了メッセージを表示します。ユーティリティ終了戻りコードが stoplvl 以上の場合は、「Press any key to continue」というメッセージが表示され、入力を求めて停止します。すべての終了メッセージで表示および/または停止するには、msglvl および/または stoplvl の値としてゼロを入力します。
COND
警告/エラー・メッセージと終了メッセージは、どちらも msglvl および stoplvl 値を条件としています。メッセージ・レベルが msglvl および stoplvl 値以上の場合は、警告およびエラー・メッセージが表示され、ユーザ入力を求めて停止します。終了戻りコードが msglvl 以上の場合は、終了メッセージが表示されます。ユーティリティ終了戻りコードが stoplvl 以上の場合は、入力を求める「Press any key to continue」というメッセージが表示されます。
ERRORS
メッセージ・レベルが msglvl および stoplvl 以上の場合は、入力を求める警告およびエラー・メッセージが表示されます。終了メッセージは表示されません。
msglvl 表示するメッセージの重大度を示す 4~20 の値。1
stoplvl ユーザ入力を求めて停止するメッセージの重大度を示す 4~20 の値。 1
1 次の値を取ることができます。
カテゴリ 原因例
4 一般的な警告メッセージ DBDGEN が仮設を立てて続行することができる DBD ソース内のマイナーなコーディング・エラー
6 IMS 固有の警告メッセージ キーワードまたは文がサポート対象外で無視されるという警告 - 処理は続行可能
8 一般的な重大エラー 補正できない DBD ソース内の不正なコーディング ('no DBD statement' など)
10 IMS Option 固有の重大エラー 補正できないサポート対象外の機能が定義されている ('Exceeded some maximum' など)
12 重大エラー - 起こりうる一時的なステータス 一時的な I/O エラー ('file locked' または 'database locked' ステータスなど)
16 重大エラー - 永続的 - インストールの問題と考えられる 永続的な I/O エラー (無効なデータ・セット名やメンバー名がユーティリティに入力された場合や、環境変数が正しく設定されていない場合など)
20 重大エラー - 永続的 回復不能な I/O エラーまたは他の予期しないエラー
INI
デフォルトの指令ファイルを指定します。
デフォルト: なし
サブパラメータ
filespec IMSDBU プログラム・デフォルトをオーバーライドする指令を含んだ .INI ファイルの名前と場所。
構文規則
  1. filespec には、必要に応じてドライブやディレクトリを含めることができます。ドライブやディレクトリを指定しない場合、IMSDBU は指定された .INI ファイルを現在のディレクトリで検索します。
  2. .INI ファイルにリストされた指令は、IMSDBU プログラム・デフォルトをオーバーライドします。
  3. コマンド・ラインまたは対話式画面で入力された指令は、.INI ファイル内の指令をオーバーライドします。
  4. NOINI を指定すると、.INI ファイルによってプログラム・デフォルトがオーバーライドされることはなくなります。
  5. 存在しない .INI ファイルを指定した場合は、NOINI が指定されたかのようにプログラム・デフォルトの指令が使用されます。
一般規則
  1. .INI ファイルは ASCII テキスト形式のファイルで、見出し [IMSDBU] を行 1 に含み、列 1 から始まり、1 行に 1 つの指令が含まれる mfims imsdbu 指令のリストが続きます。行は改行またはファイル終わりによって終了します。コメント行は、列 1のアスタリスク (*) またはセミコロン (;) によって示されます。IMSDBU 指令の例を次に示します。
    [IMSDBU]
    PROGRESS(1000)
    ;use local log
    LOG(C:\MYDIR\MYDB.LOG)
LIST
詳細リスティング・ファイルの場所と名前を制御します。このファイルには、ソースリスト、終了ステータス、エラーメッセージ、実行時の統計情報が含まれています。
デフォルト: LIST(*.LST)
サブパラメータ
filespec リスティング・ファイルに使用する名前と場所。
構文規則
  1. filespec には、必要に応じてドライブやディレクトリを含めることができます。ドライブやディレクトリを指定しない場合、IMSDBU は現在のディレクトリにリスティング・ファイルを作成します。
  2. NOLIST はリスティング・ファイルの作成を抑制します。
  3. パスを指定するために、パスを表す環境変数名の冒頭にドル記号 ($) を置く表記法を使用できます。例えば、LIST($ENVVAR\*.DOC) を使用すると、ENVVAR 環境変数によって指定されたディレクトリに dbdname.DOC のリスト・ファイルが作成されます。
  4. LIST(*.LST) または LIST(*.RPT) を指定すると、プロジェクト・リスティング・ディレクトリにリスティング・ファイルが作成されます。
  5. パスを指定しない場合、リスティング・ファイルは現在のディレクトリに作成されます。
  6. filespec のベース名をアスタリスク (*) として指定した場合、そのアスタリスクは DBD 名に置き換えられます。これにより、IMSDBU は、複数のデータベースに作用することができる関数の個別レポートを提供できるようになります。また、これは DBD 名による履歴詳細レポートの管理にも役立ちます。
  7. LISTfilespec なしで指定するのは、LIST(*.LST) を指定するのと同じです。
LISTOPEN
詳細リスティング・ファイルのオープン・ディスポジションを制御します。
デフォルト: LISTOPEN(NEW)
サブパラメータ
disp 使用するディスポジション。次のいずれかになります。
NEW
新しいリスティング・ファイルを作成するか、または既存のリスティング・ファイルを上書きします。
MOD
リスト出力を既存のファイルに追加します。既存のファイルがない場合は、新しいリスティングを作成します。MOD を指定すると、データベース関数の詳細履歴レコードを管理することができます。
構文規則
  1. NOLIST が指定されている場合は、LISTOPEN は無視されます。
LOG
各関数の終了メッセージ・ステータスを示す IMSDBU アクティビティ・ログを指定します。
デフォルト: LOG(IMSDBU.LOG)
サブパラメータ
filespec IMSDBU アクティビティ・ログとして使用するファイルの名前と場所。
構文規則
  1. filespec には、必要に応じてドライブおよび/またはディレクトリを含めることができます。ドライブやディレクトリを指定しない場合は、現在のディレクトリにリスティングが作成されます。
  2. NOLOG を指定すると、ログ・ファイル出力は抑制されます。
一般規則
  1. ログ・ファイルが存在しない場合は、ログ・ファイルが作成されます。
  2. ログ・ファイルは、ファイル終わりまで記述されている直近のエントリを含んでいる履歴ファイルです。
  3. ログ・ファイルのサイズが次第に増大すると、状況により定期的に削除が必要になります。
PROGRESS
進捗レポーティングの頻度を制御します。
デフォルト: PROGRESS(200)
サブパラメータ
no-of-segments 進捗メッセージを表示する前に処理するセグメントの数を示す 0~9999 の値。0 を指定すると、進捗レポーティングは無効になります。
構文規則
  1. 指定するセグメント数はデフォルトの 200 より小さい値に減らさないことをお奨めします。値が非常に小さいとデータベース機能のパフォーマンスが少なからず低下します。
  2. 比較的高速なシステムの場合は、設定値を高くすると (例えば、1000 以上にすると)、パフォーマンスが多少向上することがあります。
一般規則
  1. 進捗メッセージには、処理されたセグメントの数、または全体のうち完了した割合 (%) と予想される残り時間が表示されます。

入力

Reorganize 関数に入力されるデータベース名は、DBDGEN を使用して定義された 1 次物理データベースでなければなりません。この DBD 名は、Load 関数によってサポートされるデータベースのタイプである必要があります。データベースの条件については、 Load Function の入力と出力のトピックを参照してください。

Reorganize は、Unload、Load、および PtrUpdate 関数を使用して、データベース・データ・ファイルの読み取りと更新を行います。

再編成の開始時に 2 次索引データベースが用意されている必要はありません。2 次索引データベースは、Load ステップ中に再作成されます。

Unload 関数は、論理子データベースのアンロード時には論理親データベースを必要としません。ただし、Reorganize は、Makelist を使用して、関連するデータベースごとに Unload ステップを作成します。Reorganize を開始する前に、論理的に関連するすべてのデータベースが使用可能である必要があります。

出力

セグメント・データを含むデータベース・アンロード作業ファイルは、このプロセス中に作成されます。これらのファイルは、DBD 名に .org 拡張子を付けた名前でプロジェクト・リスティング・ディレクトリー内に作成されます。参考までに、これらのファイルは LAYOUT(D) および COMPRESSION(CBLDC001) 指令を使用して作成された Unload ファイルです。Reorganize が正常に完了すると、これらのファイルは削除されます。

Runlist コマンド・ファイルは、 DBUREORG.RUN という名前で作成されます。このファイルには、再編成を実行するためのステップが含まれています。このファイルは常に現在のディレクトリーに配置され、正常な完了時には削除されません。独自の再編成スクリプトを作成する場合は、このファイルをモデルとして使用できます。このファイルは次の Reorganize 関数によって再作成されるため、新しい名前のファイルに必ずコピーしてください。不完全な再編成から回復するには、このファイルが必要になる場合があります。

処理の詳細

セグメントを削除すると、そのセグメントが占有していたスペースは、次に挿入された、そのセグメント以下の大きさのセグメントによって再利用されます。ただし、この削除されたスペースに適合する新しいセグメントが挿入されなかった場合、そのスペースはデータベースを再編成するまで再利用されません。また、データベースを更新すると、内部ポインターが断片化し、それによってパフォーマンスが低下する場合があります。再編成を行うと、そのパフォーマンスは新規にロードされたデータベースと同じレベルに回復します。

Reorganize 関数は、Load、Unload、PtrUpdate、および Delete 関数の機能を組み合わせて再編成を実行します。また、Reorganize 関数は、Makelist 関数の高度な機能を使用して、必要なステップを作成します。この Makelist 機能は、IMSDBU への呼び出し可能な API インターフェイスの使用時にのみ利用できます。Makelist のコマンド・ライン・インターフェイスは、データベースをロードするためのステップの作成だけをサポートしています。呼び出し可能なインターフェイスは、データベースを再編成するためのステップを作成する機能を追加します。

論理子がないデータベースの再編成では、単にデータベースが順次ファイルにアンロードされ、その順次ファイルを使用してデータベースがロードされます。

論理子が含まれているデータベースを再編成すると、そのデータベースだけでなく関連するデータベースもすべて再編成されます。これらのデータベースを再編成するためのステップは次のとおりです。

  1. 関連するデータベースをすべて特定する
  2. 各データベースを順次ファイルにアンロードする
  3. 各データベースを順次アンロードからロードする
  4. 論理子定義が含まれている各データベースに対して PtrUpdate を実行する
  5. ステップ 2 で作成された順次ファイルを削除する

関連するデータベースの特定は、Makelist によって行われます。Reorganize の場合、このリストを作成するために Makelist が使用するプロセスは Load の場合と同じです。

順次アンロード・ファイルは、すべての Load および PtrUpdate 処理が完了するまで削除されません。これにより、Load 後に順次アンロード・ファイルを削除するよりも多くのディスク・スペースが必要になりますが、後続の Load または PtrUpdate ステップが失敗した場合の再スタートが考慮されます。ディスク・スペースを節約する必要がある場合は、Delete コマンドを再順序付けして、Runlist を使用してそのコマンドを実行するように DBUREORG.RUN ファイルを変更することができます。また、独自の Runlist コマンド・ファイルを作成したり、必要な関数をオペレーティング・システムのコマンド・ファイルで実行したりすることもできます。

詳細レポート・ファイル名の *.LST を使用すると、再編成に関係するデータベースごとに個別のリスト・ファイルが作成されます。結合されたリスティングの場合は、 LIST(file-spec) および LISTOPEN(MOD) 指令を指定してください。

失敗回復

失敗した Reorganize 関数から回復する最も簡単な方法は、元のデータベース・データ・ファイルをバックアップ・コピーから復元することです。バックアップ・コピーがない場合は、再編成によって生成されたファイルを使用して回復を実行できます。失敗の発生には、いくつかの理由が考えられます。その一例は、ディスク・スペースの不足です。

失敗が発生した場合は、エラー・メッセージが発行され、プロセスは終了されます。順次ファイルのアンロードは維持されます。これらのファイルは、再編成を完了するために必要になる場合があります。

まず最初に、失敗の原因を特定し、その原因を修正します。再編成から発行されたエラー・メッセージは、詳細レポート・リスティングに書き込まれます。このメッセージでは、失敗の原因を特定できるだけの十分な情報が提供されるはずです。場合によっては、 によって失敗に関する追加情報が提供されます。 IMSMTO.LOG によって失敗に関する追加情報が提供されます。

IMSDBU アクティビティー・ログでは、成功したステップと失敗したステップがすべて示されます。失敗したステップが Unload だった場合は、データベースの回復は必要ありません。失敗の原因を修正してから、単に Reorganize 関数を再起動してください。

ログにリストされている関数を再編成コマンド・ファイル DBUREORG.RUN と比較して、コマンド・ファイル内のどのステップが失敗したかを特定します。テキスト・エディターを使用してコマンド・ファイルを変更し、正常に完了したステップをすべて削除またはコメント・アウトします。ステップをコメント・アウトするには、カラム 1 にアスタリスク (*) を入力します。変更したコマンド・ファイルと共に Runlist を使用して、再編成を完了してください。