oracle定時刪除表空間的資料並釋放表空間

2021-04-13 13:40:50 字數 1465 閱讀 1557

這兩天我乙個朋友問我乙個問題,他想定期刪除乙個表裡資料,只保留最近乙個星期的資料

,而且要考慮釋放磁碟空間,所以我幫他做了個定時任務。判斷時間是通過表裡的乙個列,型別

是資料型,是utc時間。剛開始還想把utc時間轉化成現在的時間

utc時間是從2023年1月1號零時開始到現在的總秒數

declare

t number;

begin

t := (to_date('2004-10-12 00:00:00','yyyy-mm-dd hh24:mi:ss')-to_date('1970-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))*24*60*60*1000;

dbms_output.put_line(t);

end;

declare

t date;

begin

t := to_date('1970-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')+1097630923000/(24*60*60*1000);

dbms_output.put_line(to_char(t,'yyyy-mm-dd hh24:mi:ss'));

end;

但後來一想,那需要那麼麻煩啊,只要計算出一周的秒數,用最能近的utc時間減去7天的總秒數,和七天前的時間做比較就ok了

於是方法如下:

1. //建立儲存過程

create or replace procedure del_tab as

v_time number;

begin

select max(aa.utc) into v_time from tablename ; //tablename換成你的表名

execute immediate 'delete from tablename where tablename.utc2. //建立定時job

sql> variable job_id  number;   //定義任務id

3.//啟動任務(每天執行一次)

sql> begin

2  dbms_job.submit(:job_id,' trun_tab;',sysdate,'sysdate+1/24');   //這是每天執行,如果修改時間間隔可以修改「sysdate+1/144」

3  end;

4  /

4. 你可以測試下

sql> select job,next_date,what from user_jobs; //用這個語句檢視任務id,然後執行下面的語句

這個是立刻執行的

sql> begin

2  dbms_job.run(2);

3  end;

4  /

pl/sql 過程已成功完成。

然後在檢視表的內容 如果表的內容為空 ,證明已經刪除了

5. //刪除定時任務:

dbms_job.run(2)

oracle定時刪除表空間的資料並釋放表空間

這兩天我乙個朋友問我乙個問題,他想定期刪除乙個表裡資料,只保留最近乙個星期的資料 而且要考慮釋放磁碟空間,所以我幫他做了個定時任務。判斷時間是通過表裡的乙個列,型別 是資料型,是utc時間。剛開始還想把utc時間轉化成現在的時間 utc時間是從1970年1月1號零時開始到現在的總秒數 declare...

oracle定時刪除表空間的資料並釋放表空間

這兩天我乙個朋友問我乙個問題,他想定期刪除乙個表裡資料,只保留最近乙個星期的資料 而且要考慮釋放磁碟空間,所以我幫他做了個定時任務。判斷時間是通過表裡的乙個列,型別 是資料型,是utc時間。剛開始還想把utc時間轉化成現在的時間 utc時間是從1970年1月1號零時開始到現在的總秒數 declare...

oracle定時刪除表空間的資料並釋放表空間

這兩天我乙個朋友問我乙個問題,他想定期刪除乙個表裡資料,只保留最近乙個星期的資料 而且要考慮釋放磁碟空間,所以我幫他做了個定時任務。判斷時間是通過表裡的乙個列,型別 是資料型,是utc時間。剛開始還想把utc時間轉化成現在的時間 utc時間是從1970年1月1號零時開始到現在的總秒數 declare...