首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Oracle PL/SQL 儲存過程解析:定時清理兩小時前的同步數據

     編輯:程式設計疑難解答

程式碼

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;

效能建議

  1. 在 D_UPDATE_TIME 上建立索引,加速篩選。
  2. 若數據量極大,考慮分區表或批次刪除(DELETE ... WHERE ROWNUM <= 10000 循環)。
  3. 監控 USER_SCHEDULER_JOB_RUN_DETAILS 確認執行狀態。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved