关于数据库中的Job

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);  
用其过程修改各自参数所表示的特性

你可能感兴趣的