普通錶轉換分割槽表-線上重定義
普通錶轉化分割槽表—線上重定義
以下為YWS表為示例:
Sys使用者授權
SQL> grant execute on DBMS_REDEFINITION to
1. 獲取原來表的後設資料。
可透過dbms_metadata.get_ddl獲取後設資料.
create table YWS.YWS --注原表需要有primary
(
logid NUMBER not null,
typeid NUMBER,
levelid NUMBER,
userid NUMBER,
operate VARCHAR2(100),
title VARCHAR2(100),
descr VARCHAR2(2000),
createtime DATE
)
2.建立中間表
create table YWS.YWS_NEW
(
logid NUMBER not null,
typeid NUMBER,
levelid NUMBER,
userid NUMBER,
operate VARCHAR2(100),
title VARCHAR2(100),
descr VARCHAR2(2000),
createtime DATE
)
PARTITION BY RANGE(create_date) --按照時間進行的範圍分割槽
INTERVAL(NUMTOYMINTERVAL(1,'MONTH')) –-11g新特性 間隔分割槽
(
PARTITION P1 VALUES LESS THAN(TO_DATE('2014-05-01','YYYY-MM-DD'))
);
NOTE:
可按照範圍分割槽:
PARTITION BY RANGE (customer_id) -–注意欄位型別需要為number型別 才可利用間隔分割槽
INTERVAL (1000000) -–1000000一個分割槽
(PARTITION p1 VALUES LESS THAN (1000001));
3.執行校驗
EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'YWS', DBMS_REDEFINITION.CONS_USE_PK);
4.執行線上重定義
EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, ' YWS ', ' YWS_new');
5.結束線上重定義
EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, ' YWS ', ' YWS_new');
6. 檢查是否成功
select table_name,partitioning_type,partition_count
From dba_part_tables where table_name='YWS';
select partition_name,high_value,tablespace_name
from dba_tab_partitions where table_name='YWS'
order by partition_position;
7.校驗完資料.清空中間表
truncate table yws_new;
drop table yws_new purge;
8.注意的問題:
無主鍵:
SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'YWS', DBMS_REDEFINITION.CONS_USE_PK);
begin DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'YWS', DBMS_REDEFINITION.CONS_USE_PK); end;
ORA-12089: 不能聯機重新定義無主鍵的表 "YWS"."YWS"
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 143
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 1635
ORA-06512: 在 line 2
SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'YWS', DBMS_REDEFINITION.CONS_USE_PK);
begin DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'YWS', DBMS_REDEFINITION.CONS_USE_PK); end;
ORA-12089: 不能聯機重新定義無主鍵的表 "YWS"."YWS"
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 143
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 1635
ORA-06512: 在 line 2
解決方案:新增主鍵
分割槽鍵有空值
exec DBMS_REDEFINITION.abort_redef_table(user, 'YWS', 'YWS_NEW')以放棄執行線上重定義。SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'YWS', 'YWS_NEW');
BEGIN DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'YWS', 'YWS_NEW'); END;
*
ERROR at line 1:
ORA-42004: redefinition not instantiated
ORA-06512: at "SYS.DBMS_REDEFINITION", line 82
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1532
ORA-06512: at line 1
SQL> exec DBMS_REDEFINITION.abort_redef_table(user, 'YWS', 'YWS_NEW')SQL>
PL/SQL procedure successfully completed.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29477587/viewspace-1218866/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 線上重定義 ?普通錶轉換成分割槽表
- ORACLE 普通錶轉換成分割槽表(線上重定義)Oracle
- ORACLE 普通錶轉換成分割槽表(線上重定義)(zt)Oracle
- 利用線上重定義功能將普通錶轉換為分割槽表問題
- 線上表格重定義研究,比如將普通錶轉換為分割槽表等
- 線上重定義的操作步驟__普通錶轉換為分割槽表的實驗案例
- 普通錶轉換為分割槽表
- Oracle線上將普通錶轉分割槽表Oracle
- ORACLE 線上重新定義表分割槽表重定義為普通表。Oracle
- 將普通錶轉換為分割槽表
- 使用ORACLE線上重定義將普通表改為分割槽表Oracle
- 使用DBMS_REDEFINITION線上重定義表普通表為分割槽表
- Oracle 將普通錶轉換為分割槽表Oracle
- 使用線上重定義方法改造普通表為分割槽表實戰
- 【分割槽】如何將一個普通錶轉換為分割槽表
- ORACLE普通錶轉換成分割槽表的操作Oracle
- 【Oracle】利用線上重定義的方式改變普通表為分割槽表Oracle
- dbms_redefinition利用線上重定義把普通錶轉化為分割槽表的一些測試
- 普通錶轉換成分割槽表的四種方法
- 指令碼:線上重定義,從普通表到分割槽表,redefinition_table.sh指令碼
- 非分割槽錶轉換成分割槽表
- 將非分割槽錶轉換為分割槽表
- 批次轉換分割槽表為普通表
- 批量轉換分割槽表為普通表
- 高手幫忙,超大普通錶轉分割槽表?
- 分割槽表和dbms_redefinition包線上重定義表
- 堆錶轉換成分割槽表
- 海量資料處理_表分割槽(線上重定義)
- 將mysql非分割槽錶轉換為分割槽表MySql
- MySQL普通錶轉換成分割槽表的兩種方法舉例MySql
- Oracle Database將普通錶轉換為分割槽表遇到的問題OracleDatabase
- 線上重定義分割槽表和NOLOGGING APPEND分割槽表對比APP
- ORACLE將普通錶轉變為分割槽表方法Oracle
- 將一個非分割槽錶轉換為分割槽表
- 非分割槽錶轉換為分割槽表和partition indexIndex
- oracle分割槽表線上重定義欄位not null問題OracleNull
- 非分割槽錶轉換成分割槽表以及注意事項
- 使用dbms_redefinition包線上把大資料量非分割槽錶轉換為分割槽表大資料