天天看點

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 ),可以看到順利的完成了分區定義。事實上這個功能已經非常健壯:

Oracle 12.2 新特性:線上的修改資料表為分區表

那麼oracle在背景是如何完成這個ddl的重定義過程呢?

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

Oracle 12.2 新特性:線上的修改資料表為分區表

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

Oracle 12.2 新特性:線上的修改資料表為分區表

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

Oracle 12.2 新特性:線上的修改資料表為分區表

體驗12.2,學習不止步!