国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

oracle聯機重定義表示例

2024-08-29 13:37:07
字體:
來源:轉載
供稿:網友
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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 靖宇县| 浦江县| 龙山县| 仁怀市| 隆德县| 海口市| 高安市| 太湖县| 谢通门县| 枞阳县| 洪湖市| 新晃| 伊吾县| 大兴区| 喀喇| 镇安县| 昌宁县| 固镇县| 津南区| 都兰县| 平湖市| 古丈县| 哈巴河县| 新乐市| 宣恩县| 馆陶县| 登封市| 木里| 盐亭县| 滦平县| 五莲县| 黑水县| 安塞县| 商都县| 丽水市| 左云县| 鄄城县| 右玉县| 新乡县| 崇阳县| 平原县|