利用dbms_redefinition實現普通heap表和分割槽表的轉化
SQL> create table t2(id int primary key , name varchar2(10) , time date);
表已建立。
SQL> insert into t2 values(1,'a',to_date('2009/09/02 10:12:21','yyyy/mm/dd hh24:
mi:ss'));
已建立 1 行。
SQL> insert into t2 values(2,'b',to_date('2009/10/10 10:12:21','yyyy/mm/dd hh24:
mi:ss'));
已建立 1 行。
SQL> insert into t2 values(3,'c',to_date('2009/11/20 15:12:36','yyyy/mm/dd hh24:
mi:ss'));
已建立 1 行。
SQL> insert into t2 values(100,'d',to_date('2010/11/20 15:12:36','yyyy/mm/dd hh2
4:mi:ss'));
已建立 1 行。
SQL> commit;
提交完成。
SQL> select * from t2;
ID NAME TIME
---------- ---------- --------------
1 a 02-9月 -09
2 b 10-10月-09
3 c 20-11月-09
100 d 20-11月-10
SQL>exec DBMS_REDEFINITION.can_REDEF_TABLE('SYS','T2',1);
BEGIN DBMS_REDEFINITION.can_REDEF_TABLE('SYS','T2',1); END;
*
第 1 行出現錯誤:
ORA-12087: 在 "SYS" 擁有的表上不允許聯機重新定義
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 137
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 1478
ORA-06512: 在 line 1
--sys使用者下的表不允許聯機重定義
SQL> create table test.t2 as select * from t2;
表已建立。
SQL> connect
已連線。
--下面測試是把普通heap 錶轉換為分割槽表,使用primary key重定義也可以使用rowid重定義
SQL> alter table t2 add constraint pk_t2 primary key (id);
表已更改。
--驗證是否可以進行REDEFINITION,如果不能則會給出原因
SQL> exec DBMS_REDEFINITION.can_REDEF_TABLE('TEST','T2',1);
PL/SQL 過程已成功完成。
--建立中間轉換需要的臨時分割槽表
SQL> create table t2_p_tmp(id int , name varchar2(10),time date)
2 partition by range(time)(
3 partition t2_p200909 values less than(to_date('2009/10/01','yyyy/mm/dd')),
4 partition t2_p200910 values less than(to_date('2009/11/01','yyyy/mm/dd')),
5 partition t2_p200911 values less than(to_date('2009/12/01','yyyy/mm/dd')),
6 partition t2_p200912 values less than(to_date('2010/12/01','yyyy/mm/dd'))
7 );
表已建立。
SQL>
--開始重定義
SQL> begin
2 dbms_redefinition.start_redef_table('TEST','T2','T2_P_TMP','id id, name nam
e,time time',dbms_redefinition.cons_use_pk);
3 end;
4 /
--同步資料
PL/SQL 過程已成功完成。
SQL> exec dbms_redefinition.sync_interim_table('TEST','T2','T2_P_TMP');
PL/SQL 過程已成功完成。
--結束重定義的過程
SQL> exec dbms_redefinition.finish_redef_table('TEST','T2','T2_P_TMP');
PL/SQL 過程已成功完成。
--刪除臨時表
SQL> drop table t2_p_tmp;
表已刪除。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-1028165/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用ORACLE DBMS_REDEFINITION包進行普通表到分割槽表的線上轉換Oracle
- 使用DBMS_REDEFINITION線上重定義表普通表為分割槽表
- dbms_redefinition利用線上重定義把普通錶轉化為分割槽表的一些測試
- 批次轉換分割槽表為普通表
- 批量轉換分割槽表為普通表
- 分割槽表和dbms_redefinition包線上重定義表
- 普通錶轉換為分割槽表
- 普通表自動轉化為按月分割槽表的指令碼指令碼
- oracle 普通表-分割槽表改造流程Oracle
- Oracle線上將普通錶轉分割槽表Oracle
- 將普通錶轉換為分割槽表
- Oracle普通表修改為分割槽表的方法Oracle
- 【分割槽】如何將一個普通錶轉換為分割槽表
- 【Oracle】利用線上重定義的方式改變普通表為分割槽表Oracle
- ORACLE普通錶轉換成分割槽表的操作Oracle
- Oracle 將普通錶轉換為分割槽表Oracle
- 高手幫忙,超大普通錶轉分割槽表?
- 利用exp/imp變換普通表為分割槽表_10g_windowsWindows
- oracle分割槽表和分割槽表exchangeOracle
- Mysql表分割槽實現MySql
- 普通錶轉換成分割槽表的四種方法
- oracle分割槽表和非分割槽表exchangeOracle
- 普通錶轉換分割槽表-線上重定義
- ORACLE將普通錶轉變為分割槽表方法Oracle
- 使用dbms_redefinition包線上把大資料量非分割槽錶轉換為分割槽表大資料
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- oracle9i 普通表改為分割槽表Oracle
- 利用線上重定義功能將普通錶轉換為分割槽表問題
- postgresql分割槽表實現方式SQL
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- 線上重定義 ?普通錶轉換成分割槽表
- PostgreSQL使用表繼承實現分割槽表SQL繼承
- HGDB的分割槽表實現SQL Server的分割槽檢視SQLServer
- 使用線上重定義方法改造普通表為分割槽表實戰
- 學習筆記】分割槽表和分割槽索引——新增表分割槽(二)筆記索引
- 【學習筆記】分割槽表和分割槽索引——分割槽表的其他管理(三)筆記索引
- 範圍分割槽表和INTERVAL分割槽表對於SPLIT分割槽的區別
- 非分割槽錶轉換為分割槽表和partition indexIndex