日期:2014-05-16  浏览次数:20368 次

oracle分区交换

在Oracle数据库开发中,对于这种大数据的转移可以使用分区表交换技术实现。即使你一次转移的数据量几亿甚至几十亿也没有关系,转移时间依然是毫秒级的。这个方法大体流程是这样:首先,你需要将当前表修改为分区表,找到分区字段很关键;其次,这个分区表的索引都建立成本地索引,全局索引就不要了,原因后面介绍;再次,建立一个对应的临时非分区表,表结构和这个一样;最后使用alter table table_name exchange partition  Partition_name with table table_name_exchange;操作,将表分区所拥有数据的实际物理存储空间段相互交换,这是指针级的操作。

示例:

[SYS@orcl#09-3 -10]SQL>create table t(id number primary key,time date);

表已创建。

[SYS@orcl#09-3 -10]SQL>insert into t select rownum,created from dba_objects;

已创建50362行。

[SYS@orcl#09-3 -10]SQL>create table t_n(id number primary key,time date)
2 partition by range(time)
3 (partition p1 values less than (maxvalue));

表已创建。

[SYS@orcl#09-3 -10]SQL>alter table t_n exchange partition p1 with table t;

表已更改。

[SYS@orcl#09-3 -10]SQL>select count(*) from t_n;

COUNT(*)
----------
     50362

[SYS@orcl#09-3 -10]SQL>alter table t_n split partition p1 at (to_date('2008-4-1','yyyy-mm-dd')
2 ) into (partition p1,partition p2);

表已更改。

[SYS@orcl#09-3 -10]SQL>select count(*) from t_n;

COUNT(*)
----------
     50362

[SYS@orcl#09-3 -10]SQL>select count(*) from t;

COUNT(*)
----------
         0

:  

  注意:

涉及交换的两表之间表结构必须一致,除非附加with validation子句;

如果是从非分区表向分区表做交换,非分区表中的数据必须符合分区表中指定分区的规则,除非附加without validation子句;

如果从分区表向分区表做交换,被交换的分区的数据必须符合分区规则,除非附加without validation子句;