線上重定義分割槽表和NOLOGGING APPEND分割槽表對比
1、模擬大表
create table tes_p
(it int,
ic int,
im varchar2(20));
declare
i number(10);
begin
for i in 1..1000000
loop
insert into tes_p
values(i,i,'test');
end loop;
end;
commit;
建立主鍵
alter table tes_p add constraint pk_t primary key (it);
方法1:線上重定義
建立中間表(分割槽表,你想得到的格式)
CREATE TABLE scubagear
(it int ,
ic int ,
im varchar2(20))
PARTITION BY RANGE (ic)
( PARTITION s_q1 VALUES LESS THAN (333333),
PARTITION s_q2 VALUES LESS THAN (666666),
PARTITION s_q3 VALUES LESS THAN (10000002))
驗證原表是否可以線上遷移
exec dbms_redefinition.can_redef_table('ppzhu','tes_p');
新開啟一個會話驗證當前會話沒有REDO產生
select c.sid,b.NAME,a.VALUE from v$sesstat a ,v$statname b ,(select SID from v$mystat where rownum<=1) c
where a.SID=c.sid and a.STATISTIC#=b.STATISTIC# and b.name like '%redo%' and a.VALUE<>0 ;
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
在新開會話進行遷移
SQL> exec dbms_redefinition.start_redef_table('ppzhu','tes_p','scubagear'); -8S
PL/SQL procedure successfully completed
SQL> exec dbms_redefinition.sync_interim_table('ppzhu','tes_p','scubagear');
PL/SQL procedure successfully completed
SQL> exec dbms_redefinition.finish_redef_table('ppzhu','tes_p','scubagear'); -1s
PL/SQL procedure successfully completed
檢視資料已經移動完成,索引已經遷移
最後由於分割槽表並沒有主鍵,我們建立主鍵
alter table tes_p add constraint pk_t_2 primary key (it);
此時你的分割槽表已經轉換完成
檢視這樣操作的日誌量
select c.sid,b.NAME,a.VALUE from v$sesstat a ,v$statname b ,(select SID from v$mystat where rownum<=1) c
where a.SID=c.sid and a.STATISTIC#=b.STATISTIC# and b.name like '%redo%' and a.VALUE<>0 ;
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
139 redo synch writes 10
139 redo synch time 147
139 redo entries 9189
139 redo size 48358956 ---這裡
139 redo buffer allocation retries 30
139 redo log space requests 4
139 redo log space wait time 65
方法2
使用NOLOGGING方法
原表已經變化為scubagear,我們先建立分割槽表
CREATE TABLE test_p2
(it int ,
ic int ,
im varchar2(20))
PARTITION BY RANGE (ic)
( PARTITION s_q1 VALUES LESS THAN (333333),
PARTITION s_q2 VALUES LESS THAN (666666),
PARTITION s_q3 VALUES LESS THAN (10000002))
讓其不處於NOLOGGING模式
alter table test_p2 modify partition s_q1 nologging;
alter table test_p2 modify partition s_q2 nologging;
alter table test_p2 modify partition s_q3 nologging;
然後開啟新會話進行INSERT APPEND
insert /* +append */ into test_p2 select * from scubagear; -9s
建立主鍵
alter table test_p2 add constraint pk_t_3 primary key (it);
這裡完成了
然後RENAME
SQL> alter table scubagear rename to test_123;
Table altered
SQL> alter table test_p2 rename to scubagear;
Table altered
表SCUBAGEAR已經是分割槽表
SQL> select c.sid,b.NAME,a.VALUE from v$sesstat a ,v$statname b ,(select SID from v$mystat where rownum<=1) c
2 where a.SID=c.sid and a.STATISTIC#=b.STATISTIC# and b.name like '%redo%' and a.VALUE<>0 ;
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
135 redo synch writes 2
135 redo synch time 30
135 redo entries 22530
135 redo size 48463484 --這裡
135 redo buffer allocation retries 6
135 redo log space requests 4
135 redo log space wait time 17
7 rows selected
顯示證明 兩種方法REDO和時間差不多,時間也是相同的,不過為了可控儘量使用方法2.如果確實需要線上重定義使用方法1;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-767951/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分割槽表和dbms_redefinition包線上重定義表
- 普通錶轉換分割槽表-線上重定義
- ORACLE 線上重新定義表分割槽表重定義為普通表。Oracle
- 線上重定義 ?普通錶轉換成分割槽表
- 海量資料處理_表分割槽(線上重定義)
- 使用DBMS_REDEFINITION線上重定義表普通表為分割槽表
- 使用ORACLE線上重定義將普通表改為分割槽表Oracle
- PostgreSQL和oracle表分割槽對比SQLOracle
- oracle分割槽表和分割槽表exchangeOracle
- 使用線上重定義方法改造普通表為分割槽表實戰
- oracle分割槽表線上重定義欄位not null問題OracleNull
- ORACLE 普通錶轉換成分割槽表(線上重定義)Oracle
- 範圍分割槽表和INTERVAL分割槽表對於SPLIT分割槽的區別
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- oracle分割槽表和非分割槽表exchangeOracle
- 【Oracle】利用線上重定義的方式改變普通表為分割槽表Oracle
- ORACLE 普通錶轉換成分割槽表(線上重定義)(zt)Oracle
- 使用split對分割槽表再分割槽
- 學習筆記】分割槽表和分割槽索引——新增表分割槽(二)筆記索引
- MySQL 分割槽表 partition線上修改分割槽欄位MySql
- 指令碼:線上重定義,從普通表到分割槽表,redefinition_table.sh指令碼
- 全面學習分割槽表及分割槽索引(8)--增加和收縮表分割槽索引
- 【學習筆記】分割槽表和分割槽索引——分割槽表的其他管理(三)筆記索引
- 全面學習分割槽表及分割槽索引(13)--分隔表分割槽索引
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- 全面學習分割槽表及分割槽索引(15)--修改表分割槽屬性和模板索引
- Oracle分割槽表及分割槽索引Oracle索引
- INTERVAL分割槽表鎖分割槽操作
- 全面學習分割槽表及分割槽索引(9)--刪除表分割槽索引
- 全面學習分割槽表及分割槽索引(11)--合併表分割槽索引
- 全面學習分割槽表及分割槽索引(12)--修改list表分割槽索引
- 【學習筆記】分割槽表和分割槽索引——管理索引分割槽(四)筆記索引
- 如何查詢分割槽表的分割槽及子分割槽
- 利用線上重定義功能將普通錶轉換為分割槽表問題
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- rebuild分割槽表分割槽索引的方法Rebuild索引
- 分割槽表及分割槽索引建立示例索引
- MySQL分割槽表的分割槽原理和優缺點MySql