当前位置:首页 > 开发 > 数据库 > 正文

Oracle之Job应用

发表于: 2011-09-17   作者:周凡杨   来源:转载   浏览:
摘要: 最近写服务,服务上线后,需要写一个定时执行的SQL脚本,清理并更新数据库表里的数据,应用到了Oracle 的 Job的相关知识。在此总结一下。   一:查看相关job信息    1、相关视图  dba_jobs  all_jobs  user_jobs  dba_jobs_running 包含正在运行

最近写服务,服务上线后,需要写一个定时执行的SQL脚本,清理并更新数据库表里的数据,应用到了Oracle 的 Job的相关知识。在此总结一下。

 

一:查看相关job信息

   1、相关视图 

dba_jobs 

all_jobs 

user_jobs 

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

 

     select * from dba_jobs ;

 

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

select * from dba_jobs_running;

 

 

2、运行JOB 

说明:Run()过程用来立即执行一个指定的工作。这个过程只接收一个参数: 

SQL> begin 

2  dbms_job.run(:job); 

3  end; 

4  / 

 

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

在plSQL中我的做法是:

begin

dbms_job.run(3017);

end; 

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

 

3、删除JOB 

SQL> begin 

2  dbms_job.remove(:job);--:job可以用dba_jobs.job的值代替如:1198 

3  end; 

4  / 

 

二:参数:job_queue_process

 

pl/sql的命令窗口执行:

SQL> show parameter job_queue_process;

 

NAME                                 TYPE        VALUE

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

job_queue_processes                  integer     10

 

通过show parameter job_queue_process 来查看oracle中 job_queue_process的值。 当job_queue_process的值为0时表示全部停止oracle的job。

可以通过语句: ALTER SYSTEM SET job_queue_processes = 10;  来调整启动oracle的job。

 

视图dba_jobs字段的含义:

 

   JOB   任务的唯一标示号

         Identifier of job. Neither import/export nor repeated executions change it.

 

   LOG_USER     提交任务的用户

                USER who was logged in when the job was submitted

   PRIV_USER    赋予任务权限的用户

                USER whose default privileges apply to this job

   SCHEMA_USER  对任务作语法分析的用户模式

                select * from bar means select * from schema_user.bar

   LAST_DATE    最后一次成功运行任务的时间

                Date that this job last successfully executed

   LAST_SEC     如HH24:MM:SS格式的last_date日期的小时,分钟和秒

                Same as LAST_DATE. This is when the last successful execution started.

   THIS_DATE    正在运行任务的开始时间,如果没有运行任务则为null

                Date that this job started executing (usually null if not executing)

   THIS_SEC     如HH24:MM:SS格式的this_date日期的小时,分钟和秒

                Same as THIS_DATE. This is when the last successful execution started.

   NEXT_DATE    下一次定时运行任务的时间

                Date that this job will next be executed

 

   NEXT_SEC     如HH24:MM:SS格式的next_date日期的小时,分钟和秒

                Same as NEXT_DATE. The job becomes due for execution at this time.

   TOTAL_TIME    该任务运行所需要的总时间,单位为秒

                 Total wallclock time spent by the system on this job,in seconds

 

   BROKEN       标志参数,Y标示任务中断,以后不会运行

                If Y,no attempt is being made to run this job. See dbms_jobq.broken(job).

   INTERVAL      用于计算下一运行时间的表达式

                 A date function

 

   FAILURES     任务运行连续没有成功的次数

                How many times has this job started and failed since its last success?

   WHAT         执行任务的PL/SQL块

                Body of the anonymous PL/SQL block that this job executes

   NLS_ENV      任务运行的NLS会话设置

                alter session parameters describing the NLS environment of the job

   MISC_ENV     任务运行的其他一些会话参数

                a versioned raw maintained by the kernel

 

   INSTANCE

      Instance number restricted to run the job

 

 

 

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

描述 INTERVAL参数值

 

每天午夜12点 'TRUNC(SYSDATE + 1)'

 

每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'

 

每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'

 

每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)'

 

每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'

 

每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'

 

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

 

1:每分钟执行

 

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

 

 

Interval => sysdate+1/1440

 

2:每天定时执行

 

例如:每天的凌晨1点执行

 

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

 

3:每周定时执行

 

例如:每周一凌晨1点执行

 

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

 

4:每月定时执行

 

例如:每月1日凌晨1点执行

 

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

 

5:每季度定时执行

 

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

 

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

 

6:每半年定时执行

 

例如:每年7月1日和1月1日凌晨1点

 

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

 

7:每年定时执行

 

例如:每年1月1日凌晨1点执行

 

Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24

 

 

---例子(第一个可运行的例子):

 

1. 首先:创建一个package

 

create or replace package xinyangacitiviiy

is

procedure  proc_getxinyangRecommData;

end xinyangacitiviiy;

 

2. 其次:创建一个package body

 

create or replace package body xinyangacitiviiy is

procedure  proc_getxinyangRecommData as

BEGIN

       insert into ec.zhou_yhhd_jinfen values('1','1',to_char(sysdate,'yyyy-mm-dd HH:MM:SS'));

       COMMIT;

end;

end xinyangacitiviiy;

 

3.最后,定义job并实施运行策略

 

variable jobxinyang number;

begin

  sys.dbms_job.submit(job => :jobxinyang,

                      what => 'xinyangacitiviiy.proc_getxinyangRecommData;',

                      next_date => sysdate,

                      interval => 'TRUNC(sysdate,''mi'') + 1/ (24*60)');

  commit;

end;

 

 

 

 

 

Oracle之Job应用

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
  1.选择job ---> new      2.创建界面       <
写了一个job 很简单的,一分钟内 想一个表内插入 一条时间数据 数据 1 先创建一个表 create table g
Oracle Scheduler是用来管理和计划数据库的Job,通过它可以让很多常规的数据库任务自动执行,减少人
ofbiz中job任务应用 http://www.verydemo.com/demo_c441_i15344.html ofbiz中job任务应用 http://www
ofbiz中job任务应用 http://www.verydemo.com/demo_c441_i15344.html ofbiz中job任务应用 http://www
探索ORACLE之ASM03_应用 作者:吴伟龙 一、通过ASM方式建立单实例库 二、检查通过ASM建库后,文件存
How to perform a WIP job Completion in Oracle MES ,Below is basic flow for completion. Define
SQL Sentry公司开发的Event Manager可以用作SQL Agent job, Windows Task和Oracle job管理。 Event
Rails 是一个易用的框架,但像任何技术一样,要精通它还需一定的时间。您可能对 Ruby on Rails 已有
此文参考了网上几篇文档,然后自己实现了一些功能。 首先,要明白job是oracle 中用来执行定时任务功
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号