1

都市に基づいてOracleテーブルをパーティション化する必要があるユースケースがあります。今、私は事前に都市を知りません。したがって、この場合、パーティションをどのように作成しますか。(ところで、私はすでにハッシュパーティションを作成しました(2つの都市のデータが同じパーティションにあることを保証しません)が、別々の都市のデータを別々のパーティションに入れたいです)

4

2 に答える 2

2

最も賢明なアプローチは、挿入/更新にストアド プロシージャを使用して、パーティションが存在することを確認することです (Egor Skriptunoff の提案による)。

このアプローチを使用したくない場合は、事前定義された都市のリストと、「不明な」都市のすべての値が格納されるデフォルトのパーティションを使用して、リスト パーティション分割を使用できます。次に、「不明な」パーティションを分割し、新しい都市のパーティションを作成する定期的なクリーンアップ ジョブを設定できます。

既知の 3 つの都市のパーティションを持つテーブルをセットアップする

create table shops (
  pk number not null primary key, 
  name varchar2(30) not null, 
  city varchar2(30) not null)
partition by list(city)
(partition shops_paris values ('Paris'),
 partition shops_berlin values ('Berlin'),
 partition shops_london values ('London'),
 partition shops_unknown values (default)
 );

いくつかのデータを追加します (1 つの「不明な」都市、ミュンヘンがあることに注意してください)。

insert into shops(pk, name, city) values (1, 'Manufactum', 'Munich');
insert into shops(pk, name, city) values (2, 'KaDeWe', 'Berlin');
insert into shops(pk, name, city) values (3, 'Harrods', 'London');
insert into shops(pk, name, city) values (4, 'Galeries Lafayette', 'Paris');  

不明なパーティションを確認してください -> 新しい都市「ミュンヘン」ができました

select * from shops partition (shops_unknown);

新しいパーティションを作成する

alter table shops split partition shops_unknown 
  values ('Munich') into (partition shops_munich, partition shops_unknown);
于 2013-03-21T12:33:46.123 に答える
0

新しいパーティションは明示的に作成する必要があります。
関連するすべてのロジックをプロシージャに含めます。

  • パーティションが存在するかどうかを確認する
  • 必要に応じて新しいものを作成する
  • テーブルに値を挿入する
于 2013-03-21T12:13:15.760 に答える