1

我有一个用例,我需要根据城市对 Oracle 表进行分区。现在我事先不知道这座城市。所以在这种情况下我将如何创建分区。(顺便说一句,我已经完成了哈希分区(它不能确保两个城市的数据在同一个分区中)但我想让不同城市的数据在不同的分区中)

4

2 回答 2

2

最明智的方法是使用存储过程进行插入/更新,以确保分区存在(如 Egor Skriptunoff 所建议的那样)。

如果您不想使用这种方法,您可以使用带有预定义城市列表的列表分区和将存储“未知”城市的所有值的默认分区。然后,您可以设置定期清理作业,拆分“未知”分区并为新城市创建分区:

设置三个已知城市的分区表

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)
 );

添加一些数据(请注意,我们有一个“未知”城市,慕尼黑)

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 回答