- 浏览: 1381822 次
- 性别:
- 来自: 陕西.西安
文章分类
最新评论
-
dare_:
经过试验 设置之后反而更慢没有调用ensureCapacity ...
ensureCapacity()方法提高ArrayList的初始化速度 -
wangchao9053:
[flash=200,200][url][img][list] ...
Only the original thread that created a view hierarchy can touch its views的相关 -
cyb504:
考虑将rb文件代码隐藏:我先使用命令jrubyc将所有rb文件 ...
Ruby学习十 JRuby中调用java代码 -
4562xse3460:
大哥,您这个写反了,差点误导我,我觉得看着就不对。百度第一条就 ...
portrait表示纵向,landscape表示横向 -
yin138:
portrait是肖像画,即竖屏,landscape是风景画, ...
portrait表示纵向,landscape表示横向
目前,流行的主流数据库都拥有此项功能,最具代表性的是Microsoft SQL Server 7.0、Oracle8i/9i等。但是,要让Job工作,还需要我们加以配置才能实现。这些配置都有GUI操作。本文介绍Oracle9i下通过命令行实现Job配置......
众所周知,一般操作系统会提供定时执行任务的方法,例如:Unix平台上提供了让系统定时执行任务的命令 Crontab。但是,对于某些需求,例如:一些对数据库表的操作,最为典型的是证券交易所每日收盘后的结算,它涉及大量的数据库表操作,如果仍然利用操作系统去定时执行,不仅需要大量的编程工作,而且还会出现用户不一致等运行错误,甚至导致程序无法执行。
事实上,对于以上需求,我们可以利用数据库本身拥有的功能Job Queue(任务队列管理器)去实现。Job允许用户提前调度和安排某一任务,使其能在指定的时间点或时间段内自动执行一次或多次,由于任务在数据库中被执行,所以执行效率很高。
Job 允许我们定制任务的执行时间,并提供了灵活的处理方式,还可以通过配置,安排任务在系统用户访问量少的时段内执行,极大地提高了工作效率。例如,对于数据库日常的备份、更新、删除和复制等耗时长、重复性强的工作,以及电信增值短信业务中的定时PUSH,我们就可以利用Job去自动执行以减少工作量。
目前,流行的主流数据库都拥有此项功能,最具代表性的是Microsoft SQL Server 7.0、Oracle8i/9i等。但是,要让Job工作,还需要我们加以配置才能实现。这些配置都有GUI操作。本文介绍Oracle9i下通过命令行实现Job配置。
前提:写好的要定时执行的存储过程[不能带参数]。
定义一个Job,执行间隔是需要注意的一件重要的事情。SYSDATE+1/24 是存储在dba_jobs 视图中的间隔,它可以产生没小时一次的快照。可以将这个数据改变为不同的采样时间,在一天中有 24*60 = 1440 分钟,可以使用这个数字调整执行次数。比方说:我希望在每10分钟获取一次快照,应该使用下列命令:
execute dbms_job.submit(
:jobno, --作业编号
'sp;', --执行的过程
trunc(sysdate+10/1440,‘MI'), --下次执行时间
'trunc(sysdate+10/1440,‘‘MI'')', --间隔时间
true, --no_parse
:instno);
1.创建JOB
创建一个任务,执行间隔是每5分钟。
Variable v_sn number;
Begin
Dbms_job.submit(:v_sn,
‘p_push_send;',
trunc(sysdate+5/1440,‘MI'),
‘trunc(sysdate+5/1440,‘‘MI'')');
commit;
end;
/
删除一个任务:
execute dbms_job.remove(jobno);
2.查询任务语句
涉及两个表:user_jobs及dba_jobs_running[视图dba_jobs]
select * from user_jobs;
select * from dba_jobs_running;
select * from dba_jobs;
3.必要的参数[修改initsid.ora参数]
job_queue_processes = 4 --可执行作业个数
job_queue_interval = 10 --默认间隔延迟时间10s
job_queue_keep_connections=true --job保持正常连接
修改可执行作业个数为20个:
ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 2;0
修改取消限制模式:
ALTER SYSTEM DISABLE RESTRICTED SESSION;
4.相关的几个Job操作
删除job:dbms_job.remove(jobno);
修改要执行的操作:dbms_job.what(jobno,what);
修改下次执行时间:dbms_job.next_date(job,next_date);
修改间隔时间:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
启动job:dbms_job.run(jobno);
一、设置初始化参数 job_queue_processes
sql> alter system set job_queue_processes=n;(n>0)
job_queue_processes最大值为1000
查看job queue 后台进程
sql>select name,description from v$bgprocess;
二,dbms_job package 用法介绍
包含以下子过程:
Broken()过程。
change()过程。
Interval()过程。
Isubmit()过程。
Next_Date()过程。
Remove()过程。
Run()过程。
Submit()过程。
User_Export()过程。
What()过程。
1、Broken()过程更新一个已提交的工作的状态,典型地是用来把一个已破工作标记为未破工作。
这个过程有三个参数:job 、broken与next_date。
PROCEDURE Broken (job IN binary_integer,
Broken IN boolean,
next_date IN date :=SYSDATE)
job参数是工作号,它在问题中唯一标识工作。
broken参数指示此工作是否将标记为破——TRUE说明此工作将标记为破,而FLASE说明此工作将标记为未破。
next_date参数指示在什么时候此工作将再次运行。此参数缺省值为当前日期和时间。
job如果由于某种原因未能成功之行,oracle将重试16次后,还未能成功执行,将被标记为broken重新启动状态为broken的job,有如下两种方式;
a、利用dbms_job.run()立即执行该job
sql>begin
sql>dbms_job.run(:jobno) 该jobno为submit过程提交时返回的job number
sql>end;
sql>/
b、利用dbms_job.broken()重新将broken标记为false
sql>begin
sql>dbms_job.broken (:job,false,next_date)
sql>end;
sql>/
2、Change()过程用来改变指定工作的设置。
这个过程有四个参数:job、what 、next_date与interval。
PROCEDURE Change (job IN binary_integer,
What IN varchar2,
next_date IN date,
interval IN varchar2)
此job参数是一个整数值,它唯一标识此工作。
What参数是由此工作运行的一块PL/SQL代码块。
next_date参数指示何时此工作将被执行。
interval参数指示一个工作重执行的频度。
3、Interval()过程用来显式地设置重执行一个工作之间的时间间隔数。这个过程有两个参数:job与interval。
PROCEDURE Interval (job IN binary_integer,
Interval IN varchar2)
job参数标识一个特定的工作。interval参数指示一个工作重执行的频度。
4、ISubmit()过程用来用特定的工作号提交一个工作。这个过程有五个参数:job、what、next_date、interval与no_parse。
PROCEDURE ISubmit (job IN binary_ineger,
What IN varchar2,
next_date IN date,
interval IN varchar2,
no_parse IN booean:=FALSE)
这个过程与Submit()过程的唯一区别在于此job参数作为IN型参数传递且包括一个由开发者提供的工作号。如果提供的工作号已被使用,将产生一个错误。
5、Next_Date()过程用来显式地设定一个工作的执行时间。这个过程接收两个参数:job与next_date。
PROCEDURE Next_Date(job IN binary_ineger,
next_date IN date)
job标识一个已存在的工作。next_date参数指示了此工作应被执行的日期与时间。
6、Remove()过程来删除一个已计划运行的工作。这个过程接收一个参数:
PROCEDURE Remove(job IN binary_ineger);
job参数唯一地标识一个工作。这个参数的值是由为此工作调用Submit()过程返回的job参数的值。已正在运行的工作不能由调用过程序删除。
7、Run()过程用来立即执行一个指定的工作。这个过程只接收一个参数:
PROCEDURE Run(job IN binary_ineger)
job参数标识将被立即执行的工作。
8、使用Submit()过程,工作被正常地计划好。
这个过程有五个参数:job、what、next_date、interval与no_parse。
PROCEDURE Submit ( job OUT binary_ineger,
What IN varchar2,
next_date IN date,
interval IN varchar2,
no_parse IN booean:=FALSE)
job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。
what参数是将被执行的PL/SQL代码块。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE指示此PL/SQL代码在它第一次执行时应进行语法分析,而FALSE指示本PL/SQL代码应立即进行语法分析。
9、User_Export()过程返回一个命令,此命令用来安排一个存在的工作以便此工作能重新提交。
此程序有两个参数:job与my_call。
PROCEDURE User_Export(job IN binary_ineger,
my_call IN OUT varchar2)
job参数标识一个安排了的工作。my_call参数包含在它的当前状态重新提交此工作所需要的正文。
10、What()过程应许在工作执行时重新设置此正在运行的命令。这个过程接收两个参数:job与what。
PROCEDURE What (job IN binary_ineger,
What IN OUT varchar2)
job参数标识一个存在的工作。what参数指示将被执行的新的PL/SQL代码。
三、查看相关job信息
1、相关视图
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息
2、查看相关信息
SQL>SELECT JOB, NEXT_DATE, NEXT_SEC, FAILURES, BROKEN
SQL>FROM DBA_JOBS;
JOB NEXT_DATE NEXT_SEC FAILURES B
------- --------- -------- -------- -
9125 01-JUN-01 00:00:00 4 N
14144 24-OCT-01 16:35:35 0 N
9127 01-JUN-01 00:00:00 16 Y
3 rows selected.
正在运行的JOB相关信息
SELECT SID, r.JOB, LOG_USER, r.THIS_DATE, r.THIS_SEC
FROM DBA_JOBS_RUNNING r, DBA_JOBS j
WHERE r.JOB = j.JOB;
SID JOB LOG_USER THIS_DATE THIS_SEC
----- ---------- ------------- --------- --------
12 14144 HR 24-OCT-94 17:21:24
25 8536 QS 24-OCT-94 16:45:12
2 rows selected.
JOB QUEUE LOCK相关信息
SELECT SID, TYPE, ID1, ID2
FROM V$LOCK
WHERE TYPE = 'JQ';
SID TY ID1 ID2
--------- -- --------- ---------
12 JQ 0 14144
1 row selected.
四、简单例子
一个简单例子:
创建测试表
SQL> create table TEST(a date);
表已创建。
创建一个自定义过程
SQL> create or replace procedure MYPROC as
2 begin
3 insert into TEST values(sysdate);
4 end;
5 /
过程已创建。
创建JOB
SQL> variable job1 number;
SQL>
SQL> begin
2 dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440'); --每天1440分钟,即一分钟运行test过程一次
3 end;
4 /
PL/SQL 过程已成功完成。
运行JOB
SQL> begin
2 dbms_job.run(:job1);
3 end;
4 /
PL/SQL 过程已成功完成。
SQL> select to_char(a,'yyyy/mm/dd hh24:mi:ss') 时间 from TEST;
时间
-------------------
2001/01/07 23:51:21
2001/01/07 23:52:22
2001/01/07 23:53:24
删除JOB
SQL> begin
2 dbms_job.remove(:job1);
3 end;
4 /
PL/SQL 过程已成功完成。
发表评论
-
responseBuffering=adaptive;selectMethod=cursor
2011-10-25 10:16 1960http://blog.sina.com.cn/s/blog_ ... -
sql server中的real数据类型
2011-07-07 16:23 3273今天做项目的时候遇到一个笔试题,问道:“sql server中 ... -
sql中deallocate是什么
2011-07-07 16:08 3454http://zhidao.baidu.com/questio ... -
collate Latin1_General_CI_AS
2011-07-07 11:22 1411collate Latin1_General_CI_AS ... -
SQL Native Client][SQL Server]无法将函数单元 'sp_sqlagent_get_startup_info' 添加到组件 'Agen
2011-07-02 01:18 1199http://zhidao.baidu.com/questio ... -
SET ANSI_NULLS ON 和 SET QUOTED_IDENTIFIER ON 什么意思
2011-07-01 08:58 2353http://blog.sina.com.cn/s/blog_ ... -
MSSQL"以前的某个程序安装已在安装计算机上创建挂起的文件操作
2010-03-15 14:11 3091MSSQL"以前的某个程序安装已在安装计算机上创建 ... -
select top 10 * from article where IsDel=0 order by id desc
2010-01-13 15:30 2016access top 的用法: select top ... -
Oracle, DB2 及 MySQL 分页查询写法
2009-09-27 11:18 2526下面列出了Oracle, DB2 ... -
java.sql.SQLException: ORA-00600:
2009-08-08 14:33 1622java.sql.SQLException: ORA-006 ... -
ORA-00911: invalid character
2009-08-08 13:37 5062练习jdbc的时候,创建表报错: ORA-00911: in ... -
ORA-00957: duplicate column name
2008-08-26 11:55 9134--- The error occurred in com/i ... -
oracle无效列名 无效数字 的错误-
2008-08-20 19:53 4405oracle中,where 语句如:tea_code='123 ... -
ORACLE 中ROWNUM用法总结! (转)
2008-04-15 11:33 1249ORACLE 中ROWNUM用法总结! ... -
Oracle 函数大全(字符串函数,数学函数,日期函数,逻辑运算函数,其他函数)
2008-04-10 15:11 1815cast 是进行类型转换的, 可以针对各种Oracle数据类型 ... -
Oracle 游标使用大全
2008-03-24 11:37 1979我们将讨论各种用于访问ORACLE数据库的DDL和TCL语句。 ... -
PowerDesigner 11 使用心得
2008-03-17 11:05 23911、安装PD v11.0版 2、由p ... -
SQL SERVER中用CREATE INDEX 命令创建索引
2008-03-17 10:45 11453CREATE INDEX 既可以创建一 ... -
利用Power Designer 11创建数据库表结构时的错误与警告
2008-03-17 10:31 2512Table Existence of index Table ... -
Oracle SQL 语句中对Like的优化
2008-02-22 15:45 5483[color=red]1、尽量不要使用 like '%..%' ...
相关推荐
在Oracle数据库中,建立定期运行的存储过程是一项重要的任务,这使得数据库能够自动化执行特定的维护或业务逻辑。Oracle提供了DBMS_JOB包来实现这个功能,这个包允许用户创建、调度和管理后台作业(job),这些作业...
2. 使用DBMS_SCHEDULER.CREATE_JOB创建Job,指定存储过程作为执行体。 3. 配置Job的执行时间,如频率、开始时间和结束时间。 4. 启动Job,使其开始按照预定计划运行。 5. 如有必要,可以监控和调整Job的运行状态。 ...
在本主题中,我们将深入探讨如何利用Oracle的存储过程来创建和管理定时任务。 首先,Oracle中的定时任务通常通过“调度器”(DBMS_SCHEDULER)来实现。这个包提供了丰富的功能,允许用户定义任务、设置执行时间、...
Oracle 中创建 Job 是实现数据库定期任务的重要步骤,可以是定期执行存储过程或者简单的 SQL 语句。在 Oracle 中,Job 是一个异步执行的任务,可以根据需要设置执行频率和执行时间。本文将详细介绍 Oracle 中创建 ...
在 Oracle 数据库中,存储过程是一种可编程的对象,用于执行特定的任务。存储过程可以在数据库服务器上运行,从而提高应用程序的性能并减少网络流量。结合日期处理和定时任务 (Job),可以实现复杂的业务逻辑自动化,...
在Oracle数据库系统中,"JOB"是用于调度和自动化任务执行的一种功能,它允许你在预定义的时间点运行存储过程、PL/SQL块或其他数据库操作。本文将深入探讨Oracle中的JOB创建,以及如何编写和使用相应的脚本来设定定时...
通过上述内容,我们可以看到Oracle JOB定时器的强大功能,它不仅能够自动执行存储过程,还支持多种复杂的时间间隔设置,极大地提高了数据库管理的效率和自动化程度。在实际应用中,根据业务需求灵活调整JOB的执行...
在Oracle数据库中,Job是一种用于调度定期任务的功能,常被用来自动化执行数据库管理中的各种任务,比如备份、清理临时表空间等。Job主要由`DBMS_JOB`包进行管理和控制,此包提供了提交(new job)、删除(delete job)...
例如,Oracle的DBMS_SCHEDULER,SQL Server的SQL Server Agent,MySQL的Event Scheduler,它们允许用户设置定时任务,以定期执行存储过程。 回到描述中的"job调用的存储过程",这意味着存在一个或多个job,它们在...
例如,可能需要每分钟将一个表中的数据更新到另一个表中,这样的任务可以通过创建 Oracle 的 Job 来实现。 #### 一、准备工作 1. **创建目标表**:首先需要创建一个用于存储定时更新数据的目标表。 ```sql ...
在Oracle数据库中,定时执行存储过程是一项非常实用的功能,尤其适用于需要定期执行的任务,比如数据备份、数据清理、统计汇总等场景。通过设置定时任务,可以有效减轻管理员的工作负担,并确保关键业务流程的自动化...
- 确保在创建Job的用户具有执行Job中包含的PL/SQL代码或存储过程的权限。 总之,Oracle Job是数据库自动化管理的重要组成部分,它允许你在特定时间自动执行维护任务,提高系统的效率和可靠性。在实际应用中,你...
一旦设置好,这个过程可以定期运行,例如通过调度器(DBMS_SCHEDULER或DBMS_JOB)在特定时间自动执行,无需人工干预。这不仅节省了管理时间,也减少了潜在的人为错误。 此外,这样的设计还有助于数据库的维护和性能...
Oracle Job 是 Oracle 数据库中的一个特性,用于在预定义的时间间隔自动执行数据库任务,例如运行存储过程、PL/SQL 块或者 SQL 查询。对于初学者来说,理解如何创建、运行和管理 Oracle Job 是十分重要的。 1. **...
"TX_CON_0088_oracle_oracle存储过程实战_"这个主题深入探讨了如何在实际环境中应用Oracle存储过程,包括其创建、实现以及后台调用等关键环节。 首先,我们来了解如何创建存储过程。在Oracle中,创建一个存储过程...
1. **创建Job**:在数据库中,可以通过特定的命令(如Oracle的`DBMS_SCHEDULER`包,SQL Server的`sp_add_job`存储过程)创建Job,设定执行时间、频率和执行的脚本。 2. **调度Job**:Job的调度可以设置为一次性执行...
在Oracle数据库管理中,创建Job是一项重要的功能,可以帮助用户自动化执行一些周期性的任务,比如定期备份数据、更新统计信息等。本文将详细介绍如何在Oracle环境中创建Job,并通过具体的示例来解释各个步骤。 ####...
在给定的示例中,展示了如何创建一个Oracle Job来定期执行存储过程`P_DelCom`。下面将详细介绍其创建过程: ##### 1. 创建存储过程 首先,需要创建一个存储过程`P_DelCom`,该过程用于执行具体的数据库操作。在本例...
Oracle Job 是 Oracle 数据库中的一个特性,用于在预定义的时间执行数据库任务,如备份、清理、数据处理等。Job 的使用通常涉及以下几个步骤: 1. **创建测试表和过程**: 在示例中,首先创建了一个名为 `A` 的...