`
mfcai
  • 浏览: 410046 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在Oracle中实现定时操作

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


--建触发器代码为:
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     /
  

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

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

相关推荐

    在Oracle中实现后台自动执行的定时操作

    在Oracle数据库中,实现后台自动执行的定时操作是一项关键技能,尤其对于那些需要定期执行的任务,比如数据备份、数据清理、统计报告生成等。本文将深入探讨如何在Oracle中通过JOB队列机制来实现这样的定时任务,...

    如何在Oracle数据库中实现定时操作

    在Oracle数据库中实现定时操作是通过Oracle的任务队列管理器(Job Queue)来完成的,这一功能使得数据库管理员能够预定义任务并在特定时间点或周期性执行,避免了手动操作和潜在的用户不一致问题。Oracle数据库的...

    Oracle定时执行存储过程

    在 oracle 中,定时执行存储过程可以使用 DBMS_JOB 包来实现。通过创建任务,我们可以让 oracle 自动执行某些操作,而不需要人工干预。这种技术可以广泛应用于各个领域,例如数据备份、数据分析、报表生成等。

    任务计划+批处理实现Oracle数据库的定时备份

    总之,结合任务计划和批处理文件,我们可以实现Oracle数据库的自动化定时备份,从而减少手动操作的繁琐和潜在错误。同时,确保对备份文件的管理和恢复策略也是数据库管理的关键部分。通过阅读`.mht`文件中的详细教程...

    oracle的job定时

    通过掌握上述要点,你可以有效地在Oracle数据库中创建和管理定时任务,以满足项目中的自动化需求。不过,要注意的是,Oracle的定时功能虽然强大,但在实际应用中,还需考虑任务间的依赖关系、资源管理以及错误处理...

    SpringBoot定时任务实现Oracle和mysql数据同步

    在`syncData`方法中,我们将编写实现Oracle到MySQL数据同步的代码。数据同步通常涉及到数据库查询、数据转换以及数据插入等操作。这里我们可以使用JDBC或者ORM框架(如MyBatis)来操作数据库。 1. **Oracle数据库...

    Oracle中实现定时任务的分析与应用.pdf

    总的来说,Oracle Job Queue是Oracle数据库中实现定时任务的关键工具,它提供了丰富的配置选项和灵活的执行策略,对于优化数据库管理和提升业务效率具有重要作用。通过熟练掌握Oracle Job Queue的使用,可以更好地...

    linux下为oracle做定时备份的操作

    ### Linux环境下Oracle数据库定时备份操作 #### 背景与目的 在企业级应用中,Oracle数据库作为核心数据存储系统,其数据的安全性和完整性至关重要。为了确保数据安全,定期进行数据库备份是必不可少的工作之一。在...

    oracle 定时导出脚本

    在Linux环境下,为了实现Oracle数据库的自动化备份管理,通常会借助于shell脚本来完成定时导出任务。以下是一个典型的Oracle定时导出脚本示例: ```bash #!/bin/bash echo 'exportdataoftest' date fmt=`date "+%Y-...

    oracle导出导入定时

    在这里,我们将深入探讨Oracle数据库的导出导入定时操作。 一、Oracle Data Pump简介 Oracle Data Pump是Oracle 10g及后续版本引入的新特性,它替代了早期的EXP和IMP工具,提供了更快的速度、更大的灵活性和更高的...

    利用Crontab实现对Oracle数据库的定时备份.rar

    本教程将详细阐述如何利用Crontab来实现Oracle数据库的定时备份。 首先,我们需要理解Oracle数据库的备份类型。Oracle支持多种备份方式,如物理备份(如使用RMAN工具)和逻辑备份(如导出/导入)。在本教程中,我们...

    oracle 定时任务,使用存储过程更新数据

    Oracle数据库系统提供了强大的定时任务管理功能,这在企业级应用中极为重要,因为它们能够按照...在实际操作中,根据具体业务需求调整作业的执行时间和频率,以及存储过程中的更新逻辑,是实现高效数据库管理的关键。

    oracle 定时exp文件到ftp服务器(soaris)

    在这个文件中,我们需要设置一些环境变量,例如 ORACLE_HOME、ORACLE_OWNER、ORACLE_SID 等。然后,我们可以使用 EXP 工具将数据库备份到一个文件中,例如 `full${DATE}.dmp`。最后,我们可以使用 FTP 工具将备份...

    定时导出Oracle数据库数据并上传到FTP目录脚本

    为了实现定时任务,你可以将这个BAT脚本添加到Windows的任务计划器中,设置合适的触发时间。这样,每当到了预定的时间,系统就会自动执行脚本,完成数据的导出和上传。 总的来说,这个任务涉及了Oracle数据库的查询...

    利用CRON进程实现Oracle数据库定时备份.pdf

    在本文中,作者详细介绍了如何结合CRON进程和Oracle的EXP命令来实现定时备份。EXP是Oracle数据库提供的一种数据导出工具,可以将数据库对象(如表、索引等)及其数据导出到一个或多个文件中,作为备份。通过编写一个...

    ORACLE数据定时导入导出工具

    在实际操作中,通常会利用操作系统级别的定时任务服务(如 Windows 的 Task Scheduler 或 Linux 的 cron)来定期执行 Data Pump、SQL*Loader 和 RMAN 命令。这样可以确保在特定时间点进行数据库的自动备份,提高...

    oracle定时导出

    要实现定时导出,可以通过Scheduler创建一个作业,调用`expdp`(Oracle数据泵导出)命令,并设置作业的运行频率。例如: ```sql BEGIN DBMS_SCHEDULER.create_job ( job_name => 'weekly_backup', job_type => '...

    linux下远程定时备份oracle数据库

    在Linux环境下,远程定时备份Oracle数据库是一项至关重要的任务,它能确保数据的安全性和业务的连续性。Oracle数据库作为企业级的数据库管理系统,其备份与恢复策略...记得在实际操作中根据具体环境和需求进行调整。

Global site tag (gtag.js) - Google Analytics