我有一个用例,我需要根据城市对Oracle表进行分区。现在我事先并不认识这个城市。那么在这种情况下我将如何创建分区。 (顺便说一下我已经完成了哈希分区(它不能保证两个城市的数据在同一个分区中)但我想将单独城市的数据放在单独的分区中)
答案 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)
应明确创建新分区 将所有相关逻辑包含在过程中: