Oracle數據庫裡存放著各種各樣的數據,其中有一些數據表會隨著時間的推移,越來越大。如交友聊天的日志、 短信收發的日志、生產系統的日志、動態網站發布系統的日志等等。這樣的信息又和時間緊密相關,有沒有辦法 讓這些日志表能到時間自動分割成歷史年月(如log200308,log200309)的表呢? 請看看我用存儲過程定期分割表的 方法吧。
一、問題的引出
1.初學數據庫時只知道用delete來刪除表裡的數據。但在Oracle數據庫裡,大量delete記錄後,並不能釋放表
所占用的物理空間,這裡面有一個高水位的概念,所以我們不能用delete來分割表。
2.用重命名(rename)表的方法
(1).先建一個和原來日志表(假如是log)數據結構一模一樣的新表(如log_new),建約束、索引及指定字段的默
認值;
(2).重命名表log到log_YYYYMM;
要注意的問題是OLTP系統可能會因為DML操作阻礙重命名執行成功,出現ORA-00054資源正忙的錯誤提示,
需要試多次才能成功。
(3).重命名表log_new到log。
這樣應用程序不用修改(受影響的時間僅幾秒鐘),日志表就被截斷分割了。
上述步驟可以在Oracle裡可以用存儲過程來實現它們。