设为首页 加入收藏

TOP

oracle分区交换
2014-11-24 02:33:01 来源: 作者: 【 】 浏览:3
Tags: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子句;

Global索引或涉及到数据改动了的global索引分区会被置为unusable,除非附加update indexes子句。

  提示:

  一旦附加了without validation子句,则表示不再验证数据有效性,因此指定该子句时务必慎重。

  例如:

JSSWEB> insert intot_partition_range_tmp values (8,'g');

  已创建 1 行。

JSSWEB> alter tablet_partition_range exchange partition t_range_p2

2 with tablet_partition_range_tmp without validation;

  表已更改。

JSSWEB> insert intot_partition_range_tmp values (8,'g');


已创建 1 行。


JSSWEB> alter table t_partition_range exchange partition t_range_p2

2 with tablet_partition_range_tmp without validation;


表已更改。


JSSWEB> select *from t_partition_range partition(t_range_p2);


ID NAME

------------------------------------------------------------

11 a

12 b

13 c

8 g

  虽然新插入的记录并不符合t_range_p2分区的范围值,但指定了without validation后,数据仍然转换成功。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle数据库案例整理-登录Oracle.. 下一篇又见OracleBUG:Rman备份的alert错..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: