パーティション表へのデータ・パーティションの追加

表の作成後、ALTER TABLE ステートメントを使用してパーティション表を変更することができます。 特に、ADD PARTITION 節を使用して、既存のパーティション表に新規データ・パーティションを追加することができます。

このタスクについて

データがデータ・パーティションに次第に追加されていく場合、データが外部ソースから一度に大量に入ってくるのではなく少しずつ入って来るような場合、またはデータを直接パーティション表に挿入またはロードしている場合には、データ・パーティションをアタッチするよりも、パーティション表にデータ・パーティションを追加する方が適しています。 具体的な例としては、1 月のデータのデータ・パーティションにデータを毎日ロードする、または、個々の行が継続して挿入されるような場合などです。

特定の表スペース場所に新しいデータ・パーティションを追加するには、ALTER TABLE ADD PARTITION ステートメントでオプションとして IN 節を追加します。

データ・パーティションの表スペース場所とは別の特定の表スペース場所に新しいデータ・パーティションのパーティション化索引を追加するには、ALTER TABLE ADD PARTITION ステートメントでパーティション・レベルの INDEX IN 節をオプションとして追加します。 INDEX IN オプションを指定しない場合、デフォルトでは、新しいデータ・パーティションのすべてのパーティション索引はデータ・パーティションと同じ表スペースに格納されます。 パーティション表にパーティション化索引が存在する場合、ADD PARTITION 節によって、新しいパーティション用の対応する空の索引パーティションが作成されます。 それぞれのパーティション索引に対して、新しい項目が SYSCAT.INDEXPARTITIONS カタログ・ビューに挿入されます。

データ・パーティションの表スペース場所とは別の特定の表スペース場所に、新しいデータ・パーティションの LONG、LOB、または XML データを追加するには、ALTER TABLE ADD PARTITION ステートメントでパーティション・レベルの LONG IN 節をオプションとして追加します。

ALTER TABLE ステートメントに ADD PARTITION 節を指定してパーティション表にデータ・パーティションを追加するときに、ターゲット・パーティション表はオンライン状態を維持し、この表に対して RS、CS、または UR 分離レベルで実行されている動的照会は、実行を継続します。

制約事項および使用ガイドライン
  • データ・パーティションを非パーティション表に追加することはできません。 既存のテーブルをパーティション テーブルに移行する方法の詳細については、 「既存のテーブルとビューをパーティション テーブルに移行する」 を参照してください。
  • それぞれの新規データ・パーティションごとの値の範囲は、STARTING 節と ENDING 節によって決まります。
  • STARTING 節および ENDING 節のいずれか、またはその両方を指定する必要があります。
  • 新規の範囲は、既存のデータ・パーティションの範囲とオーバーラップしてはなりません。
  • 最初の既存のデータ・パーティションの前に新規のデータ・パーティションを追加するときは、STARTING 節を指定する必要があります。 この範囲を際限なしにするには MINVALUE を使用します。
  • 同様に、最後の既存のデータ・パーティションの後に新規のデータ・パーティションを追加する場合は、ENDING 節を指定する必要があります。 この範囲を際限なしにするには MAXVALUE を使用します。
  • STARTING 節が省略される場合、データベースは、前のデータベース・パーティションの終了境界の直後に開始境界を作成します。 同様に、ENDING 節が省略される場合、データベースは、次のデータ・パーティションの開始境界直前に終了境界を作成します。
  • 開始節および終了節の構文は、CREATE TABLE ステートメントで指定するものと同じです。
  • ADD PARTITION に IN、INDEX IN、または LONG IN 節が指定されない場合、データ・パーティションを配置する表スペースは、CREATE TABLE ステートメントによって使用されるのと同じ方式を使用して選択されます。
  • パッケージは ALTER TABLE...ADD PARTITION 操作中は無効にされます。
  • 新しく追加されるデータ・パーティションは、ALTER TABLE ステートメントがコミットされた後、使用可能になります。
  • 表に非パーティション索引がある場合、その表に新しいデータ・パーティションを作成した追加操作またはアタッチ操作と同じトランザクションにおいてその表が排他モードでロックされていないと、そのトランザクションでその新しいパーティションにアクセスすることはできません (SQL0668N、理由コード 11)。
ADD 操作で STARTING または ENDING 境界を省略して範囲値のギャップを埋めることもできます。 以下は、開始境界のみが指定されている ADD 操作を使用してギャップを埋める例です。
CREATE TABLE hole (c1 int) PARTITION BY RANGE (c1)
(STARTING FROM 1 ENDING AT 10, STARTING FROM 20 ENDING AT 30);
DB20000I The SQL command completed successfully.
ALTER TABLE hole ADD PARTITION STARTING 15;
DB20000I The SQL command completed successfully.
SELECT SUBSTR(tabname, 1,12) tabname, 
SUBSTR(datapartitionname, 1, 12) datapartitionname,
seqno, SUBSTR(lowvalue, 1, 4) lowvalue, SUBSTR(highvalue, 1, 4) highvalue
FROM SYSCAT.DATAPARTITIONS WHERE TABNAME='HOLE' ORDER BY seqno;
TABNAME DATAPARTITIONNAME SEQNO LOWVALUE HIGHVALUE
------------ ----------------- ----------- -------- ---------
HOLE PART0 0 1 10 
HOLE PART2 1 15 20 
HOLE PART1 2 20 30 

3 record(s) selected.
例 1: 901 から 1000 の範囲の値を持つ既存のパーティション表にデータ・パーティションを追加します。 SALES 表が値 900 までの 9 つの範囲 (0 - 100、101 - 200 など) を保持しているとします。 この例では、表の最後に範囲を加えています (STARTING 節がないことでそれが示されています)。
ALTER TABLE sales ADD PARTITION dp10
ENDING AT 1000 INCLUSIVE

データ・パーティションの表スペース場所とは別の特定の表スペース場所に新しいデータ・パーティションのパーティション化索引を追加するには、ALTER TABLE ADD PARTITION ステートメントでパーティション・レベルの INDEX IN 節をオプションとして追加します。 INDEX IN オプションを指定しない場合、デフォルトでは、新しいデータ・パーティションのすべてのパーティション化索引はデータ・パーティションと同じ表スペースに格納されます。 パーティション表にパーティション化索引が存在する場合、ADD PARTITION によって、新しいパーティション用の対応する空の索引パーティションが作成されます。 それぞれのパーティション索引に対して、新しい項目が SYSCAT.INDEXPARTITIONS カタログ・ビューに挿入されます。

例 2: ロング・データと索引をデータ・パーティションの残りの部分から分離させて、既存のパーティション表にデータ・パーティションを追加します。
ALTER TABLE newbusiness ADD PARTITION IN tsnewdata
INDEX IN tsnewindex LONG IN tsnewlong