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后,数据仍然转换成功。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值