exchange partition原理探究

13811135929發表於2017-03-20
      exchange partition提供了一種在表與表或分割槽與分割槽之間快速遷移資料的方式。exchange partition適用於所有分割槽格式,你可以將資料從分割槽表遷移到非分割槽表,也可以從非分割槽表遷移到分割槽表,或者在range分割槽和hash分割槽之間進行轉換。
     由於直接更改資料字典,因此其基本不涉及IO等磁碟操作,效率極其高。下面透過實驗進行說明。
     1.環境準備

點選(此處)摺疊或開啟

  1. create table t_partition(id number,data varchar2(100)) tablespace test
  2. partition by range(id)
  3. (partition p0 values less than(100),
  4. partition p1 values less than(200),
  5. partition p2 values less than(300),
  6. partition pmax values less than(maxvalue)
  7. );

  8. create table temp(id number,data varchar2(100)) tablespace USERS;

  9. //temp、t_partition表中插入測試資料
  10. insert into temp values(1,'temp');
  11. insert into temp values(30,'temp');
  12. insert into temp values(99,'temp');
  13. commit;
  14. insert into t_partition values(5,'t_partition');
  15. insert into t_partition values(69,'t_partition');
  16. commit;

  17. //驗證
  18. SELECT * FROM temp;
  19.         ID DATA
  20. ---------- ---------
  21.          1 temp
  22.         30 temp
  23.         99 temp

  24. SELECT * FROM t_partition partition(p0);
  25.         ID DATA
  26. ---------- -------------------
  27.          5 t_partition
  28.         69 t_partition
    記錄兩張表的object_id、data_object_id資訊以及相關的儲存資訊。
   
  

   2.exchange partition
   exchange partitoin基本語法如下:
   alter table table_name1 exchange partition/subpartition partition_name with table table_name2;

點選(此處)摺疊或開啟

  1. alter table t_partition exchange partition p0 with table temp;
  上述命令敲回車後立馬返回成功。下面對資料進行驗證,確認資料遷移是否正確。

點選(此處)摺疊或開啟

  1. SELECT * FROM temp;
  2.         ID DATA
  3. ---------- -------------------
  4.          5 t_partition
  5.         69 t_partition

  6. SELECT * FROM t_partition partition(p0);
  7.         ID DATA
  8. ---------- -------------------
  9.          1 temp
  10.         30 temp
  11.         99 temp
可以看到原先t_partition分割槽p0的資料已經交換到了temp表中,同樣temp表的資料也交換到了p0分割槽。初步檢視後,我們進一步檢查一下表儲存以及data_object_id情況。


驚奇的發現,不但temp、分割槽p0對應的表空間進行了互換,其各自的data_object_id同樣進行了對調。

  3.結論
上述實驗表的記錄較少,可能不具有代表性。向temp以及分割槽p0分別插入了100w條資料後,再進行exchange partition實驗,發現其速度同樣非常快,僅用38毫秒,限於篇幅,此處只貼上了操作結果截圖:

點選(此處)摺疊或開啟

  1. SELECT count(*) FROM t_partition partition(p0);
  2.   COUNT(*)
  3. ----------
  4.    1000003

  5. SELECT count(*) FROM TEMP;

  6.   COUNT(*)
  7. ----------
  8.    1000002

  9. alter table t_partition exchange partition p0 with table temp;
  10. Elapsed: 00:00:00.38
瞭解本質,對其進行了10046事件進行跟蹤,以下是10046事件的部分截圖:

日誌可以清楚的看到系統是透過更改資料庫自帶的$檢視,來完成temp和分割槽p0的對調的,進而完成相應資料的遷移。
透過上述實驗驗證了開篇說的:exchange partition透過
直接更改資料字典,基本不涉及IO等磁碟操作,效率極其高的觀點。



   

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29827284/viewspace-2135662/,如需轉載,請註明出處,否則將追究法律責任。

相關文章