Reorganize 関数

単一のデータベースまたは論理的に関連する複数のデータベースのセットを再編成するためのシンプルなメカニズムを提供します。

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 重大エラー - 起こりうる一時的な状態 一時的な入出力エラー (「file locked」または「database locked」状態など)
16 重大エラー - 永続的 - インストールの問題の可能性 永続的な入出力エラー (無効なデータ セット名やメンバー名がユーティリティに入力された場合や、環境変数が正しく設定されていない場合など)
20 重大エラー - 永続的 回復不能な入出力エラーまたは他の予期しないエラー
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]
    PROGRESS(1000)
    ;use local log
    LOG(C:\MYDIR\MYDB.LOG)
LIST
詳細リスティング ファイルの場所および名前を制御します。リスティング ファイルには、ソース リスティング、完了状態、エラー メッセージ、実行統計などの項目が含まれます。
デフォルト: LIST(*.LST)
サブパラメーター
filespec リスティング ファイルに使用する名前および場所。
構文規則
  1. filespec には、必要に応じてドライブまたはディレクトリ (あるいはその両方) を含められます。ドライブやディレクトリを指定しない場合、IMDBU は現在のディレクトリにリスティング ファイルを作成します。
  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 関数」を参照してください。

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

再編成の開始時に 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 を使用して、再編成を完了してください。