程式碼
CREATE PROCEDURE DEVELOP.SP_CLEANSYNCOLDDATA AS
m_DataTime DATE;
BEGIN
m_DataTime := SYSDATE - 2/24; -- 2/24 天 = 2 小時
DELETE FROM T_TRANS_PORT_SYN
WHERE D_UPDATE_TIME <= m_DataTime;
DELETE FROM T_TRANS_LINK_ODU_TEST_SYN
WHERE D_UPDATE_TIME <= m_DataTime;
COMMIT;
END;
邏輯解析
SYSDATE 返回資料庫當前日期時間(精確到秒)。
2/24 表示 2 小時(1 天 = 24 小時)。
- 變數
m_DataTime 為「當前時間減去 2 小時」。
- 兩條
DELETE 分別清理 T_TRANS_PORT_SYN 與 T_TRANS_LINK_ODU_TEST_SYN 中 D_UPDATE_TIME 早於或等於該閾值的記錄。
COMMIT 確保刪除持久化。
排程執行
-- 使用 DBMS_SCHEDULER 每小時執行一次
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'JOB_CLEAN_SYNC_OLD',
job_type => 'STORED_PROCEDURE',
job_action => 'DEVELOP.SP_CLEANSYNCOLDDATA',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=HOURLY; INTERVAL=1',
enabled => TRUE,
comments => '每小時清理 2 小時前的同步數據'
);
END;
效能建議
- 在
D_UPDATE_TIME 上建立索引,加速篩選。
- 若數據量極大,考慮分區表或批次刪除(
DELETE ... WHERE ROWNUM <= 10000 循環)。
- 監控
USER_SCHEDULER_JOB_RUN_DETAILS 確認執行狀態。