再同期の問題の解決

再同期操作のほとんどは成功しますが、オブジェクトがトラッキングの時間順で処理されたとしても、特定のオブジェクトに対する操作のシーケンスが失敗することがあります。

これらのケースのほとんどは、保管/復元の項目、または移動操作か名前変更操作、あるいはその両方に関係します。 このような場合には、ユーザー介入が必要です。

この例で、DATALIB は、常に複製に組み込まれるライブラリーです。 ライブラリー内の *FILE オブジェクトには特定の規則がないため、すべての適格なファイルが常に複製に組み込まれます。 TRACKING 状態の間に、1 次ノードに対して以下の操作が実行され、変更をトラッキングするために項目が OTL に追加されるとします。
  1. 表 DATALIB/SIMPLE1 を復元する (SIMPLE1 は、復元前には存在していませんでした)。
  2. SIMPLE1 に依存するビュー DATALIB/SIMPLE1V を作成する。
  3. 表 DATALIB/SIMPLE1 を SIMPLE2に名前変更します。

SIMPLE1 は存在しなくなったため、再同期が試行されると、保管/復元項目は処理されません。 1 次ノードまたは 2 次ノードでオブジェクトが見つからないため、保管/復元項目は据え置かれます。 CREATE VIEW が試行されるときも、SIMPLE1 が見つからないために失敗します。 最後に、SIMPLE1 が見つからないために名前変更操作も失敗します。 以下の図は、OTL に記録されるエラーを示しています。 エラーは、再同期ジョブ・ログ内で見つけることができ、問題の識別に役立つ追加情報が提供されます。

図 1. 失敗した再同期からの OTL エラー
失敗した再同期からの OTL エラー

再同期中に、障害が発生する前に、1 つ以上のオブジェクトが正常に復元される可能性があります。例えば、ここで説明する SIMPLE1V で検出された CPF3204 などです。 このような場合は、OTL に記録されたエラーを包含するオブジェクトの依存関係を含むすべてのオブジェクトに対して、この例で概説されているステップを実行する必要があります。

この特定のケースでは、名前変更された表、ビューに関連付けられたファイル、および 2 次ノードに複製されたオブジェクトの取得にのみ関係します。 この問題を最も効率的に解決するには、以下のステップを実行する必要があります。
  1. ファイルの古い名前 (SIMPLE1)、新規名 (SIMPLE2)、およびビュー名 (SIMPLE1V) を除外するように RCL を変更します。 これによって、これらのオブジェクトに対応する項目が OTL からすべて削除されます。 これは、 Db2® Mirror GUI を介して、または以下の手順を呼び出すことによって行うことができます。
    CALL QSYS2.ADD_REPLICATION_CRITERIA(INCLUSION_STATE => 'EXCLUDE',
                                        IASP_NAME       => '*SYSBAS',
                                        LIBRARY_NAME    => 'DATALIB',
                                        OBJECT_TYPE     => '*FILE',
                                        OBJECT_NAME     => 'SIMPLE1',
                                        APPLY           => 'PENDING',
                                        APPLY_LABEL     => 'FIXOTL');
    
    CALL QSYS2.ADD_REPLICATION_CRITERIA(INCLUSION_STATE => 'EXCLUDE',
                                        IASP_NAME       => '*SYSBAS',
                                        LIBRARY_NAME    => 'DATALIB',
                                        OBJECT_TYPE     => '*FILE',
                                        OBJECT_NAME     => 'SIMPLE2',
                                        APPLY           => 'PENDING',
                                        APPLY_LABEL     => 'FIXOTL');
    
    CALL QSYS2.ADD_REPLICATION_CRITERIA(INCLUSION_STATE => 'EXCLUDE',
                                        IASP_NAME       => '*SYSBAS',
                                        LIBRARY_NAME    => 'DATALIB',
                                        OBJECT_TYPE     => '*FILE',
                                        OBJECT_NAME     => 'SIMPLE1V',
                                        APPLY           => 'PENDING',
                                        APPLY_LABEL     => 'FIXOTL');
    
    CALL QSYS2.PROCESS_PENDING_REPLICATION_CRITERIA(IASP_NAME    => '*SYSBAS',
                                                    APPLY_ACTION => 'COMMIT',
                                                    APPLY_LABEL  => 'FIXOTL'); 
    
    この時点で、OTL を調べて、すべてのエラー項目が削除されたか据え置かれたことを確認できます。
  2. 複製から除外されたばかりのオブジェクトが 2 次ノードに存在する場合は、そのノードからそのオブジェクトを削除します。 オブジェクトを削除する前に、すべての従属オブジェクトも複製から除外して、カスケード削除がそれらの複製対象オブジェクトに影響を与えないようにしてください。
  3. これらのオブジェクトのエラー項目が OTL から除去され、すべてのオブジェクトが 2 次ノードからクリーンアップされたので、複製のために DATALIB 内のすべてのファイルを再度組み込むように RCL を変更します。 これは、 Db2 Mirror GUI を介して、または以下の手順を呼び出すことによって行うことができます。
    CALL QSYS2.REMOVE_REPLICATION_CRITERIA(IASP_NAME       => '*SYSBAS',
                                           LIBRARY_NAME    => 'DATALIB',
                                           OBJECT_TYPE     => '*FILE',
                                           OBJECT_NAME     => 'SIMPLE1V',
                                           APPLY           => 'PENDING',
                                           APPLY_LABEL     => 'FIXOTL');
    
    CALL QSYS2.REMOVE_REPLICATION_CRITERIA(IASP_NAME       => '*SYSBAS',
                                           LIBRARY_NAME    => 'DATALIB',
                                           OBJECT_TYPE     => '*FILE',
                                           OBJECT_NAME     => 'SIMPLE2',
                                           APPLY           => 'PENDING',
                                           APPLY_LABEL     => 'FIXOTL');
    
    CALL QSYS2.REMOVE_REPLICATION_CRITERIA(IASP_NAME       => '*SYSBAS',
                                           LIBRARY_NAME    => 'DATALIB',
                                           OBJECT_TYPE     => '*FILE',
                                           OBJECT_NAME     => 'SIMPLE1',
                                           APPLY           => 'PENDING',
                                           APPLY_LABEL     => 'FIXOTL');
    
    CALL QSYS2.PROCESS_PENDING_REPLICATION_CRITERIA(IASP_NAME    => '*SYSBAS',
                                                    APPLY_ACTION => 'COMMIT',
                                                    APPLY_LABEL  => 'FIXOTL'); 
    
  4. Db2 Mirror GUI から、または QSYS2.CHANGE_MIRROR プロシージャー。
    CALL QSYS2.CHANGE_MIRROR(IASP_NAME =>'*SYSBAS',
                             REPLICATION_STATE=> 'RESUME');

ファイル間の依存関係のために、特定の従属ファイルも組み込む必要がある可能性があります (少なくともパフォーマンスの観点からは、そうすることをお勧めします)。 例えば、COMPLEX1 という別の表が存在し、SIMPLE1 と COMPLEX1 の両方に関係する、固有キーが付けられた論理ファイル (LGLUNQ) も存在すると仮定します。 COMPLEX1 も同様に除外され、その後、再度 RCL に組み込まれるようにしないと、重複キー障害が発生する可能性があります。 重複キー・エラーが発生しないとしても、COMPLEX1 が同様に組み込まれていない場合は、LGLUNQ の索引の再作成が必要になります。