dbms_scheduler和job有啥区别

Oracle数据库提供了多种方法来实现定时任务,以下是其中几种常用的方法:

DBMS_SCHEDULER:

Oracle的DBMS_SCHEDULER是一个高级的调度器,可以用来安排作业在特定的时间执行。

它提供了很多功能,如作业调度、作业依赖性、作业执行计划、日志记录等。

通常用于定期运行复杂的PL/SQL块或调用存储过程。

DBMS_JOB:

DBMS_JOB是Oracle的一个较旧的调度器,它允许你安排作业在特定的时间间隔内运行。

虽然功能相对简单,但仍然被一些应用所使用。

DBMS_OUTPUT.PUT_LINE:

这不是一个真正的“定时任务”,但它可以用来模拟定时输出。你可以在PL/SQL块中使用DBMS_OUTPUT.PUT_LINE来输出信息,并通过查询DBMS_OUTPUT来查看这些输出。

这对于简单的日志记录或调试可能很有用。

操作系统的定时任务:

你可以使用操作系统的定时任务工具(如Linux的cron或Windows的任务计划程序)来定期运行外部脚本或程序,该脚本或程序再与Oracle数据库进行交互。

SQL*Plus的@或START命令:

在SQL*Plus中,你可以使用@或START命令来运行脚本。结合操作系统的定时任务,你可以定期运行这些脚本。

其他第三方工具:

有许多第三方工具和应用程序可以与Oracle数据库集成,并为其提供定时任务功能。例如,你可以使用UNIX的cron作业来定期运行Oracle脚本。

使用PL/SQL存储过程:

你可以编写一个PL/SQL存储过程,并在其中使用DBMS_SCHEDULER.RUN_JOB来定期运行另一个作业。这可以用于创建更复杂的调度逻辑。

使用外部表:

通过创建一个外部表并将其与Oracle数据库关联,你可以定期从该外部表读取数据并执行相应的操作。这种方法通常与ETL工具或自定义脚本一起使用。

使用Java存储过程:

Oracle支持Java存储过程,这意味着你可以使用Java的定时任务功能(如java.util.Timer和java.util.TimerTask)在数据库中安排作业。

使用外部数据泵工具:

像expdp和impdp这样的Oracle数据泵工具可以在外部运行并安排定期备份或数据导入/导出操作。

当选择定时任务的实现方法时,请考虑你的具体需求、维护成本和性能要求。

Oracle的DBMS_SCHEDULER是一个强大的工具,用于创建和管理在Oracle数据库上运行的定时任务。它比早期的DBMS_JOB更加强大和灵活。使用DBMS_SCHEDULER,可以创建和管理复杂的调度计划,定义任务的依赖关系,记录任务的执行日志等。

一个简单的例子来演示如何使用DBMS_SCHEDULER创建一个定时任务:

-- 启用程序

DBMS_SCHEDULER.ENABLE(NAME => 'TEST_PROGRAM');

-- 定义作业

DBMS_SCHEDULER.CREATE_JOB (

   JOB_NAME => 'TEST_JOB',

   PROGRAM_NAME => 'TEST_PROGRAM',

   COMMENTS => '每天凌晨2点执行',

   REPEAT_INTERVAL => 'FREQ=DAILY; BYHOUR=02; BYMINUTE=00;',

   ENABLED => FALSE);

-- 启用作业

DBMS_SCHEDULER.ENABLE(NAME => 'TEST_JOB');

在这个例子中,我们首先启用了名为TEST_PROGRAM的程序。然后,我们创建了一个作业TEST_JOB,并指定了它应该每天凌晨2点执行。最后,我们启用了这个作业。

注意,REPEAT_INTERVAL参数定义了任务的执行计划。在这个例子中,我们使用FREQ=DAILY来指定任务每天运行一次,然后使用BYHOUR=02和BYMINUTE=00来指定任务在每天的凌晨2点执行。

这只是DBMS_SCHEDULER的基本用法。实际上,它提供了更多的功能和更复杂的调度选项,可以根据需要进行探索和使用。

DBMS_SCHEDULER和DBMS_JOB是Oracle数据库中的两种任务调度机制,它们在功能和特性上存在一些差异。

创建方式:DBMS_JOB是通过调用DBMS_JOB.SUBMIT包来创建的,而DBMS_SCHEDULER是通过调用DBMS_SCHEDULER.CREATE_JOB包来创建的。


查询视图:两者的查询视图有所不同。DBMS_JOB对应的查询视图是DBA_JOBS和USER_JOBS,而DBMS_SCHEDULER对应的查询视图是DBA_SCHEDULER_JOBS和USER_SCHEDULER_JOBS。


功能和特性:DBMS_SCHEDULER相对于DBMS_JOB来说,功能更强大,包含了许多DBMS_JOB没有的功能,例如记录作业运行历史、调度语法更强大、在操作系统上运行数据库之外的作业、不同类别的工作之间的资源管理、使用作业参数、基于特权的作业安全模型等。

总的来说,DBMS_SCHEDULER比DBMS_JOB更强大,功能更全面。在选择使用哪种任务调度机制时,需要根据实际需求来考虑。

 

你可能感兴趣的:(oracle)