对可以获得新值的所有不同值进行分区

时间:2013-03-21 11:35:36

标签: oracle unique database-partitioning

我有一个用例,我需要根据城市对Oracle表进行分区。现在我事先并不认识这个城市。那么在这种情况下我将如何创建分区。 (顺便说一下我已经完成了哈希分区(它不能保证两个城市的数据在同一个分区中)但我想将单独城市的数据放在单独的分区中)

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

应明确创建新分区 将所有相关逻辑包含在过程中:

  • 检查分区是否存在
  • 根据需要创建新的
  • 将值插入表格