すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ALTER TABLE...ADD PARTITION

最終更新日:May 27, 2024

ALTER TABLE...ADD PARTITIONコマンドは、既存のパーティションテーブルにパーティションを追加します。

概要

ALTER TABLE...ADD PARTITIONコマンドを使用して、既存のパーティションテーブルにパーティションを追加できます。 構文:
ALTER TABLE table_name ADD PARTITION partition_definition;
partition_definitionは
{list_partition | range_partition}
です。
list_partitionは次のとおりです。
PARTITION [partition_name]
  VALUES (value[, value]...)
  [ TABLESPACE [=] tablespace_name ]
  [(サブパーティション, ...)] 
range_partitionは次のとおりです。
PARTITION [partition_name]
  VALUES LESS THAN (value[, value]...)
  [ TABLESPACE [=] tablespace_name ]
  [(サブパーティション, ...)] 
サブパーティションは
{list_subpartition | range_subpartition}
です。
list_subpartitionは次のとおりです。
SUBPARTITION [subpartition_name]
  VALUES (value[, value]...)
  [TABLESPACE tablespace_name] 
range_subpartitionは次のとおりです。
SUBPARTITION [subpartition_name]
  VALUES LESS THAN (value[, value]...)
  [TABLESPACE tablespace_name] 

説明

ALTER TABLE...ADD PARTITIONコマンドは、既存のパーティションテーブルにパーティションを追加します。 パーティションテーブルに定義されているパーティションの数に制限はありません。

新しいパーティションは、既存のパーティションと同じタイプ (LISTまたはRANGE) である必要があります。 新しいパーティションのパーティション分割ルールは、既存のパーティションを定義するパーティション分割ルールで指定された同じ列を参照する必要があります。

ALTER TABLE...ADD PARTITIONステートメントを使用して、MAXVALUEまたはDEFAULTルールを持つテーブルにパーティションを追加することはできません。 または、ALTER TABLEを使用することもできます... 既存のパーティションを分割するSPLIT PARTITIONステートメント。 これにより、テーブル内のパーティション数を効果的に増やすことができます。

RANGEパーティションは昇順で指定する必要があります。 RANGEパーティションテーブルの既存のパーティションの前に新しいパーティションを追加することはできません。

新しいパーティションが存在するテーブルスペースを指定するには、TABLESPACE句を含めます。 テーブルスペースを指定しない場合、パーティションはデフォルトのテーブルスペースに作成されます。

テーブルにインデックスが作成されている場合、インデックスは新しいパーティションに作成されます。 ALTER TABLE...ADD SUBPARTITIONコマンドを使用するには、テーブルの所有者であるか、スーパーユーザー (または管理者) 権限を持っている必要があります。

パラメーター

パラメーター説明
table_nameパーティションテーブルの名前 (オプションでスキーマ修飾) 。
partition_name作成するパーティションの名前。 パーティション名は、すべてのパーティションおよびサブパーティション間で一意である必要があり、オブジェクト識別子の命名規則に従う必要があります。
subpartition_name作成するサブパーティションの名前。 サブパーティション名は、すべてのパーティションおよびサブパーティション間で一意である必要があり、オブジェクト識別子の命名規則に従う必要があります。
(value[, value]...)valueを使用して、テーブルエントリをパーティションにグループ化する引用符で囲まれたリテラル値 (またはコンマで区切られたリテラル値のリスト) を指定します。 各パーティショニングルールは少なくとも1つの値を指定する必要がありますが、ルールで指定される値の数に制限はありません。 valueは、nulldefault (LISTパーティションを指定する場合) 、またはmaxvalue (RANGEパーティションを指定する場合) です。

defaultパーティションまたはmaxvalueパーティションの作成の詳細については、「リストパーティションまたは範囲パーティションテーブルでの迷走値の処理」をご参照ください。

tablespace_nameパーティションまたはサブパーティションが存在するテーブルスペースの名前。

例-LISTパーティション分割テーブルにパーティションを追加する

次の例では、sales という名前のリストパーティション分割テーブルにパーティションを追加します。 次のコマンドを実行して、salesテーブルを作成します。

(
  dept_no number,   
  part_no varchar2,
  country varchar2(20),
  date date,
  金額番号
)
リストによるパーティー (国)
(
  PARTITION europe VALUES('FRANCE', 'ITALY'),
  PARTITION asia VALUES('INDIA', 'PAKISTAN'),
  PARTITIONアメリカスバリュー (「米国」、「カナダ」)
); 
テーブルには3つのパーティション (americas、asia、europe) が含まれています:
acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name | high_value
---------------- + ---------------------
 アメリカ | 「米国」、「カナダ」      
 アジア | 'INDIA' 、'PAKISTAN' 
 ヨーロッパ | 「フランス」、「イタリア」
(3行) 
次のコマンドは、east_asiaという名前のパーティションをsalesテーブルに追加します。
 
  値 (「中国」、「韓国」); 
このコマンドが呼び出された後、テーブルにはeast_asiaパーティションが含まれます:
acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name | high_value
---------------- + ---------------------
 east_asia | 「中国」、「韓国」    
 アメリカ | 「米国」、「カナダ」      
 アジア | 'INDIA' 、'PAKISTAN' 
 ヨーロッパ | 「フランス」、「イタリア」
(4行) 

例-RANGEパーティションテーブルにパーティションを追加する

次の例では、salesという名前の範囲パーティションテーブルにパーティションを追加します。

テーブルの販売を作成する
(
  dept_no number,
  part_no varchar2,
  country varchar2(20),
  date date,
  金額番号
)
範囲によるパーティー (日付)
(
  PARTITION q1_2012 
    VALUES LESS THAN('2012-Apr-01'),
  PARTITION q2_2012 
    VALUES LESS THAN('2012-Jul-01'),
  PARTITION q3_2012 
    VALUES LESS THAN('2012-Oct-01'),
  PARTITION q4_2012 
    より少ない値 ('2013-Jan-01 ')
); 
テーブルには、acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONSの4つのパーティション (q1_2012、q2_2012、q3_2012、およびq4_2012) が含まれます
。
 partition_name | high_value
---------------- ----------------
 q4_2012 | '2013-Jan-01' 
 q3_2012 | '2012-Oct-01' 
 q2_2012 | '2012-Jul-01' 
 q1_2012 | '2012-Apr-01'
(4行) 
次のコマンドは、q1_2013という名前のパーティションをsalesテーブルに追加します。
ALTER table sales ADD partition q1_2013 
  より少ない値 ('01-APR-2013 '); 
このコマンドが呼び出された後、テーブルにはq1_2013パーティションが含まれます:
acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name | high_value
---------------- ----------------
 q1_2012 | '2012-Apr-01' 
 q2_2012 | '2012-Jul-01' 
 q3_2012 | '2012-Oct-01' 
 q4_2012 | '2013-Jan-01' 
 q1_2013 | '01-APR-2013'
(5行)