公司內(nèi)做的項目是工廠內(nèi)的,一般工廠內(nèi)數(shù)據(jù)要求的是實時性,很久之前的數(shù)據(jù)可以自行刪除處理,我們數(shù)據(jù)庫用的oracle,所以就想著寫一個腳本來刪除,這樣的話,腳本不管放在那里使用都可以達到效果
由于服務器是windows,參照Oracle Shell Scripting中,我們寫一下windows下的腳本
首先刪除數(shù)據(jù)的sql語句寫一下
1
2
3
4
5
|
DELETE FROM tablename WHERE createdtime<TRUNC(SYSDATE)-59; --刪除59天前的數(shù)據(jù) commit ; --提交事務 alter table tablename enable row movement; --數(shù)據(jù)刪除之后會產(chǎn)生很多空行,打開行移動,移動之后rowid會發(fā)生變化 alter table tablename shrink space ; --連同索引一起壓縮,解決delete語句造成的空間未釋放問題 alter table tablename disable row movement; --關(guān)閉行遷移 |
這一段相當于
1
2
3
4
5
6
|
SPOOL C:\emp.lst SET LINESIZE 100 SET PAGESIZE 50 SELECT * FROM emp; SPOOL OFF |
所以我們得到了一個新的sql文件,例如C:\emp.sql
1
2
3
4
5
6
7
8
9
10
|
CONNECT scott/tiger --開始刪除 DELETE FROM tablename WHERE createdtime<TRUNC(SYSDATE)-59; commit ; alter table tablename enable row movement; alter table tablename shrink space ; alter table tablename disable row movement; --結(jié)束刪除 --如果刪除多個表,可以將上面語句復制一下,tablename和where條件修改一下就可以了 EXIT; |
然后創(chuàng)建一個文件C:\get_emp.bat
1
2
3
4
5
6
|
@ echo off echo 開始刪除過期數(shù)據(jù)并縮容 sqlplus /nolog @C:\emp.sql echo 執(zhí)行成功 pause exit |
保存之后,執(zhí)行一下看會不會出現(xiàn)問題,如果不會出現(xiàn)問題,添加一下windows的任務計劃程序,或者自己寫一個windows服務,定期調(diào)用一下這個bat就可以了
linux版本的類似,寫法這個連接下面有,寫完之后先進行測試,然后使用cron或者其他進行定期調(diào)用即可
當然,操作數(shù)據(jù)庫表不局限于定期清理數(shù)據(jù),也可以進行報表生成、新表創(chuàng)建等其他操作
到此這篇關(guān)于oracle刪除超過N天數(shù)據(jù)腳本的文章就介紹到這了,更多相關(guān)oracle刪除數(shù)據(jù)腳本內(nèi)容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/wangpengzong/archive/2022/02/28/15944641.html