生產庫環境:
oracle版本 11.2.0.3.0 + asm
大表資料量為近3千萬,分割槽鍵為日期字段
流程:1. 停止中介軟體應用系統
2. 利用ctas +nologging+並行來處理,這樣速度會提高許多
create table t_tab_new nologging parallel(degree 2) partition by range (baldate)
interval(numtoyminterval(1,'month'))
(partition part_1211 values less than (to_date(' 2012-11-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss', 'nls_calendar=gregorian'))) as select * from t_tab ;
注: 由於使用了11g自動分割槽特性,應當注意兩點,乙個必須至少要定義乙個分割槽,而且日期必須是1號到28號之間,如果你這樣寫就會報錯:
to_date(' 2012-11-30 00:00:00', 'syyyy-mm-dd hh24:mi:ss', 'nls_calendar=gregorian')
3. 重新命名相關表
alter table t_tab rename to t_tab_old;
alter table t_tab_new rename to t_tab;
4. 將觸發器、相關索引等轉移到新建的表上來
重新在新表上建立索引及觸發器,注意索引名不要和原來的重複,並且大表建立索引要注意nologging+並行,如:
create index idx_t_tab01 on t_tab (shopcode) nologging parallel 4; --全域性索引
總共在10分鐘之內完成。
declare
v_user varchar2(50):='njsxbak';
v_tab varchar2(50):='t_exterbill';
v_tmptab varchar2(50):='t_exterbill_tmp';
num_errors pls_integer;
begin
dbms_redefinition.can_redef_table(v_user,v_tab,dbms_redefinition.cons_use_pk);
dbms_redefinition.start_redef_table(v_user,v_tab,v_tmptab,null,dbms_redefinition.cons_use_pk);
dbms_redefinition.copy_table_dependents(v_user,v_tab,v_tmptab,dbms_redefinition.cons_orig_params, true, true, true, true, num_errors);
if num_errors>0 then
end if;
dbms_redefinition.sync_interim_table(v_user,v_tab,v_tmptab);
dbms_redefinition.finish_redef_table(v_user,v_tab,v_tmptab);
end;
普通表變為分割槽表
將已存在資料的普通表轉變為分割槽表,沒有辦法通過修改屬性的方式直接轉化為分割槽表,必須通過重建的方式進行轉變,一般可以有三種方法,視不同場景使用 用例 方法一 利用原表重建分割槽表。create table t id number primary key,time date insert into ...
將普通表改為分割槽表
oracle的普通表沒有辦法通過修改屬性的方式直接轉化為分割槽表,必須通過重建的方式進行轉變,下面介紹三種效率比較高的方法,並說明它們各自的特點。方法一 利用原表重建分割槽表。步驟 sql create table t id number primary key,time date 表已建立。sql...
普通表轉換分割槽表操作步驟
普通表轉換分割槽表操作步驟 1.轉分割槽表原因 生產資料庫,一張表,一億多行資料,絕大部分查詢按月為維度做時間範圍查詢,未分割槽狀態下,查詢io量大,計畫以分割槽截剪的方式減少io量,提公升前前台查詢效能 2.實施目的 3.注意事項 1 資料庫若是雙節點,只需在其中乙個節點的資料庫上實施。2 實施中...