oracle db 間隔分割槽妙用

2022-06-17 23:39:11 字數 1606 閱讀 7925

線上資料庫有幾張log 表,每天新增插入行數2千多萬,開發之前是使用delete 每天刪除一定資料量,後面隨著日誌表越來越大,刪除的sql 執行速度越來越慢,db redo、undo 量暴增,刪除速度慢(執行計畫都是全表掃瞄),影響db系統效能。與開發溝通,得知log 只需要保留最近7天的,7天前的都可以刪除,與開發協商,將幾張log 表改造為基於插入時間欄位的間隔分割槽表,按照天每天自動產生乙個分割槽,每天新的資料插入新的分割槽,dba部署db job 每天定期刪除7天之前的表分割槽,drop partition 是ddl ,執行速度快,資料瞬間刪除,對效能影響很小,目前已經平穩執行大半年,記錄之。

create or replace procedure sp_drop_patition_log as

v_sqlexec_1 varchar2(2000);

v_err_num number;

v_err_msg varchar2(100);

cursor cursor_part_info_1 is

select t.subobject_name partition_name

from dba_objects t

where object_name = upper('table_name')

and t.object_type = 'table partition'

and t.generated = 'y' -- the first partition is not allowed to drop

and t.created < sysdate - 7; -- look for partition before 7 days

record_part_info_1 cursor_part_info_1%rowtype;

begin

open cursor_part_info_1;

loop

fetch cursor_part_info_1

into record_part_info_1;

exit when cursor_part_info_1%notfound;

--delete the partition of table_name

v_sqlexec_1 := 'alter table table_name drop partition ' ||record_part_info_1.partition_name;

dbms_output.put_line('delete table_name partition=' ||record_part_info_1.partition_name );

dbms_utility.exec_ddl_statement(v_sqlexec_1);

end loop;

close cursor_part_info_1;

exception

when others then

v_err_num := sqlcode;

v_err_msg := substr(sqlerrm, 1, 100);

dbms_output.put_line('drop_patition_log fail,error code=' || v_err_num || 'err_desc=' || v_err_msg);

end;

Oracle DB日常操作

rac 啟動 關閉 啟動順序 首先啟動磁碟陣列,待陣列初始化完成後 約 2分鐘 啟動各節點伺服器 節點 1先啟動,再啟動節點 2 linux 下oracle rac 的簡單操作指令 1.啟動listner 切換到oracle 使用者,啟動 listner su oracle lsnrctl star...

Oracle DB 程序引數

後台程序 後台程序負責保證資料庫的穩定工作,每當資料庫啟動時,這些後台程序會自動啟動,並且持續整 個例項的生命週期,每個程序負責乙個獨特的任務。程序引數 程序縮寫 描述database writer dbwn 負責把髒資料寫回磁碟 log writer lgwr 負責把日誌資料寫到聯機日誌檔案 ch...

差分約束系統 間隔Intervals

2019 07 10 題目及 偽 題解更新 2021 05 16 我人真的傻了 這已經超出碳基生物的整活範圍了 沒想到時隔多年重學差分約束系統 搜到的題解竟然是兩年前自己打的555我真的是越學越菜 不過 好像貼成樓下樹形dp的了 更新了 tip 翻譯來自谷歌,如有出入請見諒 include incl...