Oracle分割槽表的一些簡單技巧

2022-09-21 03:27:07 字數 2189 閱讀 2641

select

*from user_tab_partitions

where table_name = ***x

可查對應表的具體分割槽情況

不刪分割槽僅清空分割槽資料推薦使用

alter

table table_name truncate partition_name

不建議使用

delete

from table_name where partition_name = ***x

delete from的形式對於資料量大的表來說有可能導致資料庫服務卡死,且對水位線無影響

清空資料且刪除資料

alter

table table_name drop

partition partition_name

目標表為list分割槽,且儲存週期為36個月,每個儲存週期為1個分割槽,分割槽名為sum_monthyyyymm,邏輯實現表同步之前的分割槽清空操作

具體**如下

declare

v_sql varchar2(

500)

; v_sum_month varchar2(

10) :=

'201910'

; v_part_res number :=0;

v_part_num number :=0;

v_min_month varchar2(30)

;begin

v_sql :=

'select count(1) from user_tab_partitions where table_name = ''table_name''

and partition_name=

''sum_month' || v_sum_month || ''''

;execute immediate v_sql

into v_part_res;

--dbms_output.put_line(v_part_res);

if v_part_res =

0then

--判斷是否有對應分割槽

begin

--沒有分割槽則新增對應分割槽

v_sql :=

'select count(1) from user_tab_partitions where table_name = ''table_name''';

execute immediate v_sql into v_part_num;

--查詢當前儲存週期數

if v_part_num >=

36then

--超過36個週期清除最小週期

begin

v_sql :=

'select min(partition_name) from user_tab_partitions where table_name = ''table_name''';

execute immediate v_sql into v_min_month;

--查詢當前最小統計週期

execute immediate 'alter table table_name drop partition '

||v_min_month;

--刪除最早的分割槽

end;

endif

; v_sql :=

'alter table table_name add partition sum_month'

|| v_sum_month ||

' values(''' || v_sum_month || ''')'

;execute immediate v_sql;

end;

else

begin

--有分割槽則清空對應分割槽

execute immediate 'alter table table_name truncate partition sum_month'

||v_sum_month;

end;

endif

;end

;

需要注意,分割槽名稱格式得固定,且需要同步的分割槽字段格式不變

如果有其他更好的實現方法歡迎討論

分割槽表的一些操作

一 建立表空間 create tablespace dinya space01 datafile f user data1.dbf size 50m autoextend on next 50m maxsize 20480m extent management local create tables...

對分割槽表的一些總結

分割槽表分為 範圍分割槽 partition by range 列表分割槽 partition by list hash分割槽 partition by hash 有多少個分割槽就有多少個segment 其實hash分割槽最大的好處在於,將資料根據一定的hash演算法,均勻分布到不同的分割槽中去,避...

oracle查分割槽表的一些注意事項

昨天有個同事找我看了一段sql,說是很慢,我首先看了看執行計畫,發現cost很大,但是同時我也發現分割槽讀取的有很大的問題。表示這樣的 create table test1 day id number partition by range day id partition part 0 values...