衆所周知,分區技術是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 ),可以看到順利的完成了分區定義。事實上這個功能已經非常健壯:
那麼oracle在背景是如何完成這個ddl的重定義過程呢?
如果通過10046進行跟蹤,可以發現這是一個非常複雜的内部遞歸過程,oracle會建立一個日志表記錄變更,然後通過bulk move批量遷移原有資料,最後增量應用變化資料,是以當然,你會發現這期間需要兩倍的存儲空間:
10046 的跟蹤日志,揭示了這一過程,以下是跟蹤日志中一個映射表的建立(感興趣的同學可以從10046中找到很多原理性知識):
一個簡單的操作,背景的遞歸執行高達2500次,大家可以想象oracle這艘航空母艦有多麼的龐大:
體驗12.2,學習不止步!