oracle分区交换

来源:互联网 发布:游戏显示器推荐 知乎 编辑:程序博客网 时间:2024/06/06 02:36

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

0 0
原创粉丝点击