上一篇
最新动态:根据2025年8月Oracle官方技术社区的消息,Oracle Database 23c进一步优化了job调度机制,新增了对多时区任务调度的支持,并增强了日志追踪功能,使得DBA能够更高效地管理和监控后台任务。
Oracle Job(也称为DBMS_JOB或DBMS_SCHEDULER)是Oracle数据库内置的任务调度工具,允许用户在指定时间或周期性地自动执行PL/SQL代码块、存储过程或外部脚本,它广泛应用于数据备份、报表生成、数据清理等场景,是DBA和开发者的得力助手。
核心区别:
DECLARE job_id NUMBER; BEGIN DBMS_JOB.SUBMIT( job => job_id, what => 'BEGIN my_procedure(); END;', next_date => SYSDATE + 1/24, -- 1小时后执行 interval => 'SYSDATE + 1' -- 每天重复 ); COMMIT; DBMS_OUTPUT.PUT_LINE('Job ID: ' || job_id); END;
SELECT job, what, next_date, interval FROM user_jobs;
EXEC DBMS_JOB.RUN(123); -- 123为Job ID
EXEC DBMS_JOB.REMOVE(123);
BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'nightly_report', job_type => 'STORED_PROCEDURE', job_action => 'generate_daily_report', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=DAILY; BYHOUR=2', -- 每天凌晨2点 enabled => TRUE ); END;
ADD_JOB_DEPENDENCY
设置任务顺序。 CREATE_JOB_CLASS
限制CPU或内存使用。 SELECT job_name, status, run_duration FROM USER_SCHEDULER_JOB_RUN_DETAILS;
user_jobs
或user_scheduler_jobs
的FAILURE_COUNT
字段。 JOB_QUEUE_PROCESSES
参数值大于0: ALTER SYSTEM SET JOB_QUEUE_PROCESSES=10;
在Oracle 23c中,可通过SET_ATTRIBUTE
指定时区:
DBMS_SCHEDULER.SET_ATTRIBUTE( 'nightly_report', 'time_zone', 'Asia/Shanghai' );
场景:每月1号凌晨清理3个月前的日志表。
BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'purge_old_logs', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN DELETE FROM logs WHERE create_time < ADD_MONTHS(SYSDATE, -3); COMMIT; END;', start_date => TRUNC(ADD_MONTHS(SYSDATE,1), 'MONTH'), repeat_interval => 'FREQ=MONTHLY; BYMONTHDAY=1', enabled => TRUE ); END;
Oracle Job是自动化运维的核心工具,合理使用能大幅提升效率,对于新项目,建议优先选择功能更强大的DBMS_SCHEDULER
,而传统DBMS_JOB
更适合简单场景,记得定期检查任务日志,避免“僵尸任务”堆积哦!
小贴士:在Oracle 23c中,可通过DBA_SCHEDULER_JOBS
视图的AI_PREDICTED_NEXT_RUN
字段预测下次执行时间,提前规划资源。
本文由 玄思嘉 于2025-08-02发表在【云服务器提供商】,文中图片由(玄思嘉)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/510830.html
发表评论