特别提示:
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;

实验测试:

一、在PLSQL中创建表:

  1. create table HWQY.TEST
  2.   (
  3.   CARNO     VARCHAR2(30),
  4.   CARINFOID NUMBER
  5.   )

  

  
二、在PLSQL中创建存储过程:

  1. create or replace procedure pro_test
  2.   AS
  3.   carinfo_id number;
  4.   BEGIN
  5.   select s_CarInfoID.nextval into carinfo_id
  6.   from dual;
  7.   insert into test(test.carno,test.carinfoid) values(carinfo_id,'123');
  8.   commit;
  9.   end pro_test;
 

    
三、在SQL命令窗口中启动任务:

在SQL>后执行

  1. VARIABLE jobno number;
  2.   begin
  3.   DBMS_JOB.SUBMIT(:jobno,
  4.   'pro_test;',
  5.   SYSDATE,'sysdate+1/24/12');
  6.   commit;
  7.   end;
 

   四、跟踪任务的情况(查看任务队列):

  1. SQL>  select job,next_date,next_sec,failures,broken from user_jobs;
  2.   JOB NEXT_DATE   NEXT_SEC           FAILURES BROKEN
  3.   ---------- ----------- ---------------- ---------- ------
  4.   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>中执行下面的语句停止一个已经启动的定时任务:

  1. begin
  2.   dbms_job.remove(1);
  3.   commit;
  4.   end;
 

表示停止job为1的任务。

执行后显示如下:

 
  1. PL/SQL procedure successfully completed
 

 六、查看进程数:

  1. show parameter job_queue_processes;
 

必须>0, 否则执行下面的命令修改:

  1. alter system set job_queue_processes=;
 

七、再创建一个任务(每5分钟执行一次):

  1. variable jobno number;
  2.   begin
  3.   dbms_job.submit(:jobno, 'pro_test;',
  4.   sysdate,'sysdate+1/24/12');
  5.   commit;
  6.   end;
 
 

建立一个定时任务后,在PLSQL中查看JOB,它的sql语句类似的是如下:

  1. begin
  2.   sys.dbms_job.submit(job => :jobno,
  3.   what => 'pro_test;',
  4.   next_date => to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),
  5.   interval => 'sysdate+1/24/12');
  6.   commit;
  7.   end;
 

所以,创建一个任务的完整的格式是:

  1. variable jobno number;
  2.   begin
  3.   sys.dbms_job.submit(job => :jobno,
  4.   what => 'pro_test;',
  5.   next_date => to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),
  6.   interval => 'sysdate+1/24/12');
  7.   commit;
  8.   end;

--系统会自动分配一个任务号jobno。

  八、 执行作业查看

  1. 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的格式:  

  1.  
  2.   DBMS_JOB.SUBMIT(:jobno,//job号
  3.   'your_procedure;',//要执行的过程
  4.   trunc(sysdate)+1/24,//下次执行时间
  5.   'trunc(sysdate)+1/24+1'//每次间隔时间
  6.   );
 

删除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);

例子:

  1. VARIABLE   job35   number;
  2.   begin
  3.   DBMS_JOB.SUBMIT(job35 ,
  4.   'Procdemo;',//Procdemo为过程名称
  5.   SYSDATE,   'SYSDATE   +   1/720');
  6.   commit;
  7.   end;
  8.   

创建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创建计划任务的更多相关文章

  1. Oracle执行计划详解

    Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:   ...

  2. 【转】Oracle执行计划解释

    Oracle执行计划解释 一.相关的概念     Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物 ...

  3. 看懂Oracle执行计划

    最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

  4. Oracle定时计划快速使用

    Oracle定时计划快速使用 前言: SQL Server中有相关的定时计划,可以直接打开sql server 的任务管理器进行配置,可以方便.快速实现定时执行相应任务.相应的Oracle也有对应的定 ...

  5. oracle 执行计划详解

    简介:     本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容.     并有总结和概述,便于理解与记忆! +++ 目录 ---     一.相关的概念    ...

  6. 从Count看Oracle执行计划的选择

    一. 前言 在调查一个性能问题的时候,一个同事问道,为什么数据库有些时候这么不聪明,明明表上有索引,但是在执行一个简单的count的时候居然全表扫描了!难道不知道走索引更快么? 试图从最简单的coun ...

  7. oracle 创建索引

    一.索引简介 1.索引相当于目录 2.索引是通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率. 3.索引的创建要适度,多了会影响增删改的效率,少了会影响查询的效率,索引最好创建在取 ...

  8. [转]Oracle执行计划详解

    Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:   ...

  9. Oracle执行计划 explain plan

    Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值.不过你可以像使用其它列那样 ...

随机推荐

  1. jdk1.5后枚举类的定义规则

    转: http://blog.csdn.net/willcold/article/details/12844487  JDK1.5 新增的enum关键字用于定义枚举类             枚举类也 ...

  2. bzoj 1004 组合

    代码: //根据Burnside定理:有m个置换k钟颜色,所有本质不同的染色方案数就是每种置换的不变元素的个数的平均数.所谓不变元素就是一种染色方案 //经过置换变换后和之前一样.所以现在就是要求不变 ...

  3. 前端PHP入门-034-Session技术-掌握级别

    而Session是通过将数据保存在服务器端来实现保持连接的.我们通过一个例子来了解session的机制. 我们去饮料店买饮料,下单以后服务员会给我们一个号码牌,然后你走到一旁,服务员并不认识你是谁,如 ...

  4. DLL基本知识

    一.生成方式: 使用DEF文件定义导出接口或使用__declspec(dllexport)描述接口,编译链接后生成dll+lib,其中lib是导入库,里面只有对导出接口的描述,而没有具体实现. 二.链 ...

  5. OpenCV---边缘保留滤波EPF

    OpenCV经典的两种实现EPF方法:高斯双边和均值迁移 一:双边模糊 差异越大,越会完整保留 def bi_demo(image): dst = cv.bilateralFilter(image,0 ...

  6. ios 字符串截取

    NSString *str = @"my name is jiemu"; 1.从第三个字符开始,截取长度为4的字符串 NSString *str2 = [str substring ...

  7. [洛谷P3228] [HNOI2013]数列

    洛谷题目链接:[HNOI2013]数列 题目描述 小T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨.股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N.在疯涨的K天中小T观察到: ...

  8. 【CodeForces】889 B. Restoration of string

    [题目]B. Restoration of string [题意]当一个字符串在字符串S中的出现次数不小于任意子串的出现次数时,定义这个字符串是高频字符串.给定n个字符串,求构造出最短的字符串S满足着 ...

  9. 下拉刷新和UITableView的section headerView冲突的原因分析与解决方案

    UITableView:下拉刷新和上拉加载更多 [转载请注明出处] 本文将说明具有多个section的UITableView在使用下拉刷新机制时会遇到的问题及其解决方案. 工程地址在帖子最下方,只需要 ...

  10. 【译】Attacking XML with XML External Entity Injection (XXE)

    原文链接:Attacking XML with XML External Entity Injection (XXE) XXE:使用XML外部实体注入攻击XML 在XML中,有一种注入外部文件的方式. ...