如何将间隔分区添加到oracle中的现有表?

时间:2018-07-10 06:56:08

标签: oracle oracle12c partitioning

我有一种情况,其中想使用间隔分区对现有的Oracle表进行分区。我不知道数据库中做同样的事情的最佳方法是什么。

表大小约为11 GB。分区需要在“日期”列上进行,间隔为1个月。

2 个答案:

答案 0 :(得分:0)

重新创建表:

  1. 将当前表重命名为<your-table-name>_OLD
  2. 使用原始表名创建一个新的分区表。
  3. 将表数据从旧表插入新表。
  4. 丢掉旧桌子。

前提条件:数据库中具有所需的可用空间。

别忘了重新创建所有需要的约束等。

或使用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中。 将根据间隔分区策略存储新数据(较高的键)。