You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除Scheduler Chain生成的批量调度作业时遇ORA-27475错误求助

解决Oracle Scheduler Chain生成作业无法删除的问题

问题分析

报错ORA-27475: "GIA.RUN_CHAIN$UW_RPT_17193" must be a job说明你指定的对象并非常规作业(JOB),而是Scheduler Chain相关的其他对象——这类RUN_CHAIN$前缀的对象通常是链的运行实例,不属于DBMS_SCHEDULER.DROP_JOB的处理范畴,所以直接调用该过程会报错。

解决步骤

1. 先确认对象真实类型

执行以下SQL排查对象的具体类型:

-- 查所有同名对象类型
SELECT owner, object_name, object_type 
FROM dba_objects 
WHERE object_name LIKE 'RUN_CHAIN$UW_RPT_%';

-- 查是否为常规作业
SELECT owner, job_name, job_type 
FROM dba_scheduler_jobs 
WHERE job_name LIKE 'RUN_CHAIN$UW_RPT_%';

-- 查是否为链对象
SELECT owner, chain_name 
FROM dba_scheduler_chains 
WHERE chain_name LIKE 'RUN_CHAIN$UW_RPT_%';

-- 查是否为链运行实例
SELECT owner, run_name 
FROM dba_scheduler_runs 
WHERE run_name LIKE 'RUN_CHAIN$UW_RPT_%';

2. 删除链运行实例(最常见情况)

如果查询结果显示是链的运行实例,使用DBMS_SCHEDULER.DROP_RUN删除单个实例:

BEGIN
  DBMS_SCHEDULER.DROP_RUN(
    run_name => 'GIA.RUN_CHAIN$UW_RPT_17193',
    force => TRUE
  );
END;
/

批量删除所有前缀匹配的实例,用动态SQL批量执行:

DECLARE
  CURSOR c_runs IS
    SELECT 'BEGIN DBMS_SCHEDULER.DROP_RUN(run_name => ''' || owner || '.' || run_name || ''', force => TRUE); END;' AS sql_stmt
    FROM dba_scheduler_runs
    WHERE run_name LIKE 'RUN_CHAIN$UW_RPT_%';
  v_count NUMBER := 0;
BEGIN
  FOR rec IN c_runs LOOP
    EXECUTE IMMEDIATE rec.sql_stmt;
    v_count := v_count + 1;
    -- 每删除100个提交一次,避免事务过大
    IF v_count MOD 100 = 0 THEN
      COMMIT;
    END IF;
  END LOOP;
  COMMIT;
END;
/

3. 删除链对象(若对象是链本身)

如果查询到是链对象,使用DBMS_SCHEDULER.DROP_CHAIN删除单个链:

BEGIN
  DBMS_SCHEDULER.DROP_CHAIN(
    chain_name => 'GIA.RUN_CHAIN$UW_RPT_17193',
    force => TRUE
  );
END;
/

批量删除链的动态SQL:

DECLARE
  CURSOR c_chains IS
    SELECT 'BEGIN DBMS_SCHEDULER.DROP_CHAIN(chain_name => ''' || owner || '.' || chain_name || ''', force => TRUE); END;' AS sql_stmt
    FROM dba_scheduler_chains
    WHERE chain_name LIKE 'RUN_CHAIN$UW_RPT_%';
BEGIN
  FOR rec IN c_chains LOOP
    EXECUTE IMMEDIATE rec.sql_stmt;
  END LOOP;
  COMMIT;
END;
/

4. 清理残留元数据(极端情况)

如果以上方法都无法删除,需用SYS权限查询Scheduler底层表,确认残留记录后删除(操作前务必备份,低峰期执行):

-- 查询链运行实例残留记录
SELECT * FROM sys.scheduler$_chain_run WHERE run_name LIKE 'RUN_CHAIN$UW_RPT_%';

-- 删除残留记录
DELETE FROM sys.scheduler$_chain_run WHERE run_name LIKE 'RUN_CHAIN$UW_RPT_%';
COMMIT;

注意事项

  • 批量操作前先测试单个对象的删除命令,确认有效性。
  • 批量删除时加入提交间隔,避免因事务过大引发性能问题。
  • 操作前务必确认对象已废弃,避免误删正在运行的调度资源。

内容的提问来源于stack exchange,提问作者匿名用户

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:20:22