普通大表轉為分割槽表

2021-06-28 13:46:20 字數 1659 閱讀 6756

生產庫環境:

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 實施中...