Merge ユーティリティー

アプリケーションからキャプチャーされた SQL ステートメントで、単一のデータ・ソースに対して実行される SQL ステートメントを含む 2 つ以上の pureQueryXML ファイルをマージすることができます。入力 pureQueryXML ファイルで XML スキーマの妥当性検査を実行することができます。また、未使用の SQL ステートメントをマージされた出力ファイルから削除できます。

このトピックには以下のセクションが含まれています。

概説

pureQueryXML ファイルをマージするには、2 つの方法があります。

マージによって生成されるファイルで、ステートメント・セットを保持する必要がある場合は、pureQueryXML ファイルを基本ファイルとして使用します。 マージでは、他のファイルの SQL ステートメントは、pureQuery が結果ファイルの末尾に作成する、名前が指定されていないステートメント・セットになります。
例えば、capture.pdqxml という名前のファイルで、アプリケーションから SQL ステートメントをキャプチャーするとします。 手動でまたは Configure ユーティリティーを使用して、このファイルを変更し、ファイル内の SQL ステートメントをステートメント・セットに割り振ります。capture.pdqxml は、Merge ユーティリティーを使用する場合の基本ファイルになります。
推奨: pureQueryXML ファイルの編集はワークベンチを使用してのみ行うことを IBM® は強くお勧めします。 ワークベンチ以外で pureQueryXML ファイルを編集した場合には、ファイルが使用できなくなるリスクがあります。

ワークベンチ以外で pureQueryXML ファイルを編集する必要がある場合には、 編集対象のステートメント・セットの <statementSet> タグで、以下に示すように、 configureStatus 属性の値を REQUIRED に設定します。 configureStatus="REQUIRED" それから、そのファイルに対して構成ユーティリティーを実行します。

pureQueryXML ファイル内のステートメント・セットは、1 つの分離レベルのパッケージを作成するか、または 4 つの分離レベルごとに 1 つずつパッケージ を作成するかによって、1 つまたは 4 つの DB2® パッケージの基盤を形成する ステートメント・セットです。

Java アプリケーションの場合、Configure ユーティリティーがステートメント・セットに名前を付けることができるように Configure ユーティリティーを capture.pdqxml に対して実行します。 次に、このファイルのコピーをチームの他のメンバーに提供して、そのメンバーがステートメントを別の論理パスから同じアプリケーションに追加でキャプチャーできるようにします。 各メンバーは、それぞれのコピーを入力ファイルとして使用し、 そのファイルを pureQueryXml プロパティーの値として指定します。 また、各メンバーは、outputPureQueryXml プロパティーの値を、 キャプチャーする追加の SQL ステートメントを含めるファイルの名前に設定します。 これらのチーム・メンバーによって、出力ファイルが提供されます。このファイルに Merge ユーティリティーを実行して、マージ対象となるファイルの SQL ステートメントを含む新規ファイルを作成します。 新規ファイルを開くと、基本ファイル内にあったステートメント・セットがまだあることがわかります。 チーム・メンバーによって提供された出力ファイルの SQL ステートメントは、新規ファイルの末尾にある、名前が指定されていない新規ステートメント・セット内にあります。

2 つ以上の pureQueryXML ファイルを、基本ファイルとして指定せずにマージすることができます。

マージにより生成されたファイル内の SQL ステートメントは、Merge ユーティリティーによって、すべての pureQueryXML ファイルから名前が指定されていない単一のステートメント・セットに結合されます。

注: -baseFile オプションが指定されない場合、pureQueryXML ファイルのリストの先頭にあるファイルが基本ファイルとして使用されます。outputPureQueryXmlpureQueryXML の両方のプロパティーを指定して、追加の SQL ステートメントをキャプチャーするために作成された pureQueryXML ファイルを、基本ファイルとして使用することはできません。 これらのプロパティーが両方指定されている場合、outputPureQueryXml には、pureQueryXML プロパティーにより指定された pureQueryXML ファイルには出現しない、キャプチャーされた SQL ステートメントが含まれます。

マージ・プロセスに関する注意事項

以下のリストに、マージ処理に関する注記を示します。
  • ファイルをマージするときには、異なる属性を持つ同じ SQL ステートメントをファイルに含めることができます。以下のリストで、Merge ユーティリティーによる、異なる属性を持つ同一の SQL ステートメントの処理方法について説明します。この説明では、STMT_A および STMT_B が同一の SQL ステートメントであり、STMT_A が基本ファイルに含まれており、STMT_B が基本ファイルにマージされるファイルに含まれていると仮定しています。
    • parameterType 属性が STMT_A では SINGLE_ROW_PARAMETERS に設定されていて STMT_B では MULTI_ROW_PARAMETERS に設定されている場合、 または STMT_B の mriIndicator 属性が true に設定されている場合は、STMT_A の parameterType 属性が MULTI_ROW_PARAMETERS に設定されます。
    • allowStaticRowsetCursors 属性が STMT_A では false に設定され、同じ属性が STMT_B では true に設定されている場合、STMT_A の属性が true に設定されます。

      この属性は、STMT_A の値が既に true である場合、あるいは STMT_B の値が false または空ストリング ("") である場合は置き換えられません。

    • isBindable 属性が STMT_A では true に設定され、同じ属性が STMT_B では false に設定されている場合、STMT_A の属性が false に設定されます。
    • ステートメント STMT_A のカーソル名がユーザー定義のカーソル名でなく、 ステートメント STMT_B のカーソル名がユーザー定義のカーソル名である場合、STMT_A のカーソル名はユーザー定義のカーソル名で置き換えられます。 それ以外の場合は、カーソル名は置き換えられず、メッセージがログに記録されます。

      ユーザー定義のカーソル名がマージ・プロセス中に後から別の入力ファイル内に設定された場合、そのカーソル名は無視されます。

    • 属性 isSETUsedAfterConnectionInit は、STMT_A で false または NULL になっていても STMT_B で true に設定されている場合は true で置き換えられます。 それ以外の場合、この属性は変更されません。
    • 属性 executionCount の値は、STMT_A の Integer.MAX_VALUE 属性の値に設定されるか、 または STMT_A と STMT_B の executionCount の値の合計が Integer.MAX_VALUE の値より小さい場合は、その合計値に設定されます。
    • 属性 lastUsedTimestamp を STMT_A および STMT_B 内のそれより後の値に更新します。
    • 属性 firstUsedTimestamp を STMT_A および STMT_B 内のそれより前の値に更新します。
    • 属性 maxStmtExecutionTime を STMT_A および STMT_B 内のそれより大きい値に更新します。
    • 属性 maxBatchCount と属性 batchExecutionTime を STMT_A および STMT_B 内のそれより大きい値に更新します。
    以下の状態では、Merge ユーティリティーが属性変更をログに記録し、STMT_A の属性値は変更されません。
    • STMT_A の属性 parameterType が MULTI_ROW_PARAMETERS に設定されていて、STMT_B の属性 parameterType が SINGLE_ROW_PARAMETERS に設定されている場合。
    • 属性 allowStaticRowsetCursors が、STMT_A で true に設定されていて、STMT_B で false に設定されているか、または空ストリングである場合。
    • 属性 isBindable が STMT_A で false に設定されていて、STMT_B で true に設定されている場合。
    • 属性 cursorName に関して、STMT_A ではユーザー定義のカーソルがあり、STMT_B ではユーザー定義のカーソルがない場合。

    また、異なる pureQueryXML ファイル内にある 2 つのステートメントが、スタック・トレース項目以外のすべての点で同じである場合、マージの結果として生成されたファイル内では、異なる複数のスタック・トレース項目が結合されて単一のステートメントになります。

  • ファイルをマージするときには、特殊レジスターは以下のように処理されます。
    • STMT_B に特殊レジスター・ベクトル値があり、STMT_A には特殊レジスター・ベクトルがない場合は、STMT_A の 特殊レジスター属性 incrementalSpecialRegValuesUsed が、STMT_B で検出された値に設定されます。
    • STMT_A と STMT_B の両方に特殊レジスター・ベクトル値がある場合は、STMT_A の特殊レジスター・ベクトルが、 両方のステートメントで検出された組み合わせで置き換えられます。
  • 出力マージ・ファイルでは、基本ファイルおよびすべての入力ファイルについて以下のいずれかの記述が当てはまる 場合に、XML 属性 sqlLiteralSubstitution が NOT_SET に設定されます。
    • XML 属性 sqlLiteralSubstitution はファイル内にない。
    • XML 属性 sqlLiteralSubstitution の値が NOT_SET に設定されている。
    sqlLiteralSubstitution 属性は、どの入力ファイルにも含まれていない場合でもマージ出力ファイルに追加されます。
  • 出力マージ・ファイルでは、基本ファイルまたは 1 つ以上の入力ファイルで XML 属性 sqlLiteralSubstitution の 値が DISABLE または ENABLE に設定されている場合に、XML 属性 sqlLiteralSubstitution の 値が DISABLE または ENABLE に設定されます。

    Merge ユーティリティーは、マージ・ファイル内の値を、sqlLiteralSubstitution 属性の 値が DISABLE または ENABLE に設定されている最後の入力ファイルで指定された値に設定します。

    XML 属性 sqlLiteralSubstitution の値が 1 つ以上の入力ファイルで DISABLE に設定されていて、 その他の入力ファイルで ENABLE に設定されていると、このユーティリティーから警告メッセージが表示されます。

  • マージによって生成されたファイルに名前が指定されていないステートメント・セットが含まれている場合は、Configure ユーティリティーをそのファイルに対して実行してから、StaticBinder ユーティリティーを実行してください。
  • IBM では、ファイルのマージ後に Configure を実行して、マージの結果を StaticBinder ユーティリティーで使用できるようにすることを強く推奨します。

Merge コマンドの構文

構文図を読む構文図をスキップする
    (1)                                                       
>>-------java com.ibm.pdq.tools.Merge--+------------------+----->
                                       '- -baseFile--file-'   

                          .------.      
                          V      |      
>--+- -inputPureQueryXml----file-+--+--------------------------->
   '- -inputPureQueryXmlGroup--file-'   

>-- -outputPureQueryXml--file--+-----------------------+-------->
                               |                   (2) |   
                               '-| Trace options |-----'   

>--+--------------------------+--------------------------------->
   |                .-FALSE-. |   
   '- -showDetails--+-TRUE--+-'   

>--+--------------------------------------+--------------------->
   '- -removeSQLInactiveForDays----days---'   

>--+--------------------------+--+--------+--------------------><
   |                .-FALSE-. |  '- -help-'   
   '- -validateXml--+-TRUE--+-'               

注:
  1. オプションは任意の順序で指定できます。
  2. 構文については、以下のオプションの説明を参照してください。

ダイアグラムで使用される規則を理解するには、構文図の読み方を参照してください。

オプションの説明

-baseFile file
ステートメント・セットをすべて保持する場合に、Merge ユーティリティーによって作成されるファイル内に保持するステートメント・セットが含まれる pureQuery ファイルを指定します。 このファイルに対して、Merge ユーティリティーを実行する前に、Configure ユーティリティーを実行する必要があります。

一緒にマージするファイルのいずれかにある SQL ステートメントで位置指定更新を実行する際、位置指定更新のカーソルを宣言するステートメントが同じファイルにない場合は、Merge ユーティリティーによって、マージしようとしているファイル内のカーソル宣言が検索されます。

例えば、SQL ステートメントをクラスター Web アプリケーションからキャプチャーし、A、B、C の 3 つの pureQueryXML ファイルを生成したとします。マージ処理には、C ファイルを基本ファイルとして使用します。 A ファイルには、位置指定更新を実行する SQL ステートメント S1 が含まれます。ただし、A ファイルには、S1 が使用するカーソルを宣言する SQL ステートメント S2 が含まれていません。 そのため、Merge ユーティリティーによって、このカーソルを宣言する SQL ステートメントが B および C ファイル内で検索されます。 このようなステートメントがファイル B または C に存在しない場合、Merge ユーティリティーでは位置指定更新ステートメント S1 のマージは行われず、警告がログに記録されます。

基本ファイルを指定しない場合、マージにより生成されたファイル内の SQL ステートメントは、Merge ユーティリティーによって、すべての pureQueryXML ファイルから名前が指定されていない単一のステートメント・セットに結合されます。

注: 基本ファイルを指定しない場合、リストの先頭にある入力 pureQueryXML ファイルがデフォルトの基本ファイルとなります。outputPureQueryXmlpureQueryXML の両方のプロパティーを指定して、追加の SQL ステートメントをキャプチャーするために作成された pureQueryXML ファイルを、基本ファイルとして使用することはできません。 これらのプロパティーが両方指定されている場合、outputPureQueryXml には、pureQueryXML プロパティーにより指定された pureQueryXML ファイルには出現しない、キャプチャーされた SQL ステートメントが含まれます。
-inputPureQueryXml file
一緒にマージする、名前がスペースで区切られた pureQueryXML ファイルを指定します。 複数の絶対パスまたは相対パスを指定できます。 相対パスを指定する場合、そのパスはコマンドを実行するディレクトリーからの相対パスでなければなりません。
ファイルのパスまたは名前にスペースが含まれている場合は、ファイルの項目全体を引用符で囲みます。
-inputPureQueryXmlGroup file
一緒にマージする複数の pureQueryXML ファイルを指定します。 ファイルの拡張子は .grp でなければなりません。 ファイルの各行にファイル名を 1 つ指定して、絶対パスまたは相対パスをそれぞれ指定できます。 相対パスを指定する場合、そのパスはコマンドを実行するディレクトリーからの相対パスでなければなりません。
ファイルのパスまたは名前にスペースが含まれている場合は、ファイルの項目全体を引用符で囲む必要はありません。
-outputPureQueryXml file
Merge ユーティリティーを使用して、前のオプションで指定した pureQueryXML ファイルから作成する新規ファイルの名前を指定します。絶対パスまたは相対パスを指定できます。相対パスを指定する場合、そのパスはコマンドを実行するディレクトリーからの相対パスでなければなりません。
-removeSQLInactiveForDays days
ステートメントのタイム・スタンプの日付を基準として、それから後、どれだけの日数が経過したら未使用の SQL ステートメントを削除するかを指定します。 days 変数が 0 の場合、すべての SQL ステートメントが出力ファイルに書き込まれます。デフォルトの設定では、すべての SQL ステートメントが出力ファイルに書き込まれます。days 変数が正の数の場合、ステートメントの最終使用タイム・スタンプの日付が現在の日付から指定の日数以前のものである SQL ステートメントについては、Merge ユーティリティーの出力ファイルに書き込まれません。 days 変数が 1 である場合、タイム・スタンプが前日かそれより前の日付である SQL ステートメントは書き込まれません。

例えば、days 変数が 5 であり、現在日付が 11/25 (11 月 25 日) である場合、タイム・スタンプが 11/20 (11 月 20 日) かそれより前である SQL ステートメントは書き込まれません。

タイム・スタンプのない SQL ステートメントは、現在の日付を使用したタイム・スタンプ情報と共に出力ファイルに書き込まれます。例えば、前のバージョンの pureQueryXML ファイルが入力ファイルである場合、SQL ステートメントにはタイム・スタンプがありません。前のバージョンの pureQueryXML ファイル (バージョン 3 以前) では、このオプションは無視されます。すべての SQL ステートメントは現在の日付のタイム・スタンプを追加されて出力ファイルに書き込まれ、メッセージが表示されます。

ステートメント・セットの configureStatus が FINAL に設定されている場合、非アクティブである日数の基準を満たすステートメントは出力 pureQueryXML ファイルに書き込まれます。また、Merge ユーティリティーにより、該当ステートメントおよびそのステートメントを保持する理由を含むメッセージがログ・ファイルに書き込まれます。

メッセージは、出力 pureQueryXML ファイルに書き込まれない SQL ステートメントのログ・ファイルに書き込まれます。-showDetails オプションが true である場合、出力ファイルに書き込まれていないステートメントがすべて表示されます。

注: SQL ステートメントは出力 pureQueryXml ファイルに書き込まれませんが、以前ステートメント・セットからバインドされた DB2 パッケージからは削除されません。 これ以降、ステートメント・セットを使用するバインド操作では削除された SQL ステートメントのバインドは行われませんが、パッケージ内に空のセクションが残される場合があります。空のセクションを削除する方法には、pureQueryXML ファイルで -cleanConfigure オプションを指定して Configure ユーティリティーを使用する方法があります。次に StaticBinder ユーティリティーを使用して pureQueryXML ファイルからパッケージを作成してバインドします。
-showDetails TRUE|FALSE
Merge ユーティリティーで自身の動作のサマリーを表示するかどうかを指定します。
デフォルト値は FALSE です。
Trace options
メッセージのログを記録するファイルおよびログを記録する情報のレベルを指定できます。
構文図を読む構文図をスキップする
>>-+------------------------+--+---------------------------+---><
   '- -traceFile--file-name-'  |               .-OFF-----. |   
                               '- -traceLevel--+-ALL-----+-'   
                                               +-SEVERE--+     
                                               +-WARNING-+     
                                               +-INFO----+     
                                               +-CONFIG--+     
                                               +-FINE----+     
                                               +-FINER---+     
                                               '-FINEST--'     

-traceFile file-name
操作に関する情報のログを記録するために使用するファイルへの絶対パスまたは相対パスとファイル名を指定します。
ファイルが既に存在する場合には、pureQuery は、ファイルの既存の内容に新しいメッセージを追加します。デフォルトでは、項目は System.err に書き込まれます。
-traceLevel OFF|SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST|ALL
ログに記録する情報のタイプを指定します。 デフォルトのレベルは OFF です。ログ項目を書き込むファイルを指定せず、このオプションを OFF 以外の値に設定した場合、項目は System.err に書き込まれます。
-validateXml TRUE|FALSE
pureQueryXML スキーマを使用する入力 pureQueryXML ファイルに対して XML スキーマの妥当性検査を実行するかどうかを指定します。この値が TRUE の場合、妥当性検査が実行されます。値が FALSE であるか、このオプションが指定されていない場合は、妥当性検査は実行されません。デフォルト値は FALSE です。

pureQueryXML ファイルで XML スキーマの妥当性検査に失敗すると、マージ操作が失敗します。スキーマの妥当性検査の失敗を引き起こしたファイル名およびエラーが報告されます。それ以降のファイルの妥当性検査は行われません。最初の妥当性検査エラーおよびマージの失敗が報告されます。

現行リリースまたは前のバージョン (バージョン 4 または 3) の pureQueryXML ファイルについてのみ妥当性検査が実施されます。 それより前のバージョンの pureQueryXML が検出された場合、そのファイルについては妥当性検査が実行されません。

-help
サマリー使用情報を表示します。

フィードバック