定时任务应用场景:

  某一个生产系统上面,临时表不断变多,占了不少磁盘空间。由于这套软件是直接买的,不方便修改源代码。所以考虑使用Oracle定时任务直接从数据库层删除临时表。

定时任务业务:

  首先写好一个存储过程。读当前用户所有以tempXXXXX开头的临时表,然后依次删除所有的临时表。然后在建立Oracle Job每天晚上定时调用这个存储过程。

存储过程代码:

create or replace PROCEDURE KDDROPTEMPTABLE AS
BEGIN
  declare
  cursor c_usertable is
  select table_name from user_tables t where t.TABLE_NAME like 'TEMPTABLE0000%' and status = 'VALID';
  my_tablename user_tables.table_name%TYPE;
  v_sql varchar2(200);
  v_count integer := 0;
  begin
    --DBMS_OUTPUT.ENABLE(buffer_size => null);
       open c_usertable;
         loop
           --提取一行数据到c_usertable
           fetch c_usertable into my_tablename;
           exit when c_usertable%notfound;
           v_sql := 'drop table '||my_tablename;
           execute immediate v_sql;
           v_count := v_count+1;
           -- dbms_output.put_line(v_sql);
         end loop;
       --关闭游标
      close c_usertable;
      dbms_output.put_line('总工删除的临时表数量:'||v_count);
  end;
END KDDROPTEMPTABLE;

Oracle定时任务建立步骤

Oracle有两种语法可以建定时任务,Oracle10g以后就开始推荐使用下面这种。老的方式本文不涉及。

如果你有Oracle SQL developer可以用界面新建

以下是通过SQL直接建Job:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
            job_name => '"ZSNC57"."autoDeleteTemp"',
            job_type => 'STORED_PROCEDURE',
            job_action => 'ZSNC57.KDDROPTEMPTABLE',
            number_of_arguments => 0,
            start_date => TO_TIMESTAMP_TZ('2018-09-12 14:41:09.000000000 ASIA/SHANGHAI','YYYY-MM-DD HH24:MI:SS.FF TZR'),
            repeat_interval => 'FREQ=DAILY;BYHOUR=14;BYMINUTE=45;BYSECOND=0',
            end_date => NULL,
            enabled => FALSE,
            auto_drop => TRUE,
            comments => '自动删除临时表');

DBMS_SCHEDULER.SET_ATTRIBUTE(
             name => '"ZSNC57"."autoDeleteTemp"',
             attribute => 'restartable', value => TRUE);
     
 
    DBMS_SCHEDULER.SET_ATTRIBUTE(
             name => '"ZSNC57"."autoDeleteTemp"',
             attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_FULL);
      
 
    
    DBMS_SCHEDULER.enable(
             name => '"ZSNC57"."autoDeleteTemp"');
END;

直接手动运行定时任务的方式(目前还没研究出来为啥一直报错):
begin
    dbms_scheduler.run_job('autoDeleteTemp',TRUE); -- true代表同步执行
end;

注:如果直接执行存储过程可以执行,但定时任务却始终执行不了,执行以下步骤:

select * from dba_sys_privs where grantee='oracle_user_name';
 查询一下当前用户被直接赋予的权限有哪些.如果没有的话执行下列赋权语句.
 grant create job to oracle_user_name;
 grant MANAGE SCHEDULER  to oracle_user_name;
 show parameter job;  --显示当前job参数,如果job_queue_processes = 0则执行下面语句修改.
 alter system set job_queue_processes = 1;

如果你的Job正常运行了,通过如下几张表可以查询到运行记录:

--Oracle定时任务
-- job信息
select * from user_scheduler_jobs;
--  job日志
select * from User_Scheduler_Job_Log;
-- job运行日志
select * from user_scheduler_job_run_details;
--正在运行的job
select * from user_scheduler_running_jobs;

在Oracle SQL developer中也有集成界面

Oracle定时任务Job笔记的更多相关文章

  1. EntityFramework CodeFirst SQLServer转Oracle踩坑笔记

    接着在Oracle中使用Entity Framework 6 CodeFirst这篇博文,正在将项目从SQLServer 2012转至Oracle 11g,目前为止遇到的问题在此记录下. SQL Se ...

  2. 最简单的一个Oracle定时任务

    最简单的一个Oracle定时任务一.在PLSQL中创建表:create table HWQY.TEST(CARNO     VARCHAR2(30),CARINFOID NUMBER) 二.在PLSQ ...

  3. oracle定时任务

    一.简介 当我们需要oracle数据库定时自动执行一些脚本,或进行数据库备份.数据库的性能优化,包括重建索引等工作是需要使用到定时任务. 定时任务可以使用以下两种完成. 1.操作系统级的定时任务,wi ...

  4. Oracle RAC学习笔记:基本概念及入门

    Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章]    oracle 10g real applica ...

  5. Oracle RAC学习笔记01-集群理论

    Oracle RAC学习笔记01-集群理论 1.集群相关理论概述 2.Oracle Clusterware 3.Oracle RAC 原理 写在前面: 最近一直在看张晓明的大话Oracle RAC,真 ...

  6. Oracle RAC学习笔记02-RAC维护工具集

    Oracle RAC学习笔记02-RAC维护工具集 RAC维护工具集 1.节点层 2.网络层 3.集群层 4.应用层 本文实验环境: 10.2.0.5 Clusterware + RAC 11.2.0 ...

  7. [Oracle]OWI学习笔记--001

    [Oracle]OWI学习笔记--001 在 OWI 的概念里面,最为重要的是 等待事件 和 等待时间. 等待事件发生时,需要通过 P1,P2,P3 查看具体的资源. 可以通过 v$session_w ...

  8. 【Oracle】使用dbms_job包创建Oracle定时任务

           在Oracle的包里面,有一个名字叫做DBMS_JOB的包,它的作用是安排和管理作业队列.通过作业队列,可以让Oracle数据库定期执行特定的任务.当使用DBMS_JOB管理作业的时候, ...

  9. oracle 定时任务例子【项目例子】

    说明:请在plsql工具的命令窗口中,依次按步骤执行如下脚本   (1)建立备份表 my_test_log2create table my_test_log2 as select * from my_ ...

随机推荐

  1. 使用Git Bash从Git上下载代码到本地以及上传代码到码云Git

    前提是在码云上已经新建一个空的项目,可参考:https://www.cnblogs.com/babysbreath/p/9170455.html 1.新建一个目录,存放下载下来的项目,我在D盘新建了一 ...

  2. CSS3之实现光润效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Vue 动态路由传值

    一.动态路由传值 1.配置动态路由: const routes = [ //动态路由路径参数以:开头 { path: '/Content/:aid', component:Content}, ] 2. ...

  4. loadrunner-关联

    1.什么是关联? 将服务器动态返回的值,保存成一个参数,供后面需要使用到 此参数的地方使用 PS:1.一定是服务器返回的 2.动态变化的,静态不需要关联 3.服务器需要校验的 4.保存成一个参数 5. ...

  5. VUE系列一:VUE入门:搭建脚手架CLI(新建自己的一个VUE项目)

    一.VUE脚手架介绍 官方说明:Vue 提供了一个官方的 CLI,为单页面应用快速搭建 (SPA) 繁杂的脚手架.它为现代前端工作流提供了 batteries-included 的构建设置.只需要几分 ...

  6. nodeJs 控制台打印中文显示为Unicode解决方案

    在使用 NodeJs 采集其他网站网页时遇到的,在获取源代码后发现里面原来的中文被转成了 Unicode(UTF8) 编码的中文(如:&# [xxx]),这当然不是真正想要的中文实体 解决方案 ...

  7. 结对项目-WordCount

    结对作业: 成员:201631062115(me),201631062613(partner) 代码地址:https://gitee.com/ackary/WordCount 作业的链接地址:http ...

  8. channel_v3.json

    channel_v3.json 下载地址:https://pan.baidu.com/s/1qRgQXiYD2-6MjTb3B3mIBg 源文件地址:https://raw.githubusercon ...

  9. 想拥有自己的Python程序包,你只需15步

    来源商业新知网,原标题:15步,你就能拥有自己的Python程序包 全文共 3192 字,预计学习时长 6 分钟 每个软件开发员和数据科学家都难免要做程序包.本文推荐一篇 Python开源程序包的制作 ...

  10. 并发系列2:Java并发的基石,volatile关键字、synchronized关键字、乐观锁CAS操作

    由并发大师Doug Lea操刀的并发包Concurrent是并发编程的重要包,而并发包的基石又是volatile关键字.synchronized关键字.乐观锁CAS操作这些基础.因此了解他们的原理对我 ...