パーティションの追加

ALTER TABLE ステートメントを使用して、すべてのタイプのパーティション化表スペースにパーティションを追加できます。

このタスクについて

必要に応じてパーティションを追加できるため、パーティション化表スペースの作成時に、予想される拡張に備えて追加のパーティションを割り振る必要はありません。

パーティションは、任意のタイプのパーティション化表スペース内の任意の表の最終論理パーティションとして追加できます。

FL 500 テーブルの最後の論理パーティションとしてパーティションを追加すると、テーブルとテーブル上の各パーティション インデックスにパーティションが追加されることを指定します。 最後の論理パーティションとして追加されたパーティションは、常に即時の定義変更です。 パーティション・キーまたはパーティション索引が欠落しているために表スペース定義が不完全な場合は、パーティションを追加できません。 表が索引制御パーティションを使用している場合は、表制御パーティションを使用するように変換されます。 さらに、パーティションに未解決の保留中定義変更がある場合、表の最後にパーティションを追加することは許可されません。

変更の開始 範囲ごとの表スペースの表の場合、既存の論理パーティション間にパーティションを追加することもできます。 既存パーティション間へのパーティションの追加は、追加されたパーティション用のデータ・セットが既に定義されている場合は、保留中のデータ定義変更になります。 影響を受ける各パーティションは、再編成ペンディング通知 (AREOR) 状況になります。変更の終わり

FL 500 既存の論理パーティション間のパーティションの追加は、範囲によるパーティション表スペースに対してのみサポートされます。 既存のパーティションの間に新規パーティションを挿入する場合、以下の規則が適用されます。
  • オプションの ALTER PARTITION が指定された ADD PARTITION ENDING を使用して、既存のパーティションの間に新規パーティションを追加する場合、ALTER PARTITION 文節に、追加するパーティションのすぐ次の論理パーティションを指定する必要があります。 ALTER PARTITION 文節に指定される最高限界キー値は、すぐ次の論理パーティションの既存の最高限界キー値でなければなりません。 新規パーティションを挿入するときに同じステートメントで最高限界キー値を変更することはできません。
  • パーティションを同じ表内の既存のパーティションの間に追加する前に、最後の論理パーティションの最高限界キーに対する保留中の定義変更がマテリアライズされる必要があります。
  • 表の既存のパーティションの間に新規パーティションが追加された後、新しく挿入されたパーティションが REORG 実行によってマテリアライズされるまで、同じ表内のどのパーティションに対する限界キーの変更も許可されません。
  • パーティションは、LOB 列、または LOB データ・タイプに基づく特殊タイプの列を含む表には挿入できません。
  • パーティションは、XML 列を含む表には挿入できません。

パーティションを追加すると、表スペースのパーティションの最大数に達するまで、Db2は常に、まだ使用されていない次の物理パーティションを使用します。 変更の開始新しいパーティションが既存の論理パーティションの間に追加された場合でも、次の物理パーティションが使用されます。変更の終わり

Db2がユーザーのデータ・セットを管理する場合、次に使用可能なデータ・セットが表スペースおよび各パーティション索引ごとに割り振られます。 ユーザーが独自のデータ・セットを管理する場合は、パーティションを追加する前に、最初に表スペース用のデータ・セットとパーティション化索引を定義しておく必要があります。

マテリアライズ照会表のためのパーティションを追加または変更をすることもできません。

プロシージャー

変更の開始パーティションを追加するには、以下の方法を使用します。変更の終わり

  • ALTER TABLE ステートメントを発行して、既存の最終論理パーティションの後にパーティションを追加します。 ADD PARTITION 節で、最終論理パーティションの既存の限界を超える ENDING AT 値を指定します。

    ほとんどの場合、ALTER文の実行完了後、すぐに新しいパーティションを使用することができます。 この場合、このパーティションは、以前に使用されていなかった高範囲値を拡張するので、再編成ペンディング (REORP) 状況にはされません。

    変更の開始ただし、大規模なテーブルスペース以外の場合は、最後のパーティション境界が以前に強制されていなかったため、REORPステータスに置かれます。 非大規模テーブルスペースでは、4バイトの行識別子(RID)が使用され、最大サイズは64GBに制限されています。 非大規模テーブルスペースの詳細については、 Db2 for z/OS の「テーブルスペースの種類と特性 」を参照してください。変更の終わり

  • 変更の開始 以下の手順に従って、既存の論理パーティションの間にパーティションを追加します。
    1. 既存のパーティション限界の中間の ENDING AT 値を指定した ADD PARTITION 節を使用して、ALTER TABLE ステートメントを発行します。
      この方式は、範囲ごとの表スペースでのみサポートされます。
      既存のパーティションの間へのパーティションの追加は、追加されるパーティション用のデータ・セットが既に存在する場合は、保留中のデータ定義変更になります。 新しいパーティションの範囲を以前に含んでいた既存の論理パーティションも、再編成ペンディング通知 (AREOR) 状況になります。
    2. 以下のいずれかのアクションを取って、保留中のデータ定義変更を解決します。
      • 新しく追加されたパーティションおよび影響を受ける隣接のパーティションを含めて、影響を受けるパーティションごとに、パーティション・レベルの REORG を実行します。 影響を受けたパーティションは、SYSIBM.SYSPENDINGDDL カタログ表で、ALTER TABLE ステートメントの実行時に挿入された行を照会することによって特定できます。 REORG_SCOPE_LOWPART 列と REORG_SCOPE_HIGHPART 列は、影響を受けたパーティションの既存の境界を示します。
      • 表スペース・レベルの REORG を実行して、SCOPE PENDING オプションを指定します。
    変更の終わり

汎用プログラミングインターフェース情報の開始。例えば、TRANSという名前のトランザクション・テーブルが含まれている表スペースを考えてみます。 この表は、10 個のパーティションに分割されており、各パーティションには 1 年分のデータが入っています。 パーティショニングはトランザクション日付に基づいて定義され、限界キー値は各年末です。 以下の表は、表スペースの表示形式を示しています。
表 1. 10 個のパーティションがある表スペースの例
限界値 物理パーティション番号 パーティションをバックアップするデータ・セット名
12/31/2010 1 猫名.DSNDB xデータベース名psname.I0001.A001
12/31/2011 2 猫名.DSNDB xデータベース名psname.I0001.A002
12/31/2013 3 猫名.DSNDB xデータベース名psname.I0001.A003
12/31/2013 4 猫名.DSNDB xデータベース名psname.I0001.A004
12/31/2014 5 猫名.DSNDB xデータベース名psname.I0001.A005
12/31/2015 6 猫名.DSNDB xデータベース名psname.I0001.A006
12/31/2016 7 猫名.DSNDB xデータベース名psname.I0001.A007
12/31/2017 8 猫名.DSNDB x.db.ps名.I0001.A008
12/31/2018 9 猫名.DSNDB xデータベース名psname.I0001.A009
12/31/2019 10 猫名.DSNDB xデータベース名psname.I0001.A010
例 1: 最終論理パーティションの後にパーティションを追加

翌年のパーティションを追加するには、次のステートメントを発行します。

ALTER TABLE TRANS ADD PARTITION ENDING AT ('12/31/2020');

汎用プログラミングインターフェース情報の終了。

次の表は、2020 年用のパーティションが追加された後の表スペースの代表的な抜粋を示しています。

表 2. 追加されたパーティション 11 を示す、表スペースの抜粋
限界値 物理パーティション番号 パーティションをバックアップするデータ・セット名
12/31/2018 9 猫名.DSNDB xデータベース名psname.I0001.A009
12/31/2019 10 猫名.DSNDB xデータベース名psname.I0001.A010
12/31/2020 11 猫名.DSNDB xデータベース名psname.I0001.A011
変更の開始例 2: 既存の論理パーティションの間へのパーティションの追加変更の終わり
変更の開始次のステートメントは、2020 年の前半用の新規パーティションを、前の例からの TRANS 表に追加します。
ALTER TABLE TRANS 
ADD PARTITION ENDING AT ('06/30/2020');
表 3. 追加されたパーティション 12 を示す、表スペースの抜粋
限界値 物理パーティション番号 パーティションをバックアップするデータ・セット名
12/31/2018 9 猫名.DSNDB xデータベース名psname.I0001.A009
12/31/2019 10 猫名.DSNDB xデータベース名psname.I0001.A010
06/30/2020 12 猫名.DSNDB xデータベース名psname.I0001.A012
12/31/2020 11 猫名.DSNDB xデータベース名psname.I0001.A011

次の表は、前の例のどちらかのステートメントによって 2020 年の前半用のパーティションが追加された後の表スペースの代表的な抜粋を示しています。 このパーティションは既存のパーティション 10 と 11 の間に論理的に追加されていますが、これはパーティション 12 であり、次に使用可能な物理パーティションであることに注意してください。

オプションで、新規パーティションの後に続く既存のパーティションを明示的に参照する、ALTER PARTITION 節を指定することもできます。 ただし、ALTER PARTITION 節では、既存の限界値を指定する必要があります。 例えば、次のステートメントは、前の例と同じ結果になります。

ALTER TABLE TRANS 
ADD PARTITION ENDING AT ('06/30/2020')
ALTER PARTITION 11 ENDING AT ('12/31/2020'); 
変更の終わり
汎用プログラミングインターフェース情報の終了。

次の作業

パーティションを追加した後で、以下のいずれかのアクションを実行することが必要になる場合があります。

追加されたパーティションの属性の変更
追加された区画の属性を変更する必要がある可能性があります。 新規パーティションの属性は、継承または計算されます。 新規パーティションの特定の属性を変更する必要がある場合は、パーティションを追加した後で、別個の ALTER TABLESPACE ステートメントと ALTER INDEX ステートメントを発行する必要があります。 カタログを調べて、継承された値を変更する必要があるかどうかを判断してください。
変更の開始 継承される各属性に使用されるソースは、新規パーティションの位置およびその他の要因によって異なります。 ただし、特定の例外がある場合は、以下の一般パターンが使用されます。
  • 変更の開始既存の論理パーティションの間に追加されるパーティションは、表スペースから大部分の属性値を継承します。 変更の終わり
  • 新しい最後の論理パーティションとして追加されるパーティションは、前の最後の論理パーティションからほとんどの属性値を継承します。
詳しい方法については Db2 追加されたパーティションの属性を決定します。 Db2 追加されたパーティションの属性を決定する方法」を参照してください。変更の終わり

汎用プログラミングインターフェース情報の開始。例えば、新規パーティションのスペース属性を指定する場合、ALTER TABLESPACE ステートメントおよび ALTER INDEX ステートメントを使用します。 例えば、新規パーティションが表スペースおよび索引用の PARTITION 11 であるとします。 PRIQTY、SECQTY、FREEPAGE および PCTFREE 属性の数量を指定するには、以下のステートメントを発行します。

ALTER TABLESPACE tsname ALTER PARTITION 11
   USING STOGROUP stogroup-name 
    PRIQTY 200 SECQTY 200
    FREEPAGE 20 PCTFREE 10;

ALTER INDEX index-name ALTER PARTITION 11
   USING STOGROUP stogroup-name 
    PRIQTY 100 SECQTY 100
    FREEPAGE 25 PCTFREE 5;

汎用プログラミングインターフェース情報の終了。

LOB 列の補助オブジェクトの作成

パーティショニングされたテーブルでは、ベーステーブルの各パーティションに、LOBカラムごとに個別のLOBテーブルスペース、補助テーブル、補助インデックスが必要です。

Db2 テーブルまたはパーティション内の各LOBカラムに対して、LOBテーブルスペース、補助テーブル、および補助テーブル上のインデックスを暗黙的に作成することがあります。 詳細は、「LOBテーブルスペースの暗黙的な作成 」を参照してください。

Db2 がLOBテーブルスペース、補助テーブル、および補助テーブル上のインデックスを暗黙的に作成しない場合は、CREATE TABLESPACE、CREATE AUXILIARY TABLE、およびCREATE INDEX文を発行して、これらのオブジェクトを作成する必要があります。