您的位置:首页 > 其它

10g里 DBMS_SCHEDULER 和 DBMS_JOB 区别

2008-12-17 17:56 603 查看
10g里 DBMS_SCHEDULER 和 DBMS_JOB 区别

从10g开始,DBMS_SCHEDULER 逐步会替换掉 DBMS_JOB,下面是它们的区别及其替换的理由。

DBMS_JOB has been around forever, and now it is deprecated. Although DBMS_JOB still exists in 10g and 11g, but only for backward compatibility. No new features are being added to dbms_job and you will likely quickly run into its limitations. Oracle recommends the use of DBMS_SCHEDULER in releases 10g and up. DBMS_SCHEDULER is a much more robust package and fully-featured than DBMS_JOB. To use the DBMS_SCHEDULER package a user must be granted the CREATE JOB privilege.

DBMS_SCHEDULER includes the following features that DBMS_JOB does not have :

logging of job runs (job history)
simple but powerful scheduling syntax (similar to but more powerful than cron syntax)
running of jobs outside of the database on the operating system
resource management between different classes of jobs
use of job arguments including passing of objects into stored procedures
privilege-based security model for jobs
naming of jobs and comments in jobs
stored, reusable schedules

Features in releases after 10g Release 1 include :

dependencies between job units (10gR2 and up)
scheduling based on financial calendars and fiscal quarters (10gR2 and up)
event based jobs which run when an event is received (10gR2 and up)
running of jobs on remote machines (11gR1 and up)
e-mail notifications on job events of interest (10gR2 and up)
starting a job based on arrival of a file (10gR2 and up)

Here simple comparison for the codes :

Old using DBMS_JOB scheduler.VARIABLE l_job NUMBER;
BEGIN
DBMS_JOB.submit (
job => :l_job,
what => ‘BEGIN NULL; /* code to execute*/ END;’,
next_date => SYSDATE,
interval => ‘SYSDATE + 1 /* 1 Day */’);COMMIT;
END;
/
PRINT l_job
New with DBMS_SCHEDULER scheduler.BEGIN
DBMS_SCHEDULER.create_job (
job_name => ‘dummy_job’,
job_type => ‘PLSQL_BLOCK’,
job_action => ‘BEGIN NULL; /* code to execute */ END;’,
start_date => SYSTIMESTAMP,
repeat_interval => ‘SYSTIMESTAMP + 1 /* 1 Day */’);
END;
/

After replace DBMS_JOB with DBMS_SCHEDULER for all jobs successful, the job_queue_processes parameter can now be set to zero.

SQL> alter system set job_queue_processes=0;

There is also a forum dedicated to questions about dbms_scheduler here :

http://forums.oracle.com/forums/forum.jspa?forumID=193
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:388480262167
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: