私は、1 日に 3 ~ 500 万行の入力がある Oracle 11g DB を使用しています。将来的には、列に基づくパーティショニングを使用したいと考えていますTimestamp
。私の目標は、毎日新しいパーティションを自動的に作成することです。
特定の範囲、つまり 1 ~ 20 日を作成する方法を見つけましたが、無制限の時間 (2014 年 1 月 1 日から mm.dd.yyyy まで) ではありません。
私は、1 日に 3 ~ 500 万行の入力がある Oracle 11g DB を使用しています。将来的には、列に基づくパーティショニングを使用したいと考えていますTimestamp
。私の目標は、毎日新しいパーティションを自動的に作成することです。
特定の範囲、つまり 1 ~ 20 日を作成する方法を見つけましたが、無制限の時間 (2014 年 1 月 1 日から mm.dd.yyyy まで) ではありません。
毎日の範囲の場合、次のように実行できます。
create table ...
...
interval(numtodsinterval(1, 'DAY'))
(
partition log_data_p1 values less than (to_date('22-04-2015', 'DD-MM-YYYY')),
partition log_data_p2 values less than (to_date('23-04-2015', 'DD-MM-YYYY'))
);
numtodsinterval
の代わりに使用することが重要ですnumtoyminterval
Oracle 11g は自動パーティション作成を提供します。次のような適切な構文でテーブルを作成するだけです。
create table
pos_data (
start_date DATE,
store_id NUMBER,
inventory_id NUMBER(6),
qty_sold NUMBER(3)
)
PARTITION BY RANGE (start_date)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION pos_data_p2 VALUES LESS THAN (TO_DATE('1-7-2007', 'DD-MM-YYYY')),
PARTITION pos_data_p3 VALUES LESS THAN (TO_DATE('1-8-2007', 'DD-MM-YYYY'))
);
ここでは、2 つのパーティションが定義され、1 か月の間隔が指定されています。日付がパーティションで指定された最大日付を超えると、Oracle は自動的に新しいパーティションを作成します。
同様に、日の範囲のパーティションを指定すると、オラクルが残りを処理します。