1。什么叫做job?有什么优点?
独立于平台,可以在Oracle的所以平台上通用
类似于unix的crontab和windows的at。
2。怎么运行JOB?
首先要运行JOB,数据库里面必须有两个参数手工设定:
scott@QINGH> show parameter job
NAME TYPE VALUE
------------------------------------ -------------- --------
job_queue_interval integer 60
job_queue_processes integer 1
第一个表示JOB后台进程每个多少时间唤醒一次,检查有无job。
第二个参数表示有多少个JOB后台进程,不能为0,否则无法运行JOB。最多可以是36个。
其次,系统必须存在DBMS_JOB包,可以通过desc dbms_job检查它的存在。如果没有,可以通过catproc.sql来生成,或者仅仅运行下面三个脚本:
catjobq.sql dbmsjob.sql prvtjob.plb
3。DBMS_JOB的详细用法:参考Oracle supplied package reference手册
4。具体例子:
declare v_job number;
begin
dbms_job.submit(v_job, -- the resultant job number
'PLSQL_program_I_want_to_run;', -- WHAT: What PL/SQL do I want to run
sysdate, -- NEXT_DATE: When do I want to run the PL/SQL
'sysdate+2/24'); -- INTERVAL: How OFTEN do I want to run the PL/SQL
end;
当然,最后还需要Commit,不要忘记了!
5。常见问题:
1。为什么提交成功,却没有见到JOB在运行?
1。检查job_queue_processes是否为0?
2。检查系统是否处于restricted session状态,是,着JOB不会运行
scott@QINGH> select logins from v$instance;
LOGINS
--------------------
RESTRICTED
2。当遇到submit的过程有输入参数的时候怎么办?
简介:数据库定时作业相当与UNIX下CRON进程,定时执行某程序。
使用包:dbms_job
ORACLE8最多可以运行定时作业:36个SNP进程
在INIT.ORA文件中三个参数控制着SNP进程的行为
JOB_QUEUE_PROCESS 缺省值为0 要启动多少进程
JOB_QUEUE_INTERVAL 缺省值60 进程唤醒之间的时间间隔,在对新作业检查以前该进程
将要睡眠的秒数。
JOB_QUEUE_KEEP_CONNECTIONS 缺省值FALSE 控制SNP进程是否关闭它的远程数据库连接。
如果为TRUE,那么所有的连接都将保持直到改进程终止
为止,如果为FALSE,那么将这些连接的保持时间将和
作业的执行时间一样长。
1.作业提交:
procedure submit(job out binary_integer,
what in varchar2,
next_date in date default sysdate,
interval in varchar2 default null,
no_parse in boolean defalut false);
参数说明:
类型
job binary_integer 作业号。当作业被创建时,它被赋予一个号码,只要作业
存在,它的作业号码保持不变,对于实例而言它是唯一的。
what varchar2 该作业的PL/SQL代码,通常是一个过程的调用
next_date date 作业下一次运行的时间
interval varchar2 计算作业再次运行的时间函数.
no_parse boolean 如果为TRUE,作业代码将在第一次被执行以前不被分析。如果为
FALSE,那么作业代码在提交时就被分析。
作业号从序列sys.jobseg生成的。
what参数是调用该过程的字符串,所有的参数都是IN参数,唯一例外是处理特殊标识符号next_date
与broken.
例如:
begin
dbms_job.submit(:v_jobnum,'procedcure',sysdate,'sysdate+1/24');
end;
每小时运行一次过程procedure.
改变失效作业。
如果作业失败了,ORACLE将自动尝试再次运行它,该作业将在失败后的一分钟以后再次运行。
如果这次尝试也失败了,那么下一次尝试是在两分钟以后,每次尝试失败了,间隔时间为前
一次的2被,如超过了作业的间隔时间,将会使用执行间隔时间,总次数为16次,16次还失败
标记为失效(broken),失效作业不再自动运行。
procedre broken(job in binary_integer,
brlken in boolean,
next_date in date default sysdate);
改变作业状态
job binary_integer 改变状态的作业号
broken boolean 作业的新状态,如果为TRUE,该作业为失效,如果为FALSE,
该作业不失效并且再NEXT_DATE指定时间运行。
next_date date 作业将要运行的是时间。
删除作业
procedure remove(job in binary_interger);
如果next_date求值为NULL(interval设置为NULL),那么在执行完成以后作业将会被删除。
修改作业
procedure change(job in binary_interger,
what in varchar2,
next_date in date,
interval in varchar2);
procedure what(job in binary_interger,
what in varchar2);
procedure next_date(job in binary_interger,
next_date in date);
procedure interval(job in binary_interger,
interval in varchar2);
用其过程修改各自参数所表示的特性
关于数据库中的Job
最新推荐文章于 2023-11-17 19:45:00 发布