`
adm889486
  • 浏览: 37166 次
  • 性别: Icon_minigender_1
  • 来自: 绵阳
社区版块
存档分类
最新评论

(转)oracle job 应用

阅读更多
begin  
  sys.dbms_job.submit(job => :job,   
                      what => 'job_stat_cooperate;',   
                      next_date => to_date('01-07-2008 05:00:00', 'dd-mm-yyyy hh24:mi:ss'),   
                      interval => 'TRUNC(SYSDATE+30)+5/24');   
  commit;   
end;   

每个月1号早晨5点执行的JOB,上周尝试写的,这周过来,看到执行效果还OK.纪录下.

  TRUNC(SYSDATE+30)+5/24  表示循环时间,现在时间加上30天后的日期,再加上具体的时间.

2.

Oracle定时器(Job)各时间段写法汇总
原作者:博客园一条辉 原文:链接 
对于DBA来说,数据库Job再熟悉不过了,因为经常要数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作。但是,Oracle定时器Job时间的处理上,千变万化,今天我把比较常用写法汇总如下:

在总结之前,先把Job的参数一一说明一下:

job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作;

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

next_date参数指识何时将运行这个工作。写Job的时候可以不指定该值;

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

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

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

1declare  
2  jobno number;  
3begin  
4  dbms_job.submit(
5    jobno,
6    'p_dosomething;',  --what
7    to_date('20090101020000','yyyy-mm-dd hh24: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))+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'),12)+2/24

当然上面罗列不可能照顾到方方面面,但是稍微变化一下,就能衍生出无数的例子,聪明的你一定会的吧,我这里就不多罗嗦了。


3.常要oracle数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库 的性能优化,包括重建索引等等的工作,这时需要用到一个函数dbms_job.submit,来完成Oracle定时器Job时间的处理上。使用 dbms_job.submit这个函数,我们只需要考虑两个事情:安排某一任务,和定制一个执行任务的时间点。但最重要也是最棘手的事情,我认为还是确 定一个执行任务的时间点。时间点确定了,其他的事情就好办了。下面是函数dbms_job.submit使用方法:

Java代码
dbms_job.submit( job out binary_integer,   
what       in   archar2,   
next_date     in   date,   
interval     in   varchar2,   
no_parse     in   boolean) 
dbms_job.submit( job out binary_integer, what       in   archar2, next_date     in   date, interval     in   varchar2, no_parse     in   boolean)

其中:
●job:输出变量,是此任务在任务队列中的编号;
●what:执行的任务的名称及其输入参数;
●next_date:任务执行的时间;
●interval:任务执行的时间间隔。
其 中Interval这个值是决定Job何时,被重新执行的关键;当interval设置为null时,该job执行结束后,就被从队列中删除。假如我们需 要该job周期性地执行,则要用‘sysdate+m’表示。如何更好地确定执行时间的间隔需要我们掌握一个函数TRUNC。

1.TRUNC(for dates)
TRUNC函数为指定元素而截去的日期值。
其具体的语法格式如下:
TRUNC(date[,fmt])
其中:
date 一个日期值
fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去
下面是该函数的使用情况:
1)按年截尾
select  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'yyyy')  from dual
-----------------------------------------------------------
2008-1-1
2)按月截尾
select  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'mm')  from dual
--------------------------------------------------------
2008-3-1
3)按日截尾
select  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'dd')  from dual
----------------------------------------------------------------------
2008-3-1
4)按时截尾
select  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'hh')  from dual
----------------------------------------------------------------------
2008-3-1 8:00:00
5)按分截尾
select  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'mi')  from dual
----------------------------------------------------------------------
2008-3-1 8:23:00



2.确定执行时间间隔
1)、 每分钟执行
Interval => TRUNC(sysdate,'mi') + 1 / (24*60)
2)、 每天定时执行
例如:每天的凌晨2点执行
Interval => TRUNC(sysdate) + 1 +2 / (24)
3)、 每周定时执行
例如:每周一凌晨2点执行
Interval => TRUNC(next_day(sysdate,2))+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'),12)+2/24



3.实例
这里提供了一个简单的例子,主要是完成在每一个时间间隔内向一个表中插入一条记录
  1)创建测试表 
    
SQL>   create   table   test(id number,cur_time   date);     
  表已创建。   
----建sequence   
CREATE  SEQUENCE test_sequence   
INCREMENT  BY   1    --  每次加几个    
START  WITH   1     --  从1开始计数    
NOMAXVALUE     --  不设置最大值    
NOCYCLE      --  一直累加,不循环    
CACHE  10 ; 
   SQL>   create   table   test(id number,cur_time   date);     表已创建。 ----建sequence CREATE  SEQUENCE test_sequence INCREMENT  BY   1    --  每次加几个   START  WITH   1     --  从1开始计数   NOMAXVALUE     --  不设置最大值   NOCYCLE      --  一直累加,不循环   CACHE  10 ;


--建触发器代码为:
create or replace trigger tri_test_id   
  before insert on test   --test 是表名   
  for each row   
declare   
  nextid number;   
begin   
  IF :new.id IS NULLor :new.id=0 THEN --id是列名   
    select test_sequence.nextval --SEQ_ID正是刚才创建的   
    into nextid   
    from sys.dual;   
    :new.id:=nextid;   
  end if;   
end tri_test_id;    
  
create or replace trigger tri_test_id   before insert on test   --test 是表名   for each row declare   nextid number; begin   IF :new.id IS NULLor :new.id=0 THEN --id是列名     select test_sequence.nextval --SEQ_ID正是刚才创建的     into nextid     from sys.dual;     :new.id:=nextid;   end if; end tri_test_id;  

  
  2)创建一个自定义过程 
  
SQL>   create   or   replace   procedure   proc_test   as     
     2     begin     
     3     insert   into   test(cur_time)   values(sysdate);     
     4     end;     
     5     /   
  
   SQL>   create   or   replace   procedure   proc_test   as         2     begin         3     insert   into   test(cur_time)   values(sysdate);         4     end;         5     /  

  
  过程已创建。 
  
  3)创建JOB 
SQL> declare job1 number;   
     begin   
        dbms_job.submit(job1,'proc_test;',sysdate,'sysdate+1/1440');--每天1440分钟,即一分钟运行test过程一次   
    end; 
  SQL> declare job1 number;        begin           dbms_job.submit(job1,'proc_test;',sysdate,'sysdate+1/1440');--每天1440分钟,即一分钟运行test过程一次       end;

  
  PL/SQL   JOB已成功完成。
分享到:
评论

相关推荐

    oracle job

    oracle job,帮助初学者学习job应用 包含创建、删除、修改job 等。 oracle job,帮助初学者学习job应用 包含创建、删除、修改job 等。

    oracle 简单应用

    oracle 入门技术:例,文件操作命令 1.start 和@ 说明: 运行 sql 脚本 案例: sql>@ d:\a.sql 或是 sql>start d:\a.sql 2.edit 说明: 该命令可以编辑指定的 sql 脚本 案例: sql>edit d:\a.sql,这样会把 d:\a.sql 这个...

    ORACLE_JOB_.docx

    本文档是关于ORACLE JOB 的应用,初学者可以参考

    Oracle数据库恢复管理器及特殊包应用 (2)

    Oracle实用工具RMAN的应用为DBA管理多个Oracle数据库提供了集中备份管理与恢复控制的机制,大大地减轻了DBA的工作压力,而DBMS_JOB包的使用增强了存储过程的应用功能,这样,他们就可以从备份数据及重复处理数据的...

    Oracle用RMAN和DBMS_JOB包实现自动存储2

    Oracle实用工具RMAN的应用为DBA管理多个Oracle数据库提供了集中备份管理与恢复控制的机制,大大地减轻了DBA的工作压力,而DBMS_JOB包的使用增强了存储过程的应用功能,这样,他们就可以从备份数据及重复处理数据的...

    Oracle数据库恢复管理器及特殊包应用 (1)

    Oracle实用工具RMAN的应用为DBA管理多个Oracle数据库提供了集中备份管理与恢复控制的机制,大大地减轻了DBA的工作压力,而DBMS_JOB包的使用增强了存储过程的应用功能,这样,他们就可以从备份数据及重复处理数据的...

    Oracle 主要配置文件介绍

    "/u02/app/oracle/oradata/cams/control02.ctl", "/u02/app/oracle/oradata/cams/control03.ctl") 4 调度作业队列的 SNP 进程的数量以及 SNP 进程觉醒时间间隔 秒 JOB_QUEUE_PROCESSES=2 JOB_...

    Oracle数据库管理员技术指南

    1.2.3 怎样配置符合 OFA 的 Oracle 文件 系统 1.3 规划数据库文件布局 1.3.1 最大化可用性的规划 1.3.2 最小化磁盘争用的规划 1.4 建立参数文件 1.4.1 配置参数的一些注意事项 1.4.2 建立参数文件的连接 ...

    Oracle 8i PL SQL高级程序设计

    本书不仅为开发健壮的、基于Web的应用提供了深入的信息,而且本书的CD-ROM中还为读者提供了样本代码和第三方提供的Oracle开发工具。书中全面介绍了PL/SQL语言的包、触发器、动态SQL、外部例程、对象、集合等基本概念...

    oracle学习笔记

    oracle 学习笔记总结 记录详细 Oracle8i9i知识全讲解 Oracle Note Oracle_EXP、IMP用法详解 Oracle_Job应用 Oracle_闪回技术 Oracle_体系结构 Sql_各种连接

    oracle_8i_pl_sql高级程序设计

    本书不仅为开发健壮的、基于Web的应用提供了深入的信息,而且本书的CD-ROM中还为读者提供了样本代码和第三方提供的Oracle开发工具。书中全面介绍了PL/SQL语言的包、触发器、动态SQL、外部例程、对象、集合等基本概念...

    oracle实验报告

    (3)应用 PL/SQL 解决实际问题 【实验内容与步骤】 PL/SQL块中的可执行部分是由一系列语句组成的(包括对数据库进行操作的SQL语句,PL/SQL语言的各种流程控制语句等)。在块中对数据库查询,增、删、改等对数据的...

    韩顺平oracle学习笔记

    右键单击我的电脑->服务和应用程序:服务->启动OracleServiceMYORA1(MYORA1 是安装oracle时起的名字各有不同)和OracleOracleHome90TNSLlistener 4.卸载oracle 1、先关掉oralce,net stop OracleServiceORCL(ORCL是...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    oracle 数据库数据迁移解决方案

     针对物理迁移,也即通过RMAN备份来进行还原并应用归档的方式(这里不讨论通过dd方式进行的冷迁移),虽然注意的是要将数据库设为force logging的方式,在用RMAN做全备之前,一定要执行:  否则可能会产生坏块。 ...

    ORACLE数据库基础知识-华为维护资料

    2.4 ORACLE数据库的网络应用 33 2.4.1 SQL*Net产品介绍 33 2.4.2 配置客户机/服务器结构 35 第3章 常用任务 39 3.1 如何恢复被误删的数据文件 39 3.2 如何杀掉吊死session 39 3.3 如何修改字符集 39 3.4 如何追加表...

    oracle数据库经典题目

    1.在多进程Oracle实例系统中,进程分为用户进程、后台进程和服务进程。 2.标准的SQL语言语句类型可以分为:数据定义语句(DDL)、数据操纵语句(DML)和数据控制语句(DCL)。 3.在需要滤除查询结果中重复的行时,必须...

    Oracle 全文检索的使用及内部机制

    本文是经过查询了很多oracle的全文检索资料后结合项目中的应用总结的. 主要内容有如下几点: 1. 如何创建和使用全文索引, 文中包含详细的步骤 2. 当数据发生变化时,如何更新全文索引,并且如何通过Job实现自动化 3. ...

    精通Oracle.10g.PLSQL编程

    使用Oracle系统包 17.1 DBMS_OUTPUT 17.2 DBMS JOB 17.3 DBMS PIPE 17.4 DBMSAIERT 17.5 DBMS TRANSACTION 17.6 DBMS SESSION 17.7 DBMS ROWID 17.8 DBMSRLS 17.9 DBMS DDL ...

Global site tag (gtag.js) - Google Analytics