Oracle 基於 dbms_redefinition 線上重定義表
Oracle 支援線上重定義表,也就是說我們可以在修改表結構(DDL)的同時進行相關的DQL、DML操作,使得前端的DML根本感覺不到表結構實際上已經發生了變化,對於使用者而言是完全透明的。當然線上重定義期間,前端效能會稍微有所下降。Oracle提供的重定義包dbms_redefinition即是用與完成此操作。其實質是Oracle使用了智能物化視圖及物化視圖日誌的方式。在對象結構重組期間,表現為一個本機物件的複製,重組期間發生的任何變化都會被重新整理到最新。
--------------------------------------------------------------------------------
Linux-6-64下安裝Oracle 12C筆記
在CentOS 6.4下安裝Oracle 11gR2(x64)
Oracle 11gR2 在VMWare虛擬機器中安裝步驟
Debian 下 安裝 Oracle 11g XE R2
--------------------------------------------------------------------------------
1、線上重定義表的主要功能:
修改表或簇的儲存參數
將表移動到相同或不同schema下不同的tablespace(如果不要求表始終可用的話,也可以直接使用alter table move 實現)
為表添加,修改或刪除列
為表添加或刪除分區,改變分區結構
改變物化視圖日誌或者Streams Advanced Queuing queue 表結構
增加並行查詢支援
重建表以減少片段
將堆表變為索引組織表或相反
2、圖示線上重定義
下面的圖示便於理解是如何進行線上重定義,其本質是基於基表的一個快照
3、線上重定義的步驟
a、選擇線上重定義的方式,基於鍵(主鍵或唯一鍵)還是rowid(無主鍵或唯一鍵的情形)
b、校正表能否被線上重定義,使用過程CAN_REDEF_TABLE
c、建立用於線上重定義的暫存資料表(該暫存資料表使用新的表結構,即添加刪除列,列長度變化,儲存屬性變化等)
d、如果重定義的為分區表且使用rowid方式,應該為暫存資料表開啟行移動(ALTER TABLE ... ENABLE ROW MOVEMENT;)
e、對於大型表的線上重定義可以通過啟用並行以提高效能(此步驟可選)
ALTER SESSION FORCE PARALLEL DML PARALLEL degree-of-parallelism;
ALTER SESSION FORCE PARALLEL QUERY PARALLEL degree-of-parallelism;
f、調用過程start_redef_table啟動線上重定義,如果啟動失敗,應調用ABORT_REDEF_TABLE先終止尋找原因後再次啟動
g、從被重定義的表複製依賴對象到暫存資料表(triggers, indexes, materialized view logs, grants, and constraints)及統計資訊到暫存資料表
h、同步被重定義的表到暫存資料表(調用過程sync_interim_table,此步可選)
i、調用過程FINISH_REDEF_TABLE完成表的線上重訂義
j、刪除暫存資料表
更多詳情見請繼續閱讀下一頁的精彩內容: