程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle分區交換

oracle分區交換

編輯: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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved