oracle: job使用
oracle的job,实际上就是数据库内置的定时任务,类似代码中的Timer功能。下面是使用过程:
这里我们模拟一个场景:定时调用存储过程P_TEST_JOB 向表TEST_JOB_LOG中插入数据
表结构:
create table TEST_JOB_LOG
(
rec_id NUMBER not null,
occr_time DATE
);
alter table TEST_JOB_LOG
add constraint PK_TEST_JOB primary key (REC_ID);
序列:
create sequence SEQ_TEST_JOB_LOG
minvalue 1
maxvalue 99999999
start with 1
increment by 1
cache 10;
存储过程:
create or replace procedure P_TEST_JOB is
begin
insert into test_job_log(rec_id, occr_time) values(seq_test_job_log.nextval,sysdate);
commit;
end P_TEST_JOB;
上面只是准备工作,下面才是重点:(以下脚本全是pl/sql developer环境)
1、创建job
declare
job_id number;
begin
sys.dbms_job.submit(job_id, 'P_TEST_JOB;', sysdate, 'sysdate+1/1440'); --马上运行,然后每分钟运行一次
sys.dbms_output.put_line(job_id); --输出job Id
end;
每个job创建后,都会对应一个唯一的数字,在pl/sql的output面板里,可以看到dbms_output.put_line输出的job id值。
2、查看job运行情况
select * from dba_jobs; --需要dba权限
select * from dba_jobs_running; --需要dba权限
select * from all_jobs;
select * from user_jobs;
3、删除job
begin
dbms_job.remove(108); --108为具体的job ID,可以通过select * from user_jobs查询得到
end;
4、手动启动job
begin
dbms_job.run(109);--运行指定Job
end;
最后,再给几个关于创建job的小例子:
a、带参数的存储过程调用
declare
job_id number;
begin
sys.dbms_job.submit(job_id, 'P_JOB_XXX(sysdate-30,sysdate);', sysdate, 'trunc(sysdate+1)+(4*60)/(24*60)'); --每天早上4:00运行
sys.dbms_output.put_line(job_id); --输出job Id
end;
这里指定了P_JOB_CKG的传入参数为sysdate及sysdate-30,如果是字符串参数,需要加二个单引号,类似 'P_XXX(''参数值'');'
此外,单引号还可以用CHR(39)来代替,例如:
DECLARE
JOB_ID NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT(JOB_ID,
'P_JOB_XXX(TO_DATE(' || chr(39) ||
'2014-2-12 00:00:00' || chr(39) || ', ' || chr(39) ||
'YYYY-MM-DD HH24:MI:SS' || chr(39) || '),TO_DATE(' ||
chr(39) || '2014-2-12 23:59:59' || chr(39) || ', ' ||
chr(39) || 'YYYY-MM-DD HH24:MI:SS' || chr(39) ||
'));',
TO_DATE('2015-1-6 10:00:00', 'YYYY-MM-DD HH24:MI:SS'),
'SYSDATE+10/(60*24)'); --2015-01-06 10:00:00 开始执行,每10分钟执行一次
SYS.DBMS_OUTPUT.PUT_LINE(JOB_ID); --输出JOB ID
END;
中间那一串恶心的拼接,无非是要得到字符串:
P_JOB_XXX(TO_DATE('2014-2-12 00:00:00', 'YYYY-MM-DD HH24:MI:SS'),TO_DATE('2014-2-12 23:59:59', 'YYYY-MM-DD HH24:MI:SS'));
b、关于指定时间的表达式示例
每天运行一次
'SYSDATE + 1'
每小时运行一次
'SYSDATE + 1/24'
每10分钟运行一次
'SYSDATE + 10/(60*24)'
每30秒运行一次
'SYSDATE + 30/(60*24*60)'
每隔一星期运行一次
'SYSDATE + 7'
每个月最后一天运行一次
'TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,1))) + 23/24'
每年1月1号零时
'TRUNC(LAST_DAY(TO_DATE(EXTRACT(YEAR FROM SYSDATE)||'12'||'01','YYYY-MM-DD'))+1)'
每天午夜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)'
每个月最后一天的23点
'TRUNC (LAST_DAY (SYSDATE)) + 23 / 24'
每个季度最后一天的晚上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)'
oracle: job使用的更多相关文章
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...
- Oracle 的基本操作符
!= 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...
- 使用Zabbix监控Oracle数据库
Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...
- 基于Oracle安装Zabbix
软件版本 Oracle Enterprise Linux 7.1 64bit Oracle Enterprise Edition 12.1.0.2 64bit Zabbix 3.2.1 准备工作 上传 ...
- Oracle Database 12c Data Redaction介绍
什么是Data Redaction Data Redaction是Oracle Database 12c的高级安全选项之中的一个新功能,Oracle中国在介绍这个功能的时候,翻译为“数据编纂”,在EM ...
- 使用Oracle官方巡检工具ORAchk巡检数据库
ORAchk概述 ORAchk是Oracle官方出品的Oracle产品健康检查工具,可以从MOS(My Oracle Support)网站上下载,免费使用.这个工具可以检查Oracle数据库,Gold ...
- 利用Oracle RUEI+EM12c进行应用的“端到端”性能诊断
概述 我们知道,影响一个B/S应用性能的因素,粗略地说,有以下几个大的环节: 1. 客户端环节 2. 网络环节(可能包括WAN和LAN) 3. 应用及中间层环节 4. 数据库层环节 能够对各个环节的问 ...
- 使用技术手段限制DBA的危险操作—Oracle Database Vault
概述 众所周知,在业务高峰期,某些针对Oracle数据库的操作具有很高的风险,比如修改表结构.修改实例参数等等,如果没有充分评估和了解这些操作所带来的影响,这些操作很可能会导致故障,轻则导致应用错误, ...
随机推荐
- C#参考书的链接推荐
Visual C#.NET入门与提高http://download.chinaitlab.com/soft/6330.htm 使用Visual C# 开发asp.NET入门http://downloa ...
- 使用iText库创建PDF文件
前言 译文连接:http://howtodoinjava.com/apache-commons/create-pdf-files-in-java-itext-tutorial/ 对于excel文件的读 ...
- DROP_SNAPSHOT_RANGE过程不能清理表RM$_SNAPSHOT_DETAILS
今天在测试.验证DROP_SNAPSHOT_RANGE不能彻底快照的过程中遇到了DROP_SNAPSHOT_RANGE无法清理WRM$_SNAPSHOT_DETAILS表中数据的情况,测试服务器版本为 ...
- MySQL substring:字符串截取 (转载)
MySQL 字符串截取函数:left(), right(), substring(), substring_index().还有 mid(), substr().其中,mid(), substr() ...
- [Config]Zabbix的Mongodb插件安装,centos
1.yum install php-devel php-pear httpd-devel 2.安装mongo php驱动,pecl install mongo 3.pecl install mongo ...
- Tomcat源码分析之—具体启动流程分析
从Tomcat启动调用栈可知,Bootstrap类的main方法为整个Tomcat的入口,在init初始化Bootstrap类的时候为设置Catalina的工作路径也就是Catalina_HOME信息 ...
- Eclipse常用的十个方便的快捷键
Ctrl+F:在当前代在cg中查找关键字 Ctrl+H:打开查找窗口 Ctrl+/: 屏蔽代码(注释): (以下转自:http://wenku.baidu.com/view/d291ade3172de ...
- 二、Android学习第二天——初识Activity(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...
- 远程连接mysql报错【1130 -host 'localhost' is not allowed to connect to this mysql server】
远程连接mysql时包如下错误: 1130 -host 'localhost' is not allowed to connect to this mysql server 解决办法 本地用root账 ...
- Entity framework 级联删除注意事项
版本:EF6.0.1 RC 一对多场景,在子对象映射中开启级联删除情况下,删除父对象将自动删除其下所有子对象,需要注意一些事项: 需要保证DbContext中已经加载了该父对象的所有子对象. 如果Db ...