视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle JOB 用法小结
2025-09-22 17:33:37 责编:小OO
文档
定时自动操作数据库——Oracle JOB 用法小结 - oracle - Tech - JavaEye论坛您还未登录 ! 我的应用 登录 注册

论坛首页 → 综合技术版 → oracle → 定时自动操作数据库——Oracle JOB 用法小结全部 Database Haskell Erlang FP

Linux 数据结构和算法 mysql oracle DB2 SQLServer PostgreSQL MacOSX Unix 编程综合 OS 浏览 1334

次主题:定时自动操作数据库——Oracle JOB 用法小结精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)

作者正文

icyheart 等级:

文章: 77

积分: 390

来自: 北京

发表时间:2010-07-19 < > 猎头职位: 北京: Ruby高级工程师 相关文章:

在Oracle中实现定时操作

为Oracle增加计划任务

oracle中使用job定时完成任务- -

推荐圈子: JAVA 3T

更多相关推荐 Sql代码

一、设置初始化参数 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, NEX

T_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 过程已成功完成。

一、设置初始化参数 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、ISub

mit()过程用来用特定的工作号提交一个工作。这个过程有五个参数: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 过程已成功完成。

声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。

推荐链接

返回顶楼

par

arabellum_sky 等级: 初级会员

文章: 44

积分: 30

来自: 深圳

发表时间:2010-07-27 不错,介绍的挺详细

返回顶楼 回帖地址 0 0 请登录后投票

论坛首页 → 综合技术版 → oracle

跳转论坛:Java编程和Java企业应用 Web前端技术 移动编程和手机应用开发 C/C++编程 Ruby编程 Python编程 PHP编程

Flash编程和RIA Microsoft .Net 综合技术 软件开发和项目管理 行业应用 入门讨论 招聘求职 海阔天空 首页

新闻

论坛

问答

专栏

博客

圈子

招聘

服务

搜索

Java

Web

Ruby

Python

敏捷

MySQL

润亁报表

图书

广告服务 JavaEye黑板报 关于我们 联系我们 友情链接 © 2003-2010 JavaEye.com. 上海炯耐计算机软件有限公司版权所有 [

沪ICP备05023328号 ]下载本文

显示全文
专题