Oracle定时任务Job笔记
定时任务应用场景:
某一个生产系统上面,临时表不断变多,占了不少磁盘空间。由于这套软件是直接买的,不方便修改源代码。所以考虑使用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笔记的更多相关文章
- EntityFramework CodeFirst SQLServer转Oracle踩坑笔记
接着在Oracle中使用Entity Framework 6 CodeFirst这篇博文,正在将项目从SQLServer 2012转至Oracle 11g,目前为止遇到的问题在此记录下. SQL Se ...
- 最简单的一个Oracle定时任务
最简单的一个Oracle定时任务一.在PLSQL中创建表:create table HWQY.TEST(CARNO VARCHAR2(30),CARINFOID NUMBER) 二.在PLSQ ...
- oracle定时任务
一.简介 当我们需要oracle数据库定时自动执行一些脚本,或进行数据库备份.数据库的性能优化,包括重建索引等工作是需要使用到定时任务. 定时任务可以使用以下两种完成. 1.操作系统级的定时任务,wi ...
- Oracle RAC学习笔记:基本概念及入门
Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章] oracle 10g real applica ...
- Oracle RAC学习笔记01-集群理论
Oracle RAC学习笔记01-集群理论 1.集群相关理论概述 2.Oracle Clusterware 3.Oracle RAC 原理 写在前面: 最近一直在看张晓明的大话Oracle RAC,真 ...
- Oracle RAC学习笔记02-RAC维护工具集
Oracle RAC学习笔记02-RAC维护工具集 RAC维护工具集 1.节点层 2.网络层 3.集群层 4.应用层 本文实验环境: 10.2.0.5 Clusterware + RAC 11.2.0 ...
- [Oracle]OWI学习笔记--001
[Oracle]OWI学习笔记--001 在 OWI 的概念里面,最为重要的是 等待事件 和 等待时间. 等待事件发生时,需要通过 P1,P2,P3 查看具体的资源. 可以通过 v$session_w ...
- 【Oracle】使用dbms_job包创建Oracle定时任务
在Oracle的包里面,有一个名字叫做DBMS_JOB的包,它的作用是安排和管理作业队列.通过作业队列,可以让Oracle数据库定期执行特定的任务.当使用DBMS_JOB管理作业的时候, ...
- oracle 定时任务例子【项目例子】
说明:请在plsql工具的命令窗口中,依次按步骤执行如下脚本 (1)建立备份表 my_test_log2create table my_test_log2 as select * from my_ ...
随机推荐
- New Journey--工作五年所思所感小记
正式参加工作满五年了,2013年7月9日走入游戏行业.之前就计划着应该提笔写点什么留下来,但当日子真的到了,竟是不知说些什么了.14年年中的时候我曾写过一篇工作一年的总结,现在回头读起来,还真是别有一 ...
- struct 对齐和补齐原则
// 对齐原则:每一成员需对齐为后一成员类型的倍数 // 补齐原则:最终大小补齐为成员类型最大值的倍数 struct A { int a; // 4 short b; // (4) + ...
- Linq to SQL -- Insert、Update、Delete
Insert/Update/Delete操作 插入(Insert) 1.简单形式 说明:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提 ...
- intellij idea 相关设置
IDEA这么高端的工具之前只是断断续续使用了一下,因为项目的开发都是在eclipse上,每次学习IDEA的使用都得上网搜索半天,今天自己整理一下,方便以后查阅. IDEA版本15.0.4 字体 界面字 ...
- vue.js 自定义事件
<div id="app"> <h2>{{num}}</h2> <h1>全局组件</h1> <my-compone ...
- webpy学(ban)习(砖)记录
参考链接:http://blog.csdn.net/caleng/article/details/5712850 参考代码:http://files.cnblogs.com/files/tacyeh/ ...
- 关于jfinal发送邮件走过的坑
最近接到一个写发送邮件的功能开发,使用的是jfinal框架.原本打算使用javamail一步步来的,后来看到jfinal有自带的发邮件的插件(jfinal-mail-plugin),只需两三行代码便可 ...
- python初学心得之一
昨天开始接触并学习python,对python有了初步印象. 一.python主要应用方向 二.python语言类型 三.python2和3的主要区别 四.常见字符编码 五.Python语法初学 一 ...
- 逃逸分析(Escape Analysis)
一.什么是逃逸 逃逸是指在某个方法之内创建的对象,除了在方法体之内被引用之外,还在方法体之外被其它变量引用到:这样带来的后果是在该方法执行完毕之后,该方法中创建的对象将无法被GC回收,由于其被其它变量 ...
- gridcontrol 根据某一列数据来控制其他列合并
首先需要属性栏中设置这一列可以合并,再在CellMerge方法中写 private void gridView1_CellMerge(object sender, DevExpress.XtraGri ...