LOAD ユーティリティーを使用して、パーティション表スペースの 1 つ以上のパーティションをロードすることができます。 複数のパーティションのロード時のパフォーマンスを向上させる場合は、パーティション並列処理を有効にすることを検討してください。
このタスクについて
パーティションの並列処理によって、大量のデータをパーティション表スペースにロードする際に要する経過時間を削減できます。
DEFINE NO を指定して作成したパーティション表スペースをロードしている場合には、ロード操作の時間が長くなる可能性があります。 パーティション化表スペースが DEFINE NOで作成された場合、 DEFINE NOを指定してすべての区画も暗黙的に定義されます。 LOAD ユーティリティーによって挿入される最初のデータ行は、パーティション表スペース内のすべてのデータ・セットを定義します。 この処理に長時間かかる場合は、データベース記述子 (DBD) でタイムアウトになる場合があります。
制限事項 :パーティション型成長型テーブルスペースのパーティションレベルではデータをロードできません。
プロシージャー
パーティションをロードするには、以下のようにします。
- パーティション表の特定のパーティションのみをロードする場合は、INTO TABLE オプションの PART 文節を使用します。 PART 文節を省略すると、表全体がロードされます。
制限: ID 列には次の制限があります。
- 索引ベースのパーティションを使用する場合、ID 列がパーティションを分けている索引の一部である場合
は、LOAD INTO TABLE PART integer は認められません。
- 表ベースのパーティショニングが使用されている場合、CREATE TABLE または ALTER TABLE ステートメントの
パーティショニング文節で ID 列が使用されている場合は LOAD INTO TABLE PART integer は
許可されません。
これらの制限をオーバーライドするには、LOAD ステートメント内で OVERRIDE(IDENTITY) オプションを指定します。
- パーティションを並列に処理する場合は、以下のいずれかのアクションを実行します。
- 1 つの入力データ・セットがあり、パーティション化表スペースがパーティション化 (非 UTS) または範囲内でパーティションである場合は、 PARALLEL キーワードを指定します。 このキーワードを使用すると、LOAD 時に複数の並列サブタスクを使用できます。 PARALLEL キーワードに指定する並列処理の度合いを決める際には、並列処理の度合いを高くするとプロセッサー時間が長くなる可能性があることを考慮してください。
推奨: PARALLEL(0)または数字なしのPARALLELを指定して、 Db2 最適な並列処理の度合いを決定できるようにします。
パーティション表スペースに 1 つ以上の非パーティション化副次索引が存在し、パーティションごとに別々の入力データ・セットがある場合は、ロード・パーティションの並列処理を使用します。 パーティションの並列処理では、単一のジョブですべてのパーティションがロードされます。 パーティションの並列処理を呼び出すには、ロードするパーティションごとに、以下のいずれかのキーワードを使用して INTO TABLE PART 文節を指定します。
- INDDN
- INCURSOR
- DISCARDDN (DISCARDS n が指定されている場合)
DEFINE NO を指定して表スペースを作成した場合、LOAD ステートメントに SHRLEVEL CHANGE を指定し、パーティションの並列処理を使用可能にすることは、独立した挿入ジョブを並行して実行することと等価です。 例えば、DEFINE NO を指定して大きなパーティション表スペースを作成した場合、LOAD ユーティリティーはそこで 3 つのタスクを開始します。 最初のタスクは第 1 行の挿入であり、これで DBD への更新が起こります。 あとの 2 つのタスクでは、DBD へのアクセスを待つ間にタイムアウトが起こります。 最初のタスクは、表スペースでのデータ・セット定義が行われている間、DBD を
ロックすることになります。

- 索引がパーティション化索引のみである場合は、個々のパーティションに対して複数のジョブを使用して LOAD を並行して実行します。 この方式では、パーティションごとに別々の入力データ・セットも必要になります。
- INTO TABLE PART 文節を使用する場合は、以下の該当するアクションを実行します。
- REPLACE または RESUME オプションを指定する場合は、パーティション別に個々に指定します。 INTO TABLE PART 文節の前にこれらのオプションを指定すると、LOAD は表スペース全体に関するロード操作をシリアライズし、パーティションを並列処理しません。
- CREATE TABLE ステートメントのときと異なる列順序で列をロードするには、INTO TABLE PART 文節ごとにフィールド仕様をコーディングします。
- ユーティリティー・ステートメントの適切な場所で LOAD オプションを指定しているか確認します。 一部の LOAD オプション (INDDN、DISCARDDN、RESUME、および REPLACE など) は、LOAD ステートメント内の配置によって有効範囲が異なる場合があります。 例えば、INDDN を INTO TABLE の前に指定した場合、指定された入力データ・セットは表全体をロードするために使用されます。 しかし、INDDN を PART 文節内で INTO TABLE の後に指定すると、指定された入力データ・セットは指定されたパーティションだけをロードするために使用されます。
- Db2 にロードされていないレコードのコピーを保存したい場合は、DISCARDDNオプションを使用して、以下のように破棄データセットを指定します。
- すべてのパーティション用に単一の廃棄データ・セットが必要な場合は、DISCARDDN を INTO TABLE の前に指定します。 このデータセットにテンプレートを使用し、TEMPLATE ユーティリティ文に変数 $PA が含まれている場合。 または$PART.、 その変数は、最初の INTO TABLE PART 節で 0 またはパーティション番号に置き換えられます。
- 1 つのパーティション用に 1 つの廃棄データ・セットが必要な場合は、DISCARDDN を INTO TABLE PART 文節内で指定します。 このデータセットにテンプレートを使用し、TEMPLATE ユーティリティ文に変数 $PA が含まれている場合。 または$PART.、 その変数はパーティション番号に置き換えられます。 DISCARDDN を複数の INTO TABLE PART 文節内で指定する場合は、各データ・セット名が固有であることを確認してください。 固有の名前を確保する一つの方法は、テンプレートと変数 $PA を使用することです。 または$PART。 TEMPLATE文で。
例
- 特定のレコードを特定のパーティション内にロードする例
- 下の例の制御ステートメントは、
DB2 が従業員表の最初のパーティションと 2 番目のパーティションに
データをロードするよう指定しています。 列 1 に '0' を持つレコードがパーティション 1 の内容と置き換わります。
列 1 に '1' を持つレコードがパーティション 2 に追加されます。
それ以外のレコードは無視されます。 この例の制御ステートメントは、要点を示すために単純化してあり、
表の列全部のフィールド指定は示していません。
LOAD DATA CONTINUEIF(72:72)='X'
INTO TABLE DSN8C10.EMP PART 1 REPLACE WHEN (1) = '0'
( EMPNO POSITION (1:6) CHAR(6),
FIRSTNME POSITION (7:18) CHAR(12),
...
)
INTO TABLE DSN8C10.EMP PART 2 RESUME YES WHEN (1) = '1'
( EMPNO POSITION (1:6) CHAR(6),
FIRSTNME POSITION (7:18) CHAR(12),
...
)
- パーティションを別個の入力データ・セットからロードする例
- 次の例の LOAD ステートメントは、EMP 表のパーティション 1 および 2 が EMPLDS1 および EMPLDS2 データ・セットからロードされるように指定します。 この例では、別個の入力データ・セットにデータが入っており、パーティション別に既にソートされていることを想定しています。 そのため、INTO TABLE の WHEN 文節
を使用する必要はありません。 PART オプションの前に置かれた RESUME YES オプションによって、パーティションの並列処理が禁止されます。 LOAD に他のパーティションを並列処理させる場合は、PART オプションの後に RESUME オプションを指定します。
LOAD DATA INDDN EMPLDS1 CONTINUEIF(72:72)='X'
RESUME YES
INTO TABLE DSN8C10.EMP REPLACE PART 1
LOAD DATA INDDN EMPLDS2 CONTINUEIF(72:72)='X'
RESUME YES
INTO TABLE DSN8C10.EMP REPLACE PART 2
- パーティションを独立してロードする例
- 次の例では、パーティション 1 とパーティション 2 が並列にロードされます。
LOAD DATA INDDN SYSREC LOG NO
INTO TABLE DSN8C10.EMP PART 1 REPLACE
LOAD DATA INDDN SYSREC2 LOG NO
INTO TABLE DSN8C10.EMP PART 2 REPLACE
- パーティションごとに別々の廃棄データ・セットを指定する例
- 複数の廃棄データ・セットを指定する場合は、各データ・セット名が固有であることを確認してください。 次の例では、LOAD ステートメントは 2 つ (パーティションごとに 1 つ) の廃棄データ・セットを割り振ることを指定しています。 それらの廃棄データ・セットは、どちらも DT テンプレートを使用します。 DT用のTEMPLATEステートメントには、&PAが含まれます。 変数(パーティション番号)を使用して、各パーティションでデータセット名が異なるようにします。
TEMPLATE DT UNIT(SYSDA)
DSN(JUOSU339.&TS..P&PA..DISCARD)
SPACE(50,10) TRK
LOAD DATA
INTO TABLE DSN8B10.EMP PART 1 INDDN D1 DISCARDDN(DT) REPLACE NO RESUME
INTO TABLE DSN8B10.EMP PART 2 INDDN D2 DISCARDDN(DT) REPLACE NO RESUME