我有一种情况,其中想使用间隔分区对现有的Oracle表进行分区。我不知道数据库中做同样的事情的最佳方法是什么。
表大小约为11 GB。分区需要在“日期”列上进行,间隔为1个月。
答案 0 :(得分:0)
重新创建表:
<your-table-name>_OLD
前提条件:数据库中具有所需的可用空间。
别忘了重新创建所有需要的约束等。
或使用Oracle的在线表重新定义机制:https://docs.oracle.com/en/database/oracle/oracle-database/12.2/vldbg/evolve-nopartition-table.html#GUID-6054142E-207A-4DF0-A62A-4C1A94DD36C4
答案 1 :(得分:0)
如果只希望对新数据进行分区,而将旧表作为一个分区,则可以使用这种无重组的方法,并且需要两倍的空间。
0)这是您的示例数据,ID标识分区列的ID最多为10.000
create table my_tab
(id number,
vc1 varchar2(100));
insert into my_tab(id,vc1)
select rownum id, 'xxx'||rownum vc1 from dual connect by level <= 10000;
commit;
1)创建一个包含所有数据分区的空间隔partitione dtable-这里的ID小于10.001
create table my_part_tab
(id number,
vc1 varchar2(100))
PARTITION BY RANGE (id)
INTERVAL (1000)
(PARTITION p1 VALUES LESS THAN (10001));
2)在分区表上定义与原始表相同的索引
3)用初始分区交换表。
alter table my_part_tab exchange partition P1
with table my_tab
including indexes;
现在您的原始表为空,所有数据都在分区表的分区P1
中。
将根据间隔分区策略存储新数据(较高的键)。