oracle dbmsjob.docx

上传人:b****5 文档编号:15217299 上传时间:2023-07-02 格式:DOCX 页数:11 大小:19.17KB
下载 相关 举报
oracle dbmsjob.docx_第1页
第1页 / 共11页
oracle dbmsjob.docx_第2页
第2页 / 共11页
oracle dbmsjob.docx_第3页
第3页 / 共11页
oracle dbmsjob.docx_第4页
第4页 / 共11页
oracle dbmsjob.docx_第5页
第5页 / 共11页
oracle dbmsjob.docx_第6页
第6页 / 共11页
oracle dbmsjob.docx_第7页
第7页 / 共11页
oracle dbmsjob.docx_第8页
第8页 / 共11页
oracle dbmsjob.docx_第9页
第9页 / 共11页
oracle dbmsjob.docx_第10页
第10页 / 共11页
oracle dbmsjob.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

oracle dbmsjob.docx

《oracle dbmsjob.docx》由会员分享,可在线阅读,更多相关《oracle dbmsjob.docx(11页珍藏版)》请在冰点文库上搜索。

oracle dbmsjob.docx

oracledbmsjob

创建一个简单的JOB实列

对于DBA来说,数据库Job再熟悉不过了,因为经常要数据库定时的自动执行一些脚本,或做数据库备份,

或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作。

job参数是由Submit()过程返回的binary_ineger。

这个值用来唯一标识一个工作;

what参数是将被执行的PL/SQL代码块;

next_date参数指识何时将运行这个工作。

写Job的时候可以不指定该值;

interval参数何时这个工作将被重执行。

其中Interval这个值是决定Job何时,被重新执行的关键。

例如:

有存储过程p_dosomethings,需要被不同的时间间隔执行。

1declare  

2  jobnonumber;  

3begin  

4  dbms_job.submit(

5    jobno,

6   'p_dosomething;',--what

7    to_date('20090101020000','yyyy-mm-ddhh24:

mi:

ss'),--next_date,可以不填

8   'Interval时间字符串'--interval,关键设置

9  );  

10  commit;  

11end;

12

1、每分钟执行

Interval=>TRUNC(sysdate,’mi’)+1/(24*60)

2、每天定时执行

例如:

每天的凌晨2点执行

Interval=>TRUNC(sysdate)+1+2/(24)

3、每周定时执行

例如:

每周一凌晨2点执行

Interval=>TRUNC(next_day(sysdate,'星期一'))+2/24

4、每月定时执行

例如:

每月1日凌晨2点执行

Interval=>TRUNC(LAST_DAY(SYSDATE))+1+2/24

5、每季度定时执行

例如每季度的第一天凌晨2点执行

Interval=>TRUNC(ADD_MONTHS(SYSDATE,3),'Q')+2/24

6、每半年定时执行

例如:

每年7月1日和1月1日凌晨2点

Interval=>ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24

7、每年定时执行

例如:

每年1月1日凌晨2点执行

Interval=>ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24

示例

1、创建测试表

SQL>createtablezy_table(zdate,yvarchar2(10));

表已创建。

2、创建一个自定义过程

SQL>createorreplaceprocedurezy_procas

begin

insertintozy_tablevalues(sysdate,'start');

begin

dbms_stats.gather_schema_stats(ownname=>'ABM',cascade=>TRUE);

end;

insertintozy_tablevalues(sysdate,'end');

end;

/

过程已创建。

3、创建JOB

SQL>declare

SQL>job1number;

SQL>begin

    dbms_job.submit(job1,'zy_proc;',sysdate,'trunc(SYSDATE)+1/24');

    end;

    /

PL/SQL过程已成功完成。

4、运行JOB

SQL>begin

dbms_job.run(:

job1);

end;

/

PL/SQL过程已成功完成。

SQL>selectto_char(z,'yyyy/mm/ddhh24:

mi:

ss')时间fromzy_table;

时间

-------------------

2001/01/0723:

51:

21

2001/01/0723:

52:

22

2001/01/0723:

53:

24

5、删除JOB

SQL>begin

    dbms_job.remove(:

job1);

    end;

    /

PL/SQL过程已成功完成。

6、一些必要的参数

修改initsid.ora参数

job_queue_processes=4

job_queue_interval=10

job_queue_keep_connections=true

修改可执行作业个数为20个

ALTERSYSTEMSETJOB_QUEUE_PROCESSES=20

修改取消限制模式

ALTERSYSTEMDISABLERESTRICTEDSESSION;

7、两个必要的表

user_jobs及dba_jobs_running

8、相关的几个JOB操作

删除job:

dbms_job.remove(jobno);

修改要执行的操作:

job:

dbms_job.what(jobno,what);

修改下次执行时间:

dbms_job.next_date(job,next_date);

修改间隔时间:

dbms_job.interval(job,interval);

停止job:

dbms_job.broken(:

job1,broken,nextdate);

启动job:

dbms_job.run(jobno);

9、几个常用的语句

selectto_char(z,'yymmddhh24:

mi:

ss'),bfromzy_table;

selectjob,last_date,last_sec,next_date,next_sec,whatfromdba_jobs;

selectjob,last_date,last_sec,next_date,next_sec,what,failuresfromuser_jobs;

dbms_job.submit(:

job1,'test;',trunc(SYSDATE)+13.6/24,'SYSDATE+5/1440');

selectto_char(sysdate,'yymmddhh24:

mi:

ss')fromdual;

10、需要注意的问题:

1)job的下一次执行时间的确定:

一个job必须run一次之后,才能按照设定的间隔确定下次运行的时间。

2)如果job运行时间小于两次的间隔,则下次运行时间等于job开始运行时间+间隔时间;如果job运行时间大于等于两次的间隔,则下次运行时间等于上次job运行结束的时间。

创建Oraclejob的一些注意事项

1.设置初始化参数,job_queue_processes

altersystemsetjob_queue_processes=一个数

2.创建job应用

begin

  sys.dbms_job.submit(job=>:

job,what=>'fengtry;',next_date=>sysdate,interval=>'sysdate+1');

  commit;

end;

3.注意事项:

what后面跟的存储过程要有分号,next_date的参数是日期型,

   interval是个日期格式的字符串+几代表每隔多长时间执行一次

一、设置初始化参数job_queue_processes

     设置可同时存在运行的job进程数

  sql>altersystemsetjob_queue_processes=n;--(n>0)

  job_queue_processes最大值为1000

    修改取消限制模式

    ALTERSYSTEMDISABLERESTRICTEDSESSION;

  查看jobqueue后台进程

  sql>selectname,descriptionfromv$bgprocess;

  

二,dbms_jobpackage用法介绍

  包含以下子过程:

  

  Broken()暂停job。

  change()改变正在运行的job设置。

  Interval()修改时间间隔。

  Submit()提交job,获得一个进程号。

  Run()运行已经提交的job。

  Isubmit()用指定进程号的方式提交job。

  Next_Date()修改下次执行时间。

  Remove()删除job。

  User_Export()过程。

  What()修改job执行内容。

  

  1、Broken()过程更新一个已提交的工作的状态,典型地是用来把一个已暂停工作标记为未暂停工作。

  这个过程有三个参数:

job、broken与next_date。

  

  PROCEDUREBroken(job   INbinary_integer,

           Broken  INboolean,

           next_dateINdate:

=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过程提交时返回的jobnumber

   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。

  

  PROCEDUREChange(job    INbinary_integer,

           What   INvarchar2,

           next_date INdate,

           interval INvarchar2)

  

  此job参数是一个整数值,它唯一标识此工作。

  What参数是由此工作运行的一块PL/SQL代码块。

  next_date参数指示何时此工作将被执行。

  interval参数指示一个工作重执行的频度。

  

  3、Interval()过程用来显式地设置重执行一个工作之间的时间间隔数。

这个过程有两个参数:

job与interval。

  

  PROCEDUREInterval(job   INbinary_integer,

            IntervalINvarchar2)

  

  job参数标识一个特定的工作。

interval参数指示一个工作重执行的频度。

  

  4、ISubmit()过程用来用特定的工作号提交一个工作。

这个过程有五个参数:

job、what、next_date、interval与no_parse。

  

  PROCEDUREISubmit(job   INbinary_ineger,

           What   INvarchar2,

           next_dateINdate,

           interval INvarchar2,

           no_parse INbooean:

=FALSE)

  

  这个过程与Submit()过程的唯一区别在于此job参数作为IN型参数传递且包括一个由开发者提供的工作号。

如果提供的工作号已被使用,将产生一个错误。

  

  5、Next_Date()过程用来显式地设定一个工作的执行时间。

这个过程接收两个参数:

job与next_date。

  

  PROCEDURENext_Date(job    INbinary_ineger,

            next_date INdate)

  job标识一个已存在的工作。

next_date参数指示了此工作应被执行的日期与时间。

  

  6、Remove()过程来删除一个已计划运行的工作。

这个过程接收一个参数:

  

  PROCEDURERemove(jobIN binary_ineger);

  

  job参数唯一地标识一个工作。

这个参数的值是由为此工作调用Submit()过程返回的job参数的值。

已正在运行的工作不能由调用过程序删除。

  

  7、Run()过程用来立即执行一个指定的工作。

这个过程只接收一个参数:

  

  PROCEDURERun(jobINbinary_ineger)

  

  job参数标识将被立即执行的工作。

  

  8、Submit()过程,工作被正常地计划好。

  这个过程有五个参数:

job、what、next_date、interval与no_parse。

  

  PROCEDURESubmit(job   OUTbinary_ineger,

           What   IN varchar2,

           next_dateIN 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。

  

  PROCEDUREUser_Export(job    INbinary_ineger,

             my_call  INOUTvarchar2)

  

  job参数标识一个安排了的工作。

my_call参数包含在它的当前状态重新提交此工作所需要的正文。

  

  10、What()过程应许在工作执行时重新设置此正在运行的命令。

这个过程接收两个参数:

job与what。

  

  PROCEDUREWhat(job INbinary_ineger,

          WhatINOUTvarchar2)

  job参数标识一个存在的工作。

what参数指示将被执行的新的PL/SQL代码。

  

  三、查看相关job信息

  1、相关视图

  dba_jobs

  all_jobs

  user_jobs

  dba_jobs_running包含正在运行job相关信息

  

  2、查看相关信息

  

  SQL>SELECTJOB,NEXT_DATE,NEXT_SEC,FAILURES,BROKEN

  SQL>FROMDBA_JOBS;

  

  JOBNEXT_DATENEXT_SECFAILURESB

  ---------------------------------

  912501-JUN-0100:

00:

004N

  1414424-OCT-0116:

35:

350N

  912701-JUN-0100:

00:

0016Y

  3rowsselected.

  

  正在运行的JOB相关信息

  

  SELECTSID,r.JOB,LOG_USER,r.THIS_DATE,r.THIS_SEC

  FROMDBA_JOBS_RUNNINGr,DBA_JOBSj

  WHEREr.JOB=j.JOB;

  

  SIDJOBLOG_USERTHIS_DATETHIS_SEC

  ---------------------------------------------

  1214144HR24-OCT-9417:

21:

24

  258536QS24-OCT-9416:

45:

12

  2rowsselected.

   

  JOBQUEUELOCK相关信息

  

  SELECTSID,TYPE,ID1,ID2

  FROMV$LOCK

  WHERETYPE='JQ';

  

  SIDTYID1ID2

  -----------------------------

  12JQ014144

  1rowselected.

  

  四、简单例子

  一个简单例子:

  

  创建测试表

  SQL>createtableTEST(adate);

  

  表已创建。

  

  创建一个自定义过程

  SQL>createorreplaceprocedureMYPROCas

   2 begin

   3 insertintoTESTvalues(sysdate);

   4 end;

   5 /

  

  过程已创建。

  

  创建JOB

  SQL>variablejob1number;

  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>selectto_char(a,'yyyy/mm/ddhh24:

mi:

ss')时间fromTEST;

  

  时间

  -------------------

  2001/01/0723:

51:

21

  2001/01/0723:

52:

22

  2001/01/0723:

53:

24

  

  删除JOB

  SQL>begin

   2 dbms_job.remove(:

job1);

   3 end;

   4 /

  

  PL/SQL过程已成功完成.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2