Oracle数据库使用SQL Developer删除dbms_jobs后重现问题求助
解决Oracle DBMS_Jobs删除后重现的问题
我完全懂你现在的头疼——明明在SQL Developer里删掉了DBMS_Jobs,结果这些任务转头又冒出来了,本来以为是损坏的任务自动重现,但按道理删除操作应该能彻底让它们停止运行。别慌,咱们一步步排查解决:
第一步:先确认你的删除操作真的生效了
很多时候问题出在删除操作没真正完成。先在SQL Developer里跑个查询,看看目标任务是不是还在:
SELECT job, what, next_date, broken FROM dba_jobs WHERE job = <你的任务ID>;
- 如果查出来还有这个任务,说明之前的删除没成功。正确删除DBMS_Jobs的姿势是用PL/SQL块,而且一定要提交事务:
BEGIN DBMS_JOB.REMOVE(<你的任务ID>); COMMIT; END; /
要是忘了加COMMIT,一旦会话断开,未提交的删除操作就会回滚,任务自然又回来了。
第二步:排查是不是有东西在自动重建任务
有些场景下,可能存在隐藏的脚本、触发器或者其他定时任务在偷偷重建你删掉的DBMS_Jobs。可以做这些检查:
- 查数据库触发器,看看有没有在特定事件(比如数据库启动、表更新)里创建任务的逻辑:
SELECT trigger_name, trigger_body FROM dba_triggers WHERE trigger_body LIKE '%DBMS_JOB%';
- 检查其他DBMS_Jobs或者DBMS_SCHEDULER任务,有没有执行创建任务的操作:
SELECT job, what FROM dba_jobs WHERE what LIKE '%DBMS_JOB.CREATE_JOB%'; SELECT job_name, job_action FROM dba_scheduler_jobs WHERE job_action LIKE '%DBMS_JOB%';
第三步:先"打残"再删除,处理损坏的任务
如果是任务本身损坏导致看似"重现",可以先把任务标记为Broken(阻止它运行),再删除:
BEGIN DBMS_JOB.BROKEN(<你的任务ID>, TRUE); COMMIT; DBMS_JOB.REMOVE(<你的任务ID>); COMMIT; END; /
这种方式能更彻底地清理掉有问题的任务,避免它因为自身异常出现"死而复生"的情况。
第四步:验证删除结果
执行完删除后,再跑一遍dba_jobs的查询确认任务已经消失。另外可以看看数据库的alert日志,有没有和这个任务相关的错误信息,能帮你定位是不是有其他异常导致任务重现。
内容的提问来源于stack exchange,提问作者Nola
相关产品推荐
相关产品推荐

