oracle创建计划任务
特别提示:
oracle是执行完任务,才按照interval去计算下次执行时间!!! 为精确每个5分钟执行一个任务,必须自己计算时间。
如:trunc_minute(sysdate)+/ create or replace function trunc_minute(v_date date) return date as begin
return to_number(trunc(to_char(v_date, 'mi')/))*/(*) + trunc(v_date, 'hh24');
end;
创建存储过程
备注:默认在存储过程中是不允许执行truncate table tablename,所以要加
execute immediate
create or replace procedure truncate_table as
begin
execute immediate 'truncate table test_STATUS';
end;
每天3点执行
在pl/sql
declare
jobno number;
begin
dbms_job.submit(job =>jobno,
what =>'truncate__table;',
next_date =>sysdate,
interval =>'trunc(sysdate + 1) + 3/24');
end;
sql plus
variable jobno number;
begin
sys.dbms_job.submit(job => :jobno,
what => 'change_date;',
next_date => to_date('18-11-2013', 'dd-mm-yyyy'),
interval => 'sysdate+1/1440');--每天1440分钟,即一分钟运行change_date过程一次
commit; --必须有commit,如果没有是查不到该job的!!!
end;
variable相当于一个sql*plus环境的全局变量,declare里定义的是pl/sql中的局部变量。
查看job
select * from user_jobs;--查看当前用户的调度任务
select * from dba_jobs_running;--查看正在执行的调度任务
select * from dba_jobs;--查看执行完的调度任务
select * from all_jobs; -- 查看数据库系统所有任务
常用时间设置
()如果想每天凌晨1 点执行,则此参数可设置为
'trunc(sysdate)+25/24';
()如果想每周一凌晨1 点执行,则此参数可设置为
'trunc(next_day(sysdate,1))+25/24';
()如果想每月1 号凌晨1 点执行,则此参数可设置为
'trunc(last_day(sysdate))+25/24';
()如果想每季度执行一次,则此参数可设置为
'trunc(add_months(sysdate,3),'Q')+1/24';
()如果想每半年执行一次,则此参数可设置为'add_months(trunc(sysdate,'yyyy'),6)+1/24';
()如果想每年执行一次,则此参数可设置为'add_months(trunc(sysdate,'yyyy'),12)+1/24'。 每天运行一次
'SYSDATE + 1'
每小时运行一次
'SYSDATE + 1/24'
每10分钟运行一次
'SYSDATE + 10/(60*24)'
每30秒运行一次
'SYSDATE + 30/(60*24*60)'
每隔一星期运行一次
'SYSDATE + 7'
每分钟
dbms_job.submit(:v_job_no, 'insert into job_test values(sysdate);', sysdate,
'sysdate+1/1440');
备注:
oracle定时执行job queue 的后台进程是SNP,要启动
snp,首先看系统模式是否支持
sql> alter system enable restricted session;
或
sql> alter system disenable restricted session;
利用上面的命令更改系统的会话方式为disenable restricted,为snp的启动创建条件.
再有就是配置job queue的启动参数,snp的启动参数位于oracle的初始化文件中,
job_queue_processes=10 (oracle10gde 默认值)
job_queue_interval=N
第一行定义snp进程的启动个数为10,正常范围是0-36,根据任务的多少,可以配置
不同的数值.
第二行定义系统每隔几秒唤醒该进程一次.缺省是60,正常范围是1-3600秒.事实上,该进程执行完
当前任务后,就进入睡眠状态,睡眠一段时间后,由系统的总控负责将其唤醒。
如果该文件中没有上面两行,请按照如上配置添加。配置完成后,需要重新启动数据库,使其生效
。注意:如果任务要求执行的间隔很短的话,N的配置也要相应地小一点。
查看job queue的详细信息,查询数据库字典 user_jobs
eg:
sql> select job,next_date,next_sec,broken from user_jobs;
实验测试:
- create table HWQY.TEST
- (
- CARNO VARCHAR2(30),
- CARINFOID NUMBER
- )
二、在PLSQL中创建存储过程:
- create or replace procedure pro_test
- AS
- carinfo_id number;
- BEGIN
- select s_CarInfoID.nextval into carinfo_id
- from dual;
- insert into test(test.carno,test.carinfoid) values(carinfo_id,'123');
- commit;
- end pro_test;
三、在SQL命令窗口中启动任务:
在SQL>后执行
- VARIABLE jobno number;
- begin
- DBMS_JOB.SUBMIT(:jobno,
- 'pro_test;',
- SYSDATE,'sysdate+1/24/12');
- commit;
- end;
四、跟踪任务的情况(查看任务队列):
- SQL> select job,next_date,next_sec,failures,broken from user_jobs;
- JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
- ---------- ----------- ---------------- ---------- ------
- 1 2008-2-22 ?01:00:00 0 N
说明有一个任务存在了。
执行select * from test t查看定时任务的结果。可以看出定时任务是正常执行了的。
五、停止已经启动的定时任务:
先执行select job,next_date,next_sec,failures,broken from
user_jobs;
以查看定时任务的job号。
在SQL>中执行下面的语句停止一个已经启动的定时任务:
- begin
- dbms_job.remove(1);
- commit;
- end;
表示停止job为1的任务。
执行后显示如下:
- PL/SQL procedure successfully completed
六、查看进程数:
- show parameter job_queue_processes;
必须>0, 否则执行下面的命令修改:
- alter system set job_queue_processes=;
七、再创建一个任务(每5分钟执行一次):
- variable jobno number;
- begin
- dbms_job.submit(:jobno, 'pro_test;',
- sysdate,'sysdate+1/24/12');
- commit;
- end;
建立一个定时任务后,在PLSQL中查看JOB,它的sql语句类似的是如下:
- begin
- sys.dbms_job.submit(job => :jobno,
- what => 'pro_test;',
- next_date => to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),
- interval => 'sysdate+1/24/12');
- commit;
- end;
所以,创建一个任务的完整的格式是:
- variable jobno number;
- begin
- sys.dbms_job.submit(job => :jobno,
- what => 'pro_test;',
- next_date => to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),
- interval => 'sysdate+1/24/12');
- commit;
- end;
--系统会自动分配一个任务号jobno。
八、 执行作业查看
- select job,next_date,next_sec,failures,broken from user_jobs;
结果:
JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
1 1 2008-2-22 AM 01:00:00 01:00:00 0 N
2 2 2008-2-21 PM 05:42:45 17:42:45 0 N
3 3 2008-2-21 PM 05:42:45 17:42:45 0 N
九、创建
job的格式:
- DBMS_JOB.SUBMIT(:jobno,//job号
- 'your_procedure;',//要执行的过程
- trunc(sysdate)+1/24,//下次执行时间
- 'trunc(sysdate)+1/24+1'//每次间隔时间
- );
删除job:dbms_job.remove(jobno);
修改要执行的操作:job:dbms_job.what(jobno,what);
修改下次执行时间:dbms_job.next_date(job,next_date);
修改间隔时间:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
启动job:dbms_job.run(jobno);
例子:
- VARIABLE job35 number;
- begin
- DBMS_JOB.SUBMIT(job35 ,
- 'Procdemo;',//Procdemo为过程名称
- SYSDATE, 'SYSDATE + 1/720');
- commit;
- end;
创建JOB
variable jobno number;
begin
dbms_job.submit(:jobno, 'P_CRED_PLAN;',SYSDATE,'SYSDATE+1/2880',TRUE);
commit;
-- 查看Job信息
SELECT * FROM DBA_JOBS ;
SELECT * FROM DBA_JOBS_RUNNING;
SELECT * FROM g_test ORDER BY ID ASC; 运行JOB
SQL> begin
dbms_job.run(:job1);
end;
/ 删除JOB
SQL> begin
dbms_job.remove(:job1);
end;
十、执行作业必须设置的参数
-----修改job_queue_processes的值(保证其不为0否则JOB不自动运行)
可通过select * from v$parameter;查看其值;
方法1、startup
pfile='C:oracleora90databaseinitorcl.ora';
需要修改initorcl.ora文件的job_queue_processes参数,然后重新启动数据库以后才能生效
方法2、alter
system
set job_queue_processes=10
不需要重新启动数据库就能生效,系统自动修改init.ora文件
oracle创建计划任务的更多相关文章
- Oracle执行计划详解
Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介: ...
- 【转】Oracle执行计划解释
Oracle执行计划解释 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物 ...
- 看懂Oracle执行计划
最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...
- Oracle定时计划快速使用
Oracle定时计划快速使用 前言: SQL Server中有相关的定时计划,可以直接打开sql server 的任务管理器进行配置,可以方便.快速实现定时执行相应任务.相应的Oracle也有对应的定 ...
- oracle 执行计划详解
简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容. 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 ...
- 从Count看Oracle执行计划的选择
一. 前言 在调查一个性能问题的时候,一个同事问道,为什么数据库有些时候这么不聪明,明明表上有索引,但是在执行一个简单的count的时候居然全表扫描了!难道不知道走索引更快么? 试图从最简单的coun ...
- oracle 创建索引
一.索引简介 1.索引相当于目录 2.索引是通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率. 3.索引的创建要适度,多了会影响增删改的效率,少了会影响查询的效率,索引最好创建在取 ...
- [转]Oracle执行计划详解
Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介: ...
- Oracle执行计划 explain plan
Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值.不过你可以像使用其它列那样 ...
随机推荐
- bzoj1511 [POI2006]OKR-Periods of Words kmp+乱搞
1511: [POI2006]OKR-Periods of Words Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 351 Solved: 220[S ...
- SpringBoot (四) :thymeleaf 使用详解
原文出处: 纯洁的微笑 在上篇文章< springboot(二):web综合开发 >中简单介绍了一下thymeleaf,这篇文章将更加全面详细的介绍thymeleaf的使用.thymele ...
- sqlserver 2008连接
初次安装使用SQL server 2008时,可能会遇到无法连接到(local)的情况.那么,如何解决此问题? 工具/原料 SQL server 2008 方法/步骤 1 打开SQL se ...
- z-index详细攻略
概念 z-index 属性设置元素的堆叠顺序.拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面. 层级关系的比较 1. 对于同级元素,默认(或position:static)情况下文档流后面的 ...
- Java enum的用法详解 (转)
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...
- 【BZOJ】4764: 弹飞大爷 LCT
[题意]给定n个数字ai,表示大爷落到i处会被弹飞到i+ai处,弹飞到>n或<1处则落地.m次操作,修改一个ai,或询问大爷落到x处经过几次落地(或-1).n,m<=10^5,|ai ...
- 【leetcode 简单】 第八题 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1 ...
- 【leetcode 简单】第一题 两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...
- Linux命令学习手册-route命令
route [-CFvnee] route [-v] [-A family] add [-net|-host] target [netmask Nm] [gw Gw] [metric N] [mss ...
- ACM International Collegiate Programming Contest World Finals 2014
ACM International Collegiate Programming Contest World Finals 2014 A - Baggage 题目描述:有\(2n\)个字符摆在编号为\ ...