Oracle Database
表のパーティション化
サーチ…
前書き
備考
パーティショニングは追加コストオプションで、Enterprise Editionでのみ使用できます。
ハッシュパーティショニング
これは、この例ではstore idにハッシュで区切られたテーブルを作成します。
CREATE TABLE orders (
order_nr NUMBER(15),
user_id VARCHAR2(2),
order_value NUMBER(15),
store_id NUMBER(5)
)
PARTITION BY HASH(store_id) PARTITIONS 8;
ハッシュ・パーティションの数には2の累乗を使用する必要があります。これにより、パーティション・サイズに均等な分散が得られます。
レンジ分割
この例では、範囲で区切られた表が作成されます。
CREATE TABLE orders (
order_nr NUMBER(15),
user_id VARCHAR2(2),
order_value NUMBER(15),
store_id NUMBER(5)
)
PARTITION BY RANGE(order_value) (
PARTITION p1 VALUES LESS THAN(10),
PARTITION p2 VALUES LESS THAN(40),
PARTITION p3 VALUES LESS THAN(100),
PARTITION p4 VALUES LESS THAN(MAXVALUE)
);
既存のパーティションを選択
スキーマの既存のパーティションを確認する
SELECT * FROM user_tab_partitions;
リストのパーティション化
この例では、ストアIDにリストでパーティション化されたテーブルが作成されます。
CREATE TABLE orders (
order_nr NUMBER(15),
user_id VARCHAR2(2),
order_value NUMBER(15),
store_id NUMBER(5)
)
PARTITION BY LIST(store_id) (
PARTITION p1 VALUES (1,2,3),
PARTITION p2 VALUES(4,5,6),
PARTITION p3 VALUES(7,8,9),
PARTITION p4 VALUES(10,11)
);
ドロップパーティション
ALTER TABLE table_name DROP PARTITION partition_name;
パーティションからデータを選択する
パーティションからデータを選択する
SELECT * FROM orders PARTITION(partition_name);
パーティションを切り捨てる
ALTER TABLE table_name TRUNCATE PARTITION partition_name;
パーティションの名前を変更する
ALTER TABLE table_name RENAME PARTITION p3 TO p6;
パーティションを別の表領域に移動する
ALTER TABLE table_name
MOVE PARTITION partition_name TABLESPACE tablespace_name;
新しいパーティションを追加する
ALTER TABLE table_name
ADD PARTITION new_partition VALUES LESS THAN(400);
分割を分割する
いくつかのパーティションを別の上限を持つ2つのパーティションに分割します。
ALTER TABLE table_name SPLIT PARTITION old_partition
AT (new_high_bound) INTO (PARTITION new_partition TABLESPACE new_tablespace,
PARTITION old_partition)
パーティションをマージする
2つのパーティションを1つにマージする
ALTER TABLE table_name
MERGE PARTITIONS first_partition, second_partition
INTO PARTITION splitted_partition TABLESPACE new_tablespace
パーティションを交換する
パーティションをパーティション化されていないテーブルに交換/変換します。これは、操作がDDLであるため、データ・セグメント間のデータの高速な「移動」(「挿入...選択」または「表の作成...選択」とは異なります)を容易にします(パーティション交換操作はデータDML(大きなUNDO / REDOオーバーヘッド)ではなく、実際のデータを移動することなく辞書を更新します。
最も基本的な例:
- パーティション化されていないテーブル(テーブル "B")を(テーブル "A"の)パーティションに変換します。
テーブル「A」はパーティション「OLD_VALUES」にデータを含まず、テーブル「B」はデータを含む
ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";
結果:データは、テーブル「B」(操作後のデータを含まない)からパーティション「OLD_VALUES」に「移動」され、
- パーティションを非パーティションテーブルに変換する:
テーブル「A」はパーティション「OLD_VALUES」のデータを含み、テーブル「B」はデータを含まない
ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";
結果:データはパーティション「OLD_VALUES」(操作後のデータを含まない)からテーブル「B」に「移動」され、
注:この操作にはさらに多くのオプション、機能、制限があります
詳細については、このリンクを参照してください。---> " https://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm#i1107555 "(セクション「パーティションの交換」)