公司內做的專案是工廠內的,一般工廠內資料要求的是實時性,很久之前的資料可以自行洗掉處理,我們資料庫用的oracle,所以就想著寫一個腳本來洗掉,這樣的話,腳本不管放在那里使用都可以達到效果
由于服務器是windows,參照Oracle Shell Scripting中,我們寫一下windows下的腳本
首先洗掉資料的sql陳述句寫一下
DELETE FROM tablename WHERE createdtime<TRUNC(SYSDATE)-59; --洗掉59天前的資料
commit; --提交事務
alter table tablename enable row movement; --資料洗掉之后會產生很多空行,打開行移動,移動之后rowid會發生變化
alter table tablename shrink space; --連同索引一起壓縮,解決delete陳述句造成的空間未釋放問題
alter table tablename disable row movement; --關閉行遷移
這一段相當于
SPOOL C:\emp.lst
SET LINESIZE 100
SET PAGESIZE 50
SELECT *
FROM emp;
SPOOL OFF
所以我們得到了一個新的sql檔案,例如C:\emp.sql
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;
--結束洗掉
--如果洗掉多個表,可以將上面陳述句復制一下,tablename和where條件修改一下就可以了
EXIT;
然后創建一個檔案C:\get_emp.bat
@echo off
echo 開始洗掉過期資料并縮容
sqlplus /nolog @C:\emp.sql
echo 執行成功
pause
exit
保存之后,執行一下看會不會出現問題,如果不會出現問題,添加一下windows的任務計劃程式,或者自己寫一個windows服務,定期呼叫一下這個bat就可以了
linux版本的類似,寫法這個連接下面有,寫完之后先進行測驗,然后使用cron或者其他進行定期呼叫即可
當然,操作資料庫表不局限于定期清理資料,也可以進行報表生成、新表創建等其他操作
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/434481.html
標籤:其他
上一篇:PostgreSQL VACUUM 之深入淺出 (四)
下一篇:MySQL explain結果Extra中"Using Index"與"Using where; Using index"區別探究
