日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

oracle 定时清理表数据,关于Oracle存储过程和调度器实现自动对数据库过期数据清除的问题...

發布時間:2023/12/19 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 定时清理表数据,关于Oracle存储过程和调度器实现自动对数据库过期数据清除的问题... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

數據庫中的某些數據不一定要長期保存,例如:日志等數據、當保存一定時間后,系統允許刪除所以系統需要定期刪除那些已經過期的數據。

實現原理

1張表(SYS_DBA_CONFIG)、1個Job定時器(Job_DBA_AutoRunScript)和2個存儲過程(DBA_AUTODELETE、DBA_AUTORUNSCRIPT)實現自動清理不同表中的過期數據。 通過定時器調用存儲過程查表判斷是否開啟過期數據清理功能,如果開啟調用數據清理的存儲過程。

建表

建立數據庫任務配置表,用來管理數據庫中那些表需要定期處理。

表格類型

字段名

Type

非空

注解

NAME

VARCHAR2(200)

?

任務執行對象名稱

VALUE

VARCHAR2(200)

?

設置保存時間(天)

TYPE

VARCHAR2(200)

?

執行類型

ISRUN

NUMBER(1,0)

?

是否執行

REMARK

VARCHAR2(200)

對應表中判斷時間的字段

COLUMNTYPE

VARCHAR2(200)

字段類型

建表語法

create table SYS_DBA_CONFIG

(

NAME VARCHAR2(200) not null,

value VARCHAR2(200) not null,

type VARCHAR2(200) not null,

REMARK VARCHAR2(200) not null

ISRUN NUMBER(1) not null,

COLUMNTYPE VARCHAR2(200)

);

數據展示

表中的數據有兩種:

存儲過程是否啟用

表格設置保存時間

創建存儲過程

判斷系統是否啟動定期清除功能的存儲過程

根據類型和是否啟用查找刪除數據的存儲過程

CREATE OR REPLACE PROCEDURE xxx."DBA_AUTORUNSCRIPT" AS

/*******************************************************

功能:定期運行指定腳本V1.0

說明:SQL語句從配置表SYS_DBA_CONFIG讀取

********************************************************/

v_Name VARCHAR2(500); --Sql語句變量

v_Value VARCHAR2(250); --Sql語句變量

CURSOR CS IS SELECT UPPER(Name),VALUE FROM SYS_DBA_CONFIG WHERE LOWER(TYPE)='auto_run_script' AND ISRUN = 1;

BEGIN

OPEN CS;

LOOP

FETCH CS INTO v_Name, v_Value;--獲得當前記錄的數據

EXIT WHEN CS%NOTFOUND;

dbms_output.put_line('執行腳本('||v_Name||'):'||v_Value);

EXECUTE IMMEDIATE ('BEGIN '||v_Name||'; COMMIT; END;');

END LOOP;

END DBA_AutoRunScript;

執行刪除過期數據的存儲過程

根據對應的表中的對應字段和當前時間比較,如果時間大于對應的保存時間天數,刪除數據。

CREATE OR REPLACE PROCEDURE xxx."DBA_AUTODELETE" AS

/*******************************************************

功能:根據保留天數刪除數據V1.0

說明:表名稱、保存天數從配置表SYS_DBA_CONFIG讀取

********************************************************/

v_name varchar2(250); --對應的表名

v_remark varchar2(250); --對應的表字段

v_value number(10); --表對應的表數據天數

v_endTime date; --清除的具體時間

v_sql varchar2(250);

v_columntype varchar2(20);

CURSOR CS IS SELECT Name,VALUE,remark,columntype FROM SYS_DBA_CONFIG WHERE LOWER(TYPE)='auto_delete_table' AND ISRUN=1;

BEGIN

OPEN CS;

LOOP

FETCH CS INTO v_name, v_value,v_remark,v_columntype;--獲得當前記錄的數據

EXIT WHEN CS%NOTFOUND;

dbms_output.put_line('刪除的表名:' || v_name||' 保留天數:'||v_value);

v_endTime:=TRUNC(SYSDATE- v_value);

if v_columntype='DATE' then

v_sql := 'delete from ' || v_name||' where '|| v_remark||' < TRUNC(SYSDATE- '||v_value||')' ;

dbms_output.put_line('刪除的sql:' || v_sql);

else

v_sql := 'delete from ' || v_name||' where to_date('||v_remark||',''yyyy-mm-dd hh24:mi:ss'') < TRUNC(SYSDATE- '||v_value||')';

dbms_output.put_line('刪除的sql:' || v_sql);

end if;

begin

execute immediate v_sql;

end;

END LOOP;

END DBA_AutoDelete;

創建Jobs定時器

通過定時器啟動判斷系統是否啟動定期清除功能的存儲過程,然后存儲過程再調用刪除數據的存儲過程完成數據清除。

begin

dbms_scheduler.create_job

(

job_name => 'Job_DBA_AutoRunScript',

job_type => 'PLSQL_BLOCK',

job_action => 'begin DBA_AutoRunScript; end;',

repeat_interval => 'FREQ=DAILY;BYHOUR=3;byminute=30',

enabled => true

);

end;

總結

后端可以只通過維護SYS_DBA_CONFIG表來維護數據庫的過期數據清除管理,不需要后端去處理刪除數據的業務邏輯。

到此這篇關于Oracle存儲過程和調度器實現自動對數據庫過期數據清除的文章就介紹到這了,更多相關Oracle實現自動對數據庫過期數據清除內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

總結

以上是生活随笔為你收集整理的oracle 定时清理表数据,关于Oracle存储过程和调度器实现自动对数据库过期数据清除的问题...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。