首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

DataPump 異常中斷後的正確清理姿勢:Job 級別終止與資源釋放實戰

     編輯:Java 綜合教學

問題背景:Kill 進程 ≠ 停止 Job

客戶透過 Ctrl+C 或 kill -9 強制終止 expdp 進程,導致資料庫後台 Job 仍在執行,轉儲檔案持續增長,表空間可用空間銳減。根因在於:DataPump 以 Job 形式在資料庫後台運行,客戶端進程終止不代表 Job 停止。

標準處理流程:Attach → Stop → Kill

  1. 查詢殘留 Job:
    SQL> SELECT job_name, state FROM dba_datapump_jobs;
    JOB_NAME              STATE
    SYS_EXPORT_TABLE_01   EXECUTING
    SYS_EXPORT_TABLE_02   EXECUTING
    
  2. Attach 至目標 Job:
    $ expdp '/ as sysdba' attach=SYS_EXPORT_FULL_01
    Export> stop_job=immediate
    Are you sure? yes
    
    Job 狀態轉為 IDLING。
  3. 徹底移除 Job:
    Export> kill_job
    Are you sure? yes
    
    Job 從 dba_datapump_jobs 消失,資源完全釋放。

關鍵操作差異對照

操作效果適用場景
stop_job優雅停止,保留 Job 元數據,可 start_job 繼續計劃性暫停、維護窗口
stop_job=immediate立即中斷,不等待 Worker 完成當前單元緊急停止、資源爭搶
kill_job徹底刪除 Job,釋放所有資源,不可恢復異常終止後清理、重新導出

最佳實踐原則

  • 嚴禁直接 kill -9 DataPump 進程,務必透過 expdp attach 管理 Job 生命週期。
  • 長時間導出建議使用 nohup 或 screen 避免會話斷開導致誤操作。
  • 導入(impdp)同理,異常中斷後同樣需透過 attach → kill_job 清理。
  • 定期巡檢 dba_datapump_jobs,及時發現殘留 Job 防止空間洩漏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved