サーチ…


前書き

パーティショニングは、テーブルとインデックスをより小さな部分に分割する機能です。パフォーマンスを向上させ、より小さい部分を個別に管理するために使用されます。パーティションキーは、各行がどのパーティションに格納されるかを定義する列または一連の列です。 オラクル社の公式ドキュメントのパーティション分割の概要

備考

パーティショニングは追加コストオプションで、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オーバーヘッド)ではなく、実際のデータを移動することなく辞書を更新します。

最も基本的な例:

  1. パーティション化されていないテーブル(テーブル "B")を(テーブル "A"の)パーティションに変換します。

テーブル「A」はパーティション「OLD_VALUES」にデータを含まず、テーブル「B」はデータを含む

ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";

結果:データは、テーブル「B」(操作後のデータを含まない)からパーティション「OLD_VALUES」に「移動」され、

  1. パーティションを非パーティションテーブルに変換する:

テーブル「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 "(セクション「パーティションの交換」)



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow