使用DBMS_JOB.SUBMIT结合INSERT语句迁移数据表失败求助
解决DBMS_JOB结合INSERT迁移数据失败的问题
你的代码核心问题是作业中的INSERT操作未提交事务。DBMS_JOB的作业运行在独立会话中,执行完INSERT后如果没有显式COMMIT,事务会自动回滚,导致数据无法持久化到customers_tbl1。
修改后的可用代码
DECLARE l_job NUMBER; BEGIN DBMS_JOB.SUBMIT( job => l_job, what => 'BEGIN insert into customers_tbl1 select * from customers_tbl; COMMIT; END;', next_date => SYSDATE, -- 立即触发作业执行 interval => NULL -- 仅执行一次,无需重复调度 ); COMMIT; -- 提交作业调度的事务,确保作业被成功注册 END; /
额外排查步骤
- 检查作业执行状态:通过查询视图确认作业是否正常执行
若SELECT job, what, next_date, failures, broken FROM user_jobs;failures值大于0,说明作业执行出错,可查看告警日志或相关会话日志定位问题。 - 手动触发测试:如果需要立即验证逻辑,可调用
DBMS_JOB.RUN(l_job);手动执行作业,同时观察是否有报错信息。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

