Oracle中的定时任务实例教程

目录
  • 一、Oracle 中的定时任务的实例
    • 1.1、创建一个测试表,只有一个 DATE 类型字段
    • 1.2、创建一个自定义存储过程
    • 1.3、创建定时任务JOB
    • 1.4、运行JOB (1.3执行成功后,job就已经开始执行了)
    • 1.5、关于JOB的查询操作
    • 1.6、常见的Interval 设置
    • 1.7、编写存储过程的格式样例
  • 补充:Oracle手动执行定时任务
  • 总结

一、Oracle 中的定时任务的实例

1.1、创建一个测试表,只有一个 DATE 类型字段

CREATE TABLE TEST_A(TEST_ADD_DATA DATE);

1.2、创建一个自定义存储过程

CREATE OR REPLACE PROCEDURE TEST_PRO AS
BEGIN
    INSERT INTO TEST_A VALUES (SYSDATE);
END;

1.3、创建定时任务JOB

DECLARE
    jobno NUMBER;
BEGIN
    dbms_job.submit(
            jobno, --定时器ID,系统自动获得
            'TEST_PRO;', --what执行的过程名
            SYSDATE, --next_date,定时器开始执行的时间,这样写表示立即执行
            'TRUNC(sysdate,''mi'') + 1/ (24*60)' --interval,设置定时器执行的频率,这样写每隔1分钟执行一次
        );
    COMMIT;
END;

说明:

1、declare后面的 jobno 是一个数字类型,主要的用途是给定时器保存id,下面的job 引用此 jobno 。

2、job:输出变量,是此任务在任务队列中的编号;

3、what:执行的任务的名称及其输入参数;

4、next_date:任务执行的时间;

5、interval:任务执行的时间间隔。

1.4、运行JOB (1.3执行成功后,job就已经开始执行了)

select * from TEST_A;

1.5、关于JOB的查询操作

-- 查看调度任务
select * from user_jobs;

-- 查看正在执行的调度任务
select * from dba_jobs_running;

-- 查看执行完的调度任务
select * from dba_jobs;

job 的 id,此id不是随便填写的,而是执行select * from user_jobs;查询到定时任务名称对应的 id。

手动执行定时任务(下面的参数25需要根据本地查询的参数来确定)

BEGIN
    DBMS_JOB.RUN(25);
    COMMIT;
END;

停止已启动的定时任务

BEGIN
    DBMS_JOB.BROKEN(25,  TRUE,  SYSDATE);
    COMMIT;
END;

删除指定job

BEGIN
    DBMS_JOB.REMOVE(25);
    commit;
END;

1.6、常见的Interval 设置

描述                        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)
每秒钟执行次

Interval => sysdate + 1/(24 * 60 * 60)

如果改成sysdate + 10/(24 * 60 * 60)就是10秒钟执行次

每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60)

如果改成TRUNC(sysdate,'mi') + 10/ (24*60) 就是每10分钟执行次

每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate) + 1 +1/ (24)

每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24

每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24

每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24

每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24

每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24

1.7、编写存储过程的格式样例

-- oracle存储过程格式
CREATE OR REPLACE PROCEDURE TEST_PRO_NAME AS
    declare countNum INT :=0;
    begin
        select count(*) into SM_USER from test2;
        if(countNum=0) then
            --delete from Table
            --INSERT INTO table (col1, col2, col3)
            --SELECT col1,col2,col3 FROM table WHERE condition;

            --业务完成写日志
        else
            --没有数据写日志
     end if;
        commit;
    Exception When Others Then
        rollback;

END TEST_PRO_NAME

补充:Oracle手动执行定时任务

Oracle数据库中的定时任务可以使用DBMS_SCHEDULER包来手动执行。下面是一个简单的步骤:

1.使用SYS或具有管理员权限的用户登录到Oracle数据库中。

2.打开SQL Plus或SQL Developer等工具。

3.连接到数据库,并输入以下命令以创建一个简单的定时任务:

BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
    job_name        => 'my_job',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN my_procedure(); END;',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'FREQ=HOURLY; INTERVAL=1',
    enabled         => TRUE,
    comments        => 'My new job'
  );
END;
/

在上面的命令中,我们创建了一个名为"my_job"的定时任务,它每小时重复执行一次,并在启用时运行PL/SQL块。

4.执行以下命令来手动运行定时任务:

BEGIN
  DBMS_SCHEDULER.RUN_JOB('my_job');
END;
/

在上面的命令中,我们手动运行名为"my_job"的定时任务。

请注意,如果你要手动执行的定时任务有任何依赖项,如数据库对象或作业链,则必须在手动运行之前确保这些依赖项已经准备就绪。

总结

到此这篇关于Oracle中的定时任务的文章就介绍到这了,更多相关Oracle定时任务内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • oracle数据库定时任务dbms_job的用法详解

    一.dbms_job涉及到的知识点 1.创建job: variable jobno number; dbms_job.submit(:jobno, --job号 'your_procedure;',--执行的存储过程, ';'不能省略 next_date, --下次执行时间 'interval' --每次间隔时间,interval以天为单位 ); –系统会自动分配一个任务号jobno. 2.删除job: dbms_job.remove(jobno); 3.修改要执行的操作: job:dbms_j

  • Linux下Oracle设置定时任务备份数据库的教程

    1.查看数据库的字符集 数据库的字符集必须和Linux下设置的环境变量一致,不然会有乱码. 以下两个sql语句都可以查到: select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET'; select * from v$nls_parameters where parameter='NLS_CHARACTERSET'; 查询结果为:NLS_CHARACTERSET AL32UTF8 2. 用oracle用

  • oracle定时任务定时无效的原因分析与解决

    目录 创建oracle定时任务定时任务并没有按时执行 创建定时任务JOB(63)定时任务并没有执行 原因分析: 解决方案: 总结 创建oracle定时任务定时任务并没有按时执行 由于项目需要同步其他系统数据库数据库,在创建完dblink,存储过程后,新建了一个dbm_job任务,满心期待的可以早点下班时,却发现定时任务并没有按照时间执行. 创建定时任务JOB(63)定时任务并没有执行 原因分析: 可能数据库对于JOB的功能并没有开启,于是引着这个方向去寻找解决方法. 解决方案: 通过查阅资料发现

  • Oracle删除归档日志及添加定时任务

    目录 一.删除归档日志 1.切换用户 2.使用RMAN工具 3.连接本地数据库 4.检查控制文件和实际物理文件的差别 5.同步检查控制文件和实际物理文件的信息 6.删除n天前的归档日志 7.退出RMAN 二.添加定时任务 1.创建归档日志删除脚本 2.授予脚本文件执行权限 3.测试归档日志删除脚本 4.添加定时任务 5.查看定时任务 总结 一.删除归档日志 1.切换用户 # 切换至oracle用户 su – oracle 2.使用RMAN工具 # 使用RMAN工具,删除失效的归档日志 rman

  • Oracle中的定时任务实例教程

    目录 一.Oracle 中的定时任务的实例 1.1.创建一个测试表,只有一个 DATE 类型字段 1.2.创建一个自定义存储过程 1.3.创建定时任务JOB 1.4.运行JOB (1.3执行成功后,job就已经开始执行了) 1.5.关于JOB的查询操作 1.6.常见的Interval 设置 1.7.编写存储过程的格式样例 补充:Oracle手动执行定时任务 总结 一.Oracle 中的定时任务的实例 1.1.创建一个测试表,只有一个 DATE 类型字段 CREATE TABLE TEST_A(T

  • Java实现Web应用中的定时任务(实例讲解)

    定时任务,是指定一个未来的时间范围执行一定任务的功能.在当前WEB应用中,多数应用都具备任务调度功能,针对不同的语音,不同的操作系统, 都有其自己的语法及解决方案,windows操作系统把它叫做任务计划,linux中cron服务都提供了这个功能,在我们开发业务系统中很多时候会涉及到这个功能.本场chat将使用java语言完成日常开发工作中常用定时任务的使用,希望给大家工作及学习带来帮助. 一.定时任务场景 (1)驱动处理工作流程 作为一个新的预支付订单被初始化放置,如果该订单在指定时间内未进行支

  • oracle中print_table存储过程实例介绍

    定义 所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过 编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数 来调用并执行它,从而完成一个或一系列的数据库操作. 一直以来,觉得MySQL中使用\G参数改变输出结果集的显示方式非常好用,尤其是在命令行界面.但是ORACLE数据库没有这个功能,今天在搜索到Tom大师的一篇博文时,发现大师用一个存储过程print_table实现了类似这样的功能

  • Oracle中手动删除数据库教程

    在很多情况下,或无法使用dbca工具的时候,我们需要手动来删除数据库.对此,可以借助drop database命令来实现,下面的描述中给出手动删除数据库. 的具体步骤,包含文件系统数据库以及ASM数据库.环境:Oracle Enterprise Linux 5.4 + Oracle 10g R2 .   一.手动删除文件系统数据库       1.停止监听与OEM 复制代码 代码如下: $ lsnrctl stop listener_name         $ emctl stop dbcon

  • ThinkPHP中ajax使用实例教程

    本文实例讲述了ThinkPHP中使用ajax的方法,提交表单如下图所示: 点击提交,不需要刷新本页,将内容提交到数据库当中,并在本页显示提交的内容.如下图所示: 一.jquery实现方法: MessageAction.class.php页面代码如下: <?php class MessageAction extends Action{ function index(){ $this->display(); } function add(){ //ajaxReturn(数据,'提示信息',状态)

  • python中的多线程实例教程

    本文以实例形式较为详细的讲述了Python中多线程的用法,在Python程序设计中有着比较广泛的应用.分享给大家供大家参考之用.具体分析如下: python中关于多线程的操作可以使用thread和threading模块来实现,其中thread模块在Py3中已经改名为_thread,不再推荐使用.而threading模块是在thread之上进行了封装,也是推荐使用的多线程模块,本文主要基于threading模块进行介绍.在某些版本中thread模块可能不存在,要使用dump_threading来代

  • VC++中内存对齐实例教程

    内存对其是VC++程序设计中一个非常重要的技巧,本文即以实例讲述VC++实现内存对其的方法.具体分析如下: 一.概述 我们经常看到求 sizeof(A) 的值的问题,其中A是一个结构体,类,或者联合体. 为了优化CPU访问和优化内存,减少内存碎片,编译器对内存对齐制定了一些规则.但是,不同的编译器可能有不同的实现,本文只针对VC++编译器,这里使用的IDE是VS2012. #pragma pack()是一个预处理,表示内存对齐.布局控制#pragma,为编译程序提供非常规的控制流信息. 二.结构

  • C#中lock死锁实例教程

    在c#中有个关键字lock,它的作用是锁定某一代码块,让同一时间只有一个线程访问该代码块,本文就来谈谈lock关键字的原理和其中应注意的几个问题: lock的使用原型是: lock(X) { //需要锁定的代码.... } 首先要明白为什么上面这段话能够锁定代码,其中的奥妙就是X这个对象,事实上X是任意一种引用类型,它在这儿起的作用就是任何线程执行到lock(X)时候,X需要独享才能运行下面的代码,若假定现在有3个线程A,B,C都执行到了lock(X)而ABC因为此时都占有X,这时ABC就要停下

  • mysql的定时任务实例教程

    前言 自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录.对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作.更值得 一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精 确到每分钟执行一次.对于一些对数据实时性要求比较高的应用(例如:股票.赔率.比分等)就非常适合. 本文将给大家详细介绍关于

  • js位运算在实际中使用的实例教程

    目录 什么是位运算? 业务场景: 解决办法 办法一: 办法二: 附:位运算的综合应用 总结 什么是位运算? 从现代计算机中所有的数据二进制的形式存储在设备中.即 0.1 两种状态,计算机对二进制数据进行的运算(+.-.*./)都是叫位运算,即将符号位共同参与运算的运算. 按位运算符有6个 &: 按位与\|: 按位或\^: 按位异或\~: 按位取反\>> : 右移\<<: 左移 业务场景: 我们大部分的业务开发场景下 只用if else 或 switch 条件处理就可以,但是

随机推荐