ORACLE普通表轉換成分割槽表的操作

2021-08-19 10:23:02 字數 2415 閱讀 5788

【前言】oracle官方建議當表的大小大於2gb的時候就使用分割槽表進行管理,分割槽表相對於小的表管理和效能上都有很大的優勢,本文件暫時不介紹具體的優勢,主要介紹幾種普通表轉換成分割槽表的方法;

【方法概述】oracle官方給了以下四種操作的方法:

a)  export/import method(匯入匯出)

b)  insert with a subquery method(插入子查詢的方法)

c)  partition exchange method(交換分割槽法)

這些方法的思路都是建立乙個新的分割槽表,然後把舊表的資料轉移到新錶上面,接著轉移相應的依賴關係,最後進行表的重新命名,把新錶和舊表rename。

其中a、b、c這三種方法都會影響到系統的正常使用,本文件不做詳細的介紹,本文件主要介紹d方法,這種方法是目前普遍在進行普通表轉換成分割槽表的方法。

以scott下的emp表為例

1. 先確認下表能不能進行分割槽

基於主鍵的確認

begin

dbms_redefinition.can_redef_table('soctt','emp',dbms_redefinition.cons_use_pk);

end;

/pl/sql procedure successfully completed.

顯示的是沒有問題的

2.進行臨時表的建立,以

deptno

作為分割槽的選項

create table scott.emp_1

(empnonumber(4),

enamevarchar2(10 byte),

jobvarchar2(9 byte),

mgrnumber(4),

hiredatedate,

salnumber(7,2),

commnumber(7,2),

deptnonumber(2)

)partition by range (deptno)

(partition emp_a1 values less than (20),

partition emp_a2 values less than (30),

partition emp_a3 values less than (40),

partition emp_a4 values less than (50),

partition emp_a5 values less than (60)

)3.開始執行資料的遷移

exec dbms_redefinition.start_redef_table('scott', 'emp', 'emp_1');

4.如果表的資料很多,3步的時候可能會很長,這期間系統可能會繼續對錶emp進行寫入或者更新資料,那麼可以執行以下的語句,這樣在執行最後一步的時候可以避免長時間的鎖定(

該過程可選可不選

)begin 

dbms_redefinition.sync_interim_table(

'scott'

, 'emp', 'emp_1');

end;

/5.進行許可權物件的遷移

declare

num_errors pls_integer;

begin

dbms_redefinition.copy_table_dependents('scott', 'emp','emp_1',

dbms_redefinition.cons_orig_params, true, true, true, true, num_errors);

end;

/6.查詢相關錯誤,在操作之前先檢查,查詢dba_redefinition_errors試圖查詢錯誤:

select object_name, base_table_name, ddl_txt from   dba_redefinition_errors;

7.結束整個重定義

begin

dbms_redefinition.finish_redef_table('scott', 'emp', 'emp_1');

end;

/【總結】做過乙個大小2.3gb,總行數360萬行的表,整個過程大概花了56秒的時間,整個過程還是相當快的。建議具體的生產環境的執行需要經過嚴格測試後執行,測試的過程中大概就能知道整個過程的執行時間長度。

另如果再執行的過程中發生錯誤,可以通過以下語句結束整個過程:

begin

dbms_redefinition.abort_redef_table(uname => 'scott',

orig_table => 'emp',

int_table => 'emp_1'

);end; 

ORACLE普通表轉換成分割槽表的操作

oracle官方建議當表的大小大於2gb的時候就使用分割槽表進行管理,分割槽表相對於小的表管理和效能上都有很大的優勢,本文件暫時不介紹具體的優勢,主要介紹幾種普通表轉換成分割槽表的方法 oracle官方給了以下四種操作的方法 這些方法的思路都是建立乙個新的分割槽表,然後把舊表的資料轉移到新錶上面,接...

Oracle建立普通表轉換為分割槽表

在oracle中要把表名重名名為字串加上日期格式 使用下面命令 begin execute immediate alter table old table name rename to new table name to char sysdate,yyyymmdd end commit 利用交換表把...

普通表轉換分割槽表操作步驟

普通表轉換分割槽表操作步驟 1.轉分割槽表原因 生產資料庫,一張表,一億多行資料,絕大部分查詢按月為維度做時間範圍查詢,未分割槽狀態下,查詢io量大,計畫以分割槽截剪的方式減少io量,提公升前前台查詢效能 2.實施目的 3.注意事項 1 資料庫若是雙節點,只需在其中乙個節點的資料庫上實施。2 實施中...