Oracle 為分割槽表新增新分割槽

2021-09-14 04:35:06 字數 2159 閱讀 4335

關鍵字

需求:新增分割槽

離線訊息表offlmg,在原有分割槽的基礎上新增乙個分割槽。
分析:資料量大

1.該錶有50張,從offlmg_0到offlmg_49,資料量比較大,最少的一張有幾千萬資料,50g左右,最大的一張有幾億資料,超過300g.

2.該錶為list分割槽表,有default分割槽,且default分割槽資料量比較大,佔全表資料量的95%以上

3.該錶在三個月前做了聯機重定義,將原來未分割槽的表做了分割槽,分割槽後存量資料放在default分割槽,新寫入的資料都在其他分割槽中

4.default分割槽資料現在在業務中基本上不用(業務上離線訊息只取7天前的),當前default分割槽只作為歷史資料儲存

操作

直接add分割槽

alter table offlmg_0 

add partition p_10

values(10);

執行報錯,錯誤**ora-14323:list分割槽表中有default分割槽存在情況下不能add分割槽

執行成功,但是比較慢(17301165條資料,34.79g,耗時162.07秒),如果在生產上這樣搞的話,估計投產當天跑一天都跑不完,這是無法接受的情況,只能另尋他路了

執行報錯,錯誤**ora-14097: alter table exchange partition 中的列型別或大小不匹配

這我就不能忍了,ctas的表竟然說表結構不相同,經過分析,可能這張表維護時間超過了三年,可能之前經過了字段的新增和刪除,有一些unused的字段存在

執行查詢:

select table_name,column_name,data_type,data_length,column_id 

from user_tab_cols

where table_name = 'offlmg_0';

果然,有一行記錄明顯不對

offlmg_0    sys_c00011_15072514:46:10$    varchar2    255
這個欄位sys_c00011_15072514:46:10$說明在2023年7月25號的時候確實刪除了乙個字段,只能看到這個欄位是varchar2型別的,大小255,不能看到欄位名.

怎麼辦,怎麼辦,幾個人合計了下,要不把新錶也加個相同型別的字段,然後給set unused得了,試一試

--建新表前判斷有則刪除

drop table offlmg_0_default cascade constraints;

--按照原有表結構建立新錶

create table offlmg_0_default

tablespace imlog

as (

select * from offlmg_0 where 1=2);

--新增乙個字段,名字隨意,用來set unused的

alter table offlmg_0_default

add (test varchar2(255));

--將這個欄位set unused

alter table offlmg_0_default set unused(test);

--交換原表的default分割槽到新錶

alter table offlmg_0

exchange partition p_d

with table offlmg_0_default;

--刪除原表default分割槽

alter table offlmg_0

drop partition p_d;

--為原表新增新分割槽

alter table offlmg_0

add partition p_10

values(10);

--為原表新增default分割槽

alter table offlmg_0

add partition p_d

values(default);

執行成功(17301165條資料,34.79g,耗時3毫秒)

ORACLE 分割槽表分割槽拆分

oracle建立分割槽表,分割槽規則為按照日期進行分割槽,由於投產日期未知,因此建議使用按照當前日期自動建立分割槽。僅需建立乙個max分割槽,然後通過split進行分割槽拆分,建立一年前的全部分割槽。示例 如下 create table wen dt decimal 8,0 id decimal 1...

oracle表分割槽設計 ORACLE 分割槽表的設計

分割槽表的概念 分割槽致力於解決支援極大表和索引的關鍵問題。它採用他們分解成較小和易於管理的稱為分割槽的片 piece 的方法。一旦分割槽被定義,sql語句就可以訪問的操作某乙個分割槽而不是整個表,因而提高管理的效率。分割槽對於資料倉儲應用程式非常有效,因為他們常常儲存和分析巨量的歷史資料。分割槽表...

oracle表分割槽設計 ORACLE分割槽表的設計

分割槽表的概念 分割槽致力於解決支援極大表和索引的關鍵問題。它採用他們分解成較小和易於管理的稱為分割槽的片 piece 的方法。一旦分割槽被定義,sql語句就可以訪問的操作某乙個分割槽而不是整個表,因而提高管理的效率。分割槽對於資料倉儲應用程式非常有效,因為他們常常儲存和分析巨量的歷史資料。分割槽表...