欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文詳解Oracle如何停止正在運行的Job

 更新時間:2025年09月18日 09:06:59   作者:文牧之  
Oracle?Job是Oracle數(shù)據(jù)庫中的一個核心特性,用于在預(yù)定義的時間執(zhí)行特定的數(shù)據(jù)庫任務(wù),比如運行SQL腳本、數(shù)據(jù)備份、維護或性能監(jiān)控等,這篇文章主要介紹了Oracle如何停止正在運行Job的相關(guān)資料,需要的朋友可以參考下

Oracle 如何停止正在運行的 Job

先了解是dbms_job 還是 dbms_scheduler,再確定操作命令。

一 使用 DBMS_JOB 包停止作業(yè)(適用于舊版 Job)

1.1 查看正在運行的 Job

SELECT job, what, this_date, this_sec, failures, broken 
FROM user_jobs 
WHERE running = 1;

1.2 停止正在運行的 Job

-- 方法1:將作業(yè)標記為 broken 狀態(tài)
BEGIN
  DBMS_JOB.BROKEN(job_id, TRUE);
  COMMIT;
END;
/

-- 方法2:直接刪除作業(yè)
BEGIN
  DBMS_JOB.REMOVE(job_id);
  COMMIT;
END;
/

二 使用 DBMS_SCHEDULER 包停止作業(yè)(推薦用于新版 Scheduler Job)

2.1 查看正在運行的 Scheduler Job

SELECT job_name, status, elapsed_time 
FROM user_scheduler_running_jobs;

2.2 停止正在運行的 Scheduler Job

-- 方法1:停止單個作業(yè)
BEGIN
  DBMS_SCHEDULER.STOP_JOB(job_name => 'YOUR_JOB_NAME', force => TRUE);
END;
/

-- 方法2:停止所有運行中的作業(yè)(謹慎使用)
BEGIN
  FOR r IN (SELECT job_name FROM user_scheduler_running_jobs) LOOP
    DBMS_SCHEDULER.STOP_JOB(r.job_name, force => TRUE);
  END LOOP;
END;
/

三 通過會話級別終止 Job

3.1 查找 Job 對應(yīng)的會話

SELECT s.sid, s.serial#, s.username, s.program, j.job, j.what
FROM v$session s, dba_jobs_running jr, dba_jobs j
WHERE s.sid = jr.sid
AND jr.job = j.job;

3.2 終止會話

ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;

四 注意事項

  1. 強制停止 vs 正常停止

    • force => FALSE(默認):等待當前操作完成
    • force => TRUE:立即中斷
  2. 狀態(tài)檢查

    -- 檢查作業(yè)狀態(tài)
    SELECT job_name, state FROM user_scheduler_jobs;
    
    -- 檢查作業(yè)運行歷史
    SELECT * FROM user_scheduler_job_run_details 
    ORDER BY log_date DESC;
    
  3. 自動重試:停止作業(yè)不會自動禁用,如需永久禁用:

    BEGIN
      DBMS_SCHEDULER.DISABLE('YOUR_JOB_NAME');
    END;
    /
    
  4. 依賴關(guān)系:停止鏈式作業(yè)(chain job)時可能需要停止整個鏈

五 最佳實踐

  1. 先檢查后停止

    -- 檢查作業(yè)詳情
    SELECT job_name, enabled, state, run_count, failure_count
    FROM user_scheduler_jobs
    WHERE job_name = 'YOUR_JOB_NAME';
    
  2. 記錄操作

    -- 記錄停止作業(yè)的操作
    INSERT INTO job_control_log 
    VALUES('YOUR_JOB_NAME', 'STOPPED', SYSDATE, USER);
    COMMIT;
    
  3. 后續(xù)處理

    • 停止后可能需要手動清理殘留數(shù)據(jù)
    • 對于重要作業(yè),停止后應(yīng)考慮重新調(diào)度

更詳細的內(nèi)容請查看官方文檔:

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/arpls/DBMS_JOB.html#GUID-8C62D808-D7A3-4D21-B87F-A229B7CE1956

總結(jié)

到此這篇關(guān)于Oracle如何停止正在運行的Job的文章就介紹到這了,更多相關(guān)Oracle停止正在運行的Job內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論