パーティションの追加
ALTER TABLE ステートメントを使用して、すべてのタイプのパーティション化表スペースにパーティションを追加できます。
このタスクについて
必要に応じてパーティションを追加できるため、パーティション化表スペースの作成時に、予想される拡張に備えて追加のパーティションを割り振る必要はありません。
パーティションは、任意のタイプのパーティション化表スペース内の任意の表の最終論理パーティションとして追加できます。
FL 500 テーブルの最後の論理パーティションとしてパーティションを追加すると、テーブルとテーブル上の各パーティション インデックスにパーティションが追加されることを指定します。 最後の論理パーティションとして追加されたパーティションは、常に即時の定義変更です。 パーティション・キーまたはパーティション索引が欠落しているために表スペース定義が不完全な場合は、パーティションを追加できません。 表が索引制御パーティションを使用している場合は、表制御パーティションを使用するように変換されます。 さらに、パーティションに未解決の保留中定義変更がある場合、表の最後にパーティションを追加することは許可されません。
範囲ごとの表スペースの表の場合、既存の論理パーティション間にパーティションを追加することもできます。 既存パーティション間へのパーティションの追加は、追加されたパーティション用のデータ・セットが既に定義されている場合は、保留中のデータ定義変更になります。 影響を受ける各パーティションは、再編成ペンディング通知 (AREOR) 状況になります。
- オプションの ALTER PARTITION が指定された ADD PARTITION ENDING を使用して、既存のパーティションの間に新規パーティションを追加する場合、ALTER PARTITION 文節に、追加するパーティションのすぐ次の論理パーティションを指定する必要があります。 ALTER PARTITION 文節に指定される最高限界キー値は、すぐ次の論理パーティションの既存の最高限界キー値でなければなりません。 新規パーティションを挿入するときに同じステートメントで最高限界キー値を変更することはできません。
- パーティションを同じ表内の既存のパーティションの間に追加する前に、最後の論理パーティションの最高限界キーに対する保留中の定義変更がマテリアライズされる必要があります。
- 表の既存のパーティションの間に新規パーティションが追加された後、新しく挿入されたパーティションが REORG 実行によってマテリアライズされるまで、同じ表内のどのパーティションに対する限界キーの変更も許可されません。
- パーティションは、LOB 列、または LOB データ・タイプに基づく特殊タイプの列を含む表には挿入できません。
- パーティションは、XML 列を含む表には挿入できません。
パーティションを追加すると、表スペースのパーティションの最大数に達するまで、Db2は常に、まだ使用されていない次の物理パーティションを使用します。
新しいパーティションが既存の論理パーティションの間に追加された場合でも、次の物理パーティションが使用されます。
Db2がユーザーのデータ・セットを管理する場合、次に使用可能なデータ・セットが表スペースおよび各パーティション索引ごとに割り振られます。 ユーザーが独自のデータ・セットを管理する場合は、パーティションを追加する前に、最初に表スペース用のデータ・セットとパーティション化索引を定義しておく必要があります。
マテリアライズ照会表のためのパーティションを追加または変更をすることもできません。
プロシージャー
パーティションを追加するには、以下の方法を使用します。
例
| 限界値 | 物理パーティション番号 | パーティションをバックアップするデータ・セット名 |
|---|---|---|
| 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 ステートメントを発行する必要があります。 カタログを調べて、継承された値を変更する必要があるかどうかを判断してください。
継承される各属性に使用されるソースは、新規パーティションの位置およびその他の要因によって異なります。 ただし、特定の例外がある場合は、以下の一般パターンが使用されます。
既存の論理パーティションの間に追加されるパーティションは、表スペースから大部分の属性値を継承します。 
- 新しい最後の論理パーティションとして追加されるパーティションは、前の最後の論理パーティションからほとんどの属性値を継承します。

例えば、新規パーティションのスペース属性を指定する場合、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文を発行して、これらのオブジェクトを作成する必要があります。