如果你想每天定时在Oracle里执行一个任务,比如统计表空间增长了多少, 并且把增长状况写入另一个统计表,应该怎么来做呢?
用编程语言?如Java的Timer和TimerTask来执行定时任务。这种选择太麻烦,你还要单独去运行一个JVM让你的程序执行。能不能在Oracle内部来完成,而不需借助其他程序呢?当然可以。
Oracle提供了dbms_job这个自带package来完成定时任务的创建(提交), 修改,运行等功能。你可以把你要做的工作写在一个PL/SQL (procedure,function等)里,然后创建一个job来执行这个PL/SQL块,并给出执行初始和间隔等参数:
(1)
create or replace procedure test_pro
as
begin
insert into test_table values(sysdate);
end;
(2)
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'begin practice.test_pro; end;'
,next_date => to_date('12-03-2011 23:58:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'TRUNC(SYSDATE) +1+ 23/24 + 58/1440'
,no_parse => FALSE
);
COMMIT;
END;
可以了。
其实第二步就是创建了一个匿名块,在这个块里调用了dbms_job这个package里procedure来提交任务. 后面来介绍这些参数的意义.
首先,一个job能正常运行, 对Oracle环境的配置是有要求的:
(1) 保证Oracle不在受限会话状态(restricted session)运行,
select instance_name,logins from v$instance;
如果 logins=RESTRICTED, 说明需要修改回话状态:
alter system disable restricted session;
(2) 系统参数JOB_QUEUE_PROCESSES必须大于0(不能超过1000):
查看这个参数:
show parameter job_queue_processes
修改:
alter system set job_queue_processes=20
(3) 系统参数必须为true,保证系统的触发功能可以运行:
alter system set _SYSTEM_TRIG_ENABLED=true
以下是这个package所包含的主要procedure:
submit:
PROCEDURE Submit ( job OUT binary_ineger,
What IN varchar2,
next_date IN date,
interval IN varchar2,
no_parse IN booean:=FALSE)
job,输出参数,由submit产生,它是job的标识号码。
what,需要被执行的PL/SQL代码块。
next_date,这个任务的下一次执行时间,是通过interval计算出来的。
interval,日期表达式,如果为null,则任务只执行一次。
no_parse,此工作在提交时或执行时是否应进行语法分析——TRUE指示此PL/SQL代码在它第一次执行时再进行语法分析,而FALSE指示本PL/SQL代码应立即进行语法分析。
在第一次设置任务执行时间的时候,我把任务的固定时间执行和固定间隔执行搞混了,我想这是一个容易出错的地方。如,我想我的任务在每天晚上23点50分运行,来统计当天的数据。于是next_date我给的to_date('12-03-2011 23:58:00','dd/mm/yyyy hh24:mi:ss'),而interval给的trunc(sysdate) + 1,理所当然的以为 第一次执行后时间加一天嘛,第二天照样这个时候运行. 其实不是这样的, 任务的下一次运行时间(next_date)是在任务开始时计算出来, 它的值其实是interval表达式的值,而不是通过(上一次执行时间+interval)这样的方式得出来。按照我给定的值,第一次执行的时间是正确的,但是第一次执行是算出来的第二次执行时间是 trunc(sysdate)+ 1 即第二天的零点。所以后面的时间都是错的。正确的interval值应该是'TRUNC(SYSDATE) +1+ 23/24 + 58/1440',这样算出来才是第二天的晚上23点58分。关于任务的时间,可以参看:http://blog.csdn.net/li_guang/archive/2008/06/04/2510846.aspx
remove
PROCEDURE Remove(job IN binary_ineger);
将一个job从任务队列里删除,参数:job的标识
next_date
PROCEDURE Next_Date(job IN binary_ineger,
next_date IN date)
手动设置任务的下一次运行时间
Interval
PROCEDURE Interval (job IN binary_integer,
设置任务执行时间的计算方法.
Change
PROCEDURE Change (job IN binary_integer,
What IN varchar2,
next_date IN date,
interval IN varchar2)
修改一个任务
Broken
PROCEDURE Broken (job IN binary_integer,
Broken IN boolean,
next_date IN date :=SYSDATE)
修改任务的状态, true为可运行,false不可.
run
PROCEDURE run(job IN binary_ineger);
立即运行一个任务
javaeye的这个文章编辑器太让人蛋疼了, 插入的代码格式全没了,我曰,辛辛苦苦写了这么久
分享到:
相关推荐
Oracle Job是Oracle数据库中的一个强大特性,主要用于在特定时间或间隔执行数据库操作,例如数据备份、维护任务或者定期的数据处理。以下是对Oracle Job使用方法和技巧的详细说明: 一、创建Oracle Job Oracle Job...
从oracle库中导出自定义的job脚本。
Oracle Job 是 Oracle 数据库中的一个特性,用于在预定义的时间间隔自动执行 PL/SQL 块或存储过程。Oracle Job 的使用对于实现定时任务、批处理操作和维护工作至关重要。以下是对 Oracle Job 使用的详细解释: 1. *...
### ORACLE如何停止一个JOB:深入解析与实践 在Oracle数据库管理中,有时我们需要停止正在运行的JOB,这可能是由于各种原因,如发现错误、优化性能或调整资源分配。本文将详细阐述如何在Oracle中查询并停止正在运行...
Oracle Job 定时任务 Oracle Job 定时任务是 Oracle 数据库中的一种定时执行任务的机制,它允许用户在指定的时间点或每天的某个时间点自行执行任务。 一、查询系统中的 Job 可以通过以下视图查询系统中的 Job: *...
### Oracle Job 创建脚本详解 #### 一、Oracle Job 概述 在Oracle数据库中,Job是一种用于调度定期任务的功能,常被用来自动化执行数据库管理中的各种任务,比如备份、清理临时表空间等。Job主要由`DBMS_JOB`包...
oracle JOB常见的执行时间, 在初学者定义JOB时,对于执行时间往往不知道如何设置. 该文档列举了常见的定义方式.可以由此进行扩展.
Oracle Job是Oracle数据库中的一个核心特性,用于在预定义的时间执行特定的数据库任务,比如运行SQL脚本、数据备份、维护或性能监控等。Oracle Job的全称是Database Scheduler Job,它通过Oracle Database Scheduler...
Oracle Job是Oracle数据库中的一种调度工具,用于在指定的时间执行一系列数据库操作,如PL/SQL块、存储过程、包或操作系统命令。Oracle Job是Oracle的DBMS_SCHEDULER或之前版本中的DBMS_JOB包的一部分,它允许数据库...
在Oracle数据库系统中,"JOB"是用于调度和自动化任务执行的一种功能,它允许你在预定义的时间点运行存储过程、PL/SQL块或其他数据库操作。本文将深入探讨Oracle中的JOB创建,以及如何编写和使用相应的脚本来设定定时...
从给定的Oracle Job实例测试通过的描述与代码片段中,我们可以提炼出多个关于Oracle数据库管理、编程与作业调度的关键知识点。以下是对这些知识点的详细解释: ### 1. 创建序列(Sequence) 在Oracle数据库中,...
Oracle JOB 定时任务 定时执行存储过程
Oracle的JOB功能是一种定时任务调度机制,用于在数据库后台自动执行预定义的PL/SQL代码块或存储过程。以下是对Oracle JOB用法的详细总结: 首先,为了启用JOB队列,需要设置初始化参数`job_queue_processes`。通过...
Oracle Job 是 Oracle 数据库中的一个特性,用于在预定义的时间间隔自动执行数据库任务,例如运行存储过程、PL/SQL 块或者 SQL 查询。对于初学者来说,理解如何创建、运行和管理 Oracle Job 是十分重要的。 1. **...
XXL-JOB选择适配Oracle,意味着它可以更好地服务于那些使用Oracle作为数据存储的企业。 XXL-JOB的核心组件包括调度中心(XXL-JOB-ADMIN)和执行器(XXL-JOB-EXECUTOR)。调度中心负责任务的调度和监控,执行器则...
Oracle的Job定时功能是Oracle数据库系统提供的一种自动化任务调度机制,允许用户设定特定的时间点或时间间隔执行数据库操作。在项目开发中,特别是在大数据管理和分析的场景下,定时任务经常被用于更新数据、生成...
Oracle 创建 Job 实现数据库定期任务 Oracle 中创建 Job 是实现数据库定期任务的重要步骤,可以是定期执行存储过程或者简单的 SQL 语句。在 Oracle 中,Job 是一个异步执行的任务,可以根据需要设置执行频率和执行...
关于oracle 数据库中job任务如何创建、查询和修改、如何启用job和停止job,可以帮助新手了解job的使用,包括任务运行时间的设置,具体的代码很实用,希望对你有帮助
oracle job 的使用总结,通过dbms 创建job,从而执行存储过程