Oracle 9i 之后可以進行聯機重定義表(Online Redefine Tables,或"在線重定義表").該特性從某種程度上提供了一定的高可用性.通過該功能可以做到:                                                                                            修改表的存儲參數 
移動該表到相同 Schema 下的 不同表空間內
添加并行查詢支持
添加或刪除分區
重建表以便減少碎片
在普通表和索引組織(index-organized)表之間互相轉換
添加或刪除列 
做一個從普通表到分區表之間的轉換操作.可以用 DBA 用戶操作.假如是普通用戶需要有DBMS_REDEFINITION 包的可執行權限以及如下權限:* CREATE ANY TABLE 
* ALTER  ANY TABLE 
* DROP   ANY TABLE 
* LOCK   ANY TABLE 
* SELECT ANY TABLE 下面通過一個例子來簡單演練一把.假定目前產品庫有一個非分區表 TEST. 預備對把該表聯機修改為分區表.我們的測試表結構(ID列為PK):SQL> DESC TEST
 Name                                      Null?    Type
 ----------------------------------------- -------- -------------------
 ID                                        NOT NULL VARCHAR2(16)
 USER_NAME                                          VARCHAR2(16)
 GMT                                       NOT NULL TIMESTAMP(6)
1) 驗證該表是否可以進行聯機重定義(假如不可以會給出具體原因):
SQL> exec DBMS_REDEFINITION.can_REDEF_TABLE('SCOTT','TEST',1); 2) 創建中間臨時表并劃分分區: 
CREATE TABLE test_p(
  ID                     VARCHAR2(16)  NOT NULL,
  user_name              VARCHAR2(16),
  gmt                    TIMESTAMP(6)  NOT NULL
)
PARTITION BY RANGE (gmt) (
PARTITION test_p200511 VALUES LESS THAN(TO_DATE('2005-12-01','yyyy-mm-dd')) ,
PARTITION test_p200512 VALUES LESS THAN(TO_DATE('2006-01-01','yyyy-mm-dd')) );3) 開始重定義表 BEGIN
   DBMS_REDEFINITION.start_redef_table
      ('SCOTT','TEST','TEST_P',
       'ID         ID,
        USER_name  USER_name,
        GMT        GMT',
       DBMS_REDEFINITION.cons_use_pk
      );
END;
-- 注重條件 dbms_redefinition.cons_use_pk, 假如是根據 ROWID 做聯機重定義,則用 dbms_redefinition.cons_use_rowid .
                         4) 創建索引限制以及觸發器等.注:在10g 中,假如這些定義變化了.可以通過 DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT() 來創建.假如這些對象定義不變化,則調用 DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS() 即可.ALTER TABLE test_p
  ADD CONSTRAINT test_p_pk PRIMARY KEY (ID)
  USING INDEX
  TABLESPACE indx;
5) 同步表內容 . 假如需要同步的數據非凡大,則可能考慮通過 prebuilt table 的方法先建立物化視圖. EXEC DBMS_REDEFINITION.sync_interim_table ('SCOTT', 'test', 'test_p');
6) 結束重定義過程 
EXEC DBMS_REDEFINITION.finish_redef_table ('scott', 'test', 'test_p');
7) 刪除臨時表 TEST_P.
drop table test_p;
*) 假如想中途停止重定義過程,則通過如下指令退出該過程:EXEC dbms_redefinition.abort_redef_table('SCOTT', 'test','test_p');
進一步熟悉該過程的機理可以通過查詢:SELECT sql_text FROM v$sqlarea WHERE sql_text LIKE '%TEST_P%';聯機重定義表必須考慮的問題: 會占用源表兩倍的空間.此外還要考慮物化視圖 Log 的空間以及帶來的其他開銷.參考信息:Oracle9i Database Administrator's Guide Release 2 (9.2) 第十五章.10g 關于聯機重定義表的改進可以參考 Oracle Database 10g Online Data Reorganization & Redefinition