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