本番キーの割当
キー割当ステップで、主キーがシステム生成のランダムなキーを必要とする表の各レガシー・キーに、新しいキーが割り当てられます。変換プロセスでは、システムのパラレル処理およびデータ・クラスタリング技法を本番システムで利用するために新しい主キーを割り当てます(これらの技法は、ランダムに割り当てられるクラスタ・キーによって決まります)。
この項のトピックでは、キー割当プロセスの概要を説明し、本番キーをステージング・データに割り当てるために使用されるバックグラウンド・プロセスを説明します。
旧キー / 新キー表
主キーの上書きは非常にコストの高いIOトランザクションであるため、ステージング・データベースの行の主キーは上書きされないことを理解してください。むしろ、行が本番データベースに転送されるとき、各行の旧キーと、その行に割り当てられる新キーを保持する一連の表が存在します。これらの表を「旧キー/新キー」表と呼びます。
規則の<所有者フラグの最初の文字>K_<table_name>を使用して、旧キー / 新キー表名を示します。たとえば、CI_ACCTの旧キー/新キー表の名前はCK_ACCTです。
行を本番データベースに転送する挿入バッチ・プロセスでは、キーのメイン・レコードとこのキーが外部キーの他のレコードに、新キーを使用します。同様に、XML解決プロセスでは、XML格納フィールドに存在する変換外部キーを解決し、これらの表の対応する新キーと置換します。
表ごとのバッチ・プロセス
キー割当バッチ・プロセスは、システム生成キーがあり、変換に適格なメンテナンス・オブジェクトに属する各表に用意されています。バッチ・プロセスは対応する旧キー / 新キー表に移入します(つまり、ユーザーがこれらの表に移入する必要はありません)。これらのプロセスはシングル・スレッドです。詳細は、表の対応するキー割当バッチ・プロセスを参照してください。
キー割当依存関係
システム生成のキーがある表のほとんどは、別の表のキーからキーの一部を継承しません。それらの対応するキー割当バッチ・プロセスには依存関係がないため、任意の順序で実行できます。
一部の表は、別の表のキーからキーの一部を継承します。そのような表のキー割当バッチ・プロセスは、キーの継承順に実行する必要があります。つまり、依存先のエンティティにキーを生成するプロセスの後に、表のキー割当プロセスを実行する必要があります。「変換エンティティ・ダッシュボード」ポータルには、変換エンティティについてキーの継承の依存関係情報(存在する場合)が表示されます。
キーの継承に関して依存していないかぎり、複数のキー割当バッチ・プロセスをパラレルで実行できます。
反復変換
実装によっては、ビッグ・バン変換(一度にすべてのエンティティのレコードを移入する変換)を実行するのではなく、その実装のエンティティ・ベースのサブセットに対して実行できる場合があります。実装がこれに当てはまる場合、新キー値が割り当てられる前に、本番データベースの既存の主キーが考慮されることに注意してください。つまり、次のサブセットの顧客を変換するとき、必ずクリーンで一意のキーを取得できます。
キー割当ロジックでは、1から始まるシーケンス行番号を操作してキーの初期値が作成されます。ある変換の実行後、後続の変換の実行ではその行番号が再び1から始まるため、重複キーが割り当てられる可能性が高くなります。キー割当バッチ・プロセスでは、その行番号の開始値を指定できます。このパラメータの目的は、行番号の値を指定された値ずつ増やし、重複キーが割り当てられる可能性を最小限に抑えることです。このパラメータは、本番データベースの表にデータがすでに存在する変換を実行する場合のみ使用します。
実行タイプ
キー割当は2つのステップで実行されます。
- 初期キー生成。ステージング表の行に新キーが割り当てられます(つまり、それぞれの旧キー / 新キー表に移入されます)。
- 重複キー解決。本番と比較して重複しているキーが再割当されます。
デフォルトでは、両方のステップが同じ実行で実行されますが、バッチ・パラメータを介して実行するステップを示すことでそれらを別々に実行できます。このパラメータを適切に使用すると、「キー生成を高速化するための推奨事項」の項で説明するように、キー割当ステップは大幅に高速化されます。
キー生成を高速化するための推奨事項
キー生成プログラムの実行を高速化する方法は、次のとおりです。
- クラウド以外のインストール環境の場合:
- ロールバック・セグメントのサイズを大きくします。正確なサイズは、変換対象の行数によって決まります。調査によると、700万行の処理からおよそ3GBのロールバック情報が生成されることがわかっています。
- ロールバック・セグメントを約10GBに設定して最大サイズ20GBまで自動拡張するようにし、最高水位標を決定します
- 約100Mの次のエクステント値を使用します。
- すべての小さいロールバック・セグメントを必ず無効にします(無効にしない場合、Oracleでは、前述の大きいロールバック・セグメントではなく、小さいロールバック・セグメントを使用します)。
- キー割当プログラムの実行後に、次の方法で領域を再要求できます。
- ロールバック用の最小エクステント・パラメータを小さい値にしておきます。
- 大規模バッチ・ジョブの最後に、ロールバック・セグメントおよび基礎となるデータ・ファイルを縮小します。
- ロールバック・セグメントのサイズを大きくします。正確なサイズは、変換対象の行数によって決まります。調査によると、700万行の処理からおよそ3GBのロールバック情報が生成されることがわかっています。
- 表サイズが50%増加するたびに、旧キー / 新キー表について統計を計算します。キー生成は、一部の表とそのキー間の継承依存性のため、層またはステップで実行されます。現在処理されている継承依存関係層のキー生成はセットベースのSQLを使用して実行されますが、層間の統計の計算により、前の層の生成実行から継承されるキーへの最適なアクセス・パスをデータベースで計算できます。
- 「実行タイプ」バッチ・パラメータの最適な使用。
- キー割当の前に、旧キー / 新キー表の旧キーのF1_CX_ID索引と新キーのCI_ID索引の両方を使用禁止に変更します。
- 層ですべてのキー割当バッチ・プロセスを実行し、各ジョブを発行して初期キー生成ステップのみを実行します。
- 旧キー / 新キー表の索引を再作成します。PARALLELパラメータとNOLOGGINGパラメータの両方を使用して索引を再作成すると、索引作成プロセスが高速化されます。これらの索引の統計が計算されます。
- 前に初期キー生成モードで実行された現在の層のすべてのキー割当バッチ・プロセスを実行し、重複キー解決ステップを実行します。これにより、すべての重複キーが再割当されます。