閱讀207 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Oracle 12.2 新特性:在線的修改數據表為分區表

眾所周知,分區技術是Oracle應用最為廣泛的一個選件,並且曆史悠久,然而在過去的版本中,如果我們要將一個現有的數據表轉換為分區表,則是相當複雜的一個過程,而在 12.2 版本中,這個過程被簡化為一個在線的操作。


請看以下Demo SQL語句:

CREATE TABLE sales

order_num    NUMBER,

order_name   VARCHAR2(128),

region       VARCHAR2(10));


insert into sales (1,'YHEM','BEIJING');

insert into sales (2,'ENMOTECH','SHENZHEN');

insert into sales (3,'YHEM','SHANGHAI');


ALTER TABLE sales MODIFY

PARTITION BY LIST (region)

  (partition p1 values ('BEIJING'),

   partition p2 values ('SHENZHEN'),

   partition p3 values ('SHANGHAI'),

   partition p4 values (DEFAULT)) ONLINE;


在Modify修改表結構時,增加了ONLINE語句,可以直接將原有的數據表修改為分區結構。不會影響現有業務的運行。


在Live SQL站點運行一下測試語句( https://livesql.oracle.com ),可以看到順利的完成了分區定義。事實上這個功能已經非常健壯:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

那麼Oracle在後台是如何完成這個DDL的重定義過程呢?


如果通過10046進行跟蹤,可以發現這是一個非常複雜的內部遞歸過程,Oracle會建立一個日誌表記錄變更,然後通過Bulk Move批量遷移原有數據,最後增量應用變化數據,所以當然,你會發現這期間需要兩倍的存儲空間:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

10046 的跟蹤日誌,揭示了這一過程,以下是跟蹤日誌中一個映射表的建立(感興趣的同學可以從10046中找到很多原理性知識):

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

一個簡單的操作,後台的遞歸執行高達2500次,大家可以想象Oracle這艘航空母艦有多麼的龐大:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=
體驗12.2,學習不止步!


文章轉自數據和雲公眾號,原文鏈接

最後更新:2017-07-18 10:33:26

  上一篇:go  【快訊】在線體驗Oracle Database 12.2 SQL新特性
  下一篇:go  數據庫高可用和分區解決方案-MySQL 篇