oracle大表刪除資料方案

2022-08-16 20:00:29 字數 1380 閱讀 1792

需求簡介:生產資料庫乙個表有27億多資料,要刪除其中其中2023年之前的歷史資料(大約4億左右),表資訊:5個字段的主鍵、乙個欄位的單列索引、hash分割槽。

資料庫情況:每日1:00-9:00會跑增量資料程式,其他sql不能影響增量程式。(所以資料要在9:00-24:00之內跑完)

解決方案1:

delete

/*+parallel(32)

*/from table_name where date2014-01-01

','yyyy-mm-dd

');

結果:刪除了8個小時,才刪除幾千萬,怕影響第二天增量程式,直接殺程序,程序殺完資料回滾了20多小時,第二天增量最終還是影響了。

解決方案2(採用的):

--

1,建分割槽表(如果不是分割槽表可以create...select)

--2,插入資料

insert

/*+parallel(32)

*/into

table_name_new

select

/*+parallel(32)*/*

from table_name where date>=to_date('

2014-01-01

','yyyy-mm-dd');

--3,建立索引

create

index index_name1 on table_neme_new(column1) parallel 32;--

4,索引併發建立要關閉並行,這樣在我們使用索引時會影響執行計畫,也會消耗很多的資源。所以,我們需要對這個並行度進行修改,改成noparallel

alter

index

index_name1 noparallel;

--5,建立主鍵,由於建立主鍵不能開啟並行,所以要先建立主鍵字段唯一索引,再建立主鍵

create

unique

index pk_name1 on table_neme_new(column1,column2,...) parallel 32

;alter

index

pk_name1 noparallel;

alter

table table_neme_new add

constraint pk_name1 primary

key(column1,column2,...);

--6,核對資料量沒問題,將老表rename其他名字,將新錶rename老名字

結果:插入資料3.5小時,建單列索引40分鐘,建主鍵40分鐘。達到可以接受範圍。

Oracle大量刪除資料方案

觀點一 create or replace procedure delete table isi number 10 begin for x in select from emp where deptno like a loop delete emp where emp.id x.id i i 1 ...

oracle刪除資料

oracle在表中刪除資料的語法是 語法結構 delete from表名 where 條件 演示 sql delete from infos where stuid s100103 1 row deleted sql commit truncate 在資料庫操作中,truncate命令 是乙個ddl...

oracle刪除資料釋放表空間流程

生產環境 資料庫裡空間不足,niptest 表空間251g,只使用了17g 再alter database datafile niptest1 resize 10g 的時候說超出了範圍要求 由於表變動比較頻繁,高水位值比較大 高水位 hwm high water mark oracle中block有...