暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORACLE JOB 定时任务

DB小榴莲 2019-08-07
1621

Job在oracle数据库中就是一个定时任务,它可以按照人为设定,在规定的时间做规定的事。类似java语言中的timer(java.util.Timer),类似Linux中的crontab。

 


模拟场景


使用job定时调用存储过程向一张表中插入数据

 

准备表结构

create table JOB_TEST

(card_id NUMBER not null,birth_day DATE);

 

alter table JOB_TEST

add constraint PK_TEST_JOB primary key  (card_id);


创建一个序列

create sequence SEQ_JOB_TEST

minvalue 1

maxvalue 99999999

start with 1

increment by 1

cache 10;

 

创建存储过程

create or replace procedure P_JOB_TEST is

begin

   insert into job_test(card_id, birth_day) values(seq_job_test.nextval,sysdate);

   commit;

end P_JOB_TEST;

/

 

创建job(每个job创建后,都会对应一个唯一的job号

declare

  job_id  number;

begin

   sys.dbms_job.submit(job_id, 'P_JOB_TEST;', sysdate, 'sysdate+1/1440');  --立刻运行,然后每分钟运行一次

   sys.dbms_output.put_line(job_id); --输出job Id

end;

/


通过几个视图可以观察到job的运行情况

select * from dba_jobs;

select * from dba_jobs_running;

select * from all_jobs;

select * from user_jobs;

 


dba_jobs视图概览


JOB        job身份标识
LOG_USER   提交任务的用户
PRIV_USER  赋予任务权限的用户
SCHEMA_USERjob的用户
LAST_DATE  最后一次成功运行任务的时间
LAST_SEC   最后一次成功运行任务的启始时间
THIS_DATE  正在运行任务的开始时间,如果没有运行任务则为null
THIS_SEC   正在运行任务的开始时间,时间格式更精确
NEXT_DATE  下一次job运行时间
NEXT_SEC   上一次成功执行job的开始时间
TOTAL_TIME 该任务运行所需要的总时间,单位为秒
BROKEN     标志参数,Y标示任务中断,以后不会运行
INTERVAL   标志参数,Y标示任务中断,以后不会运行
FAILURES   任务运行连续没有成功的次数
WHAT       执行任务的PL/SQL块
NLS_ENV    job的nls环境
MISC_ENV   适用于该job的其他会话参数
INSTANCE   可以执行或者正在执行job的实例号,默认为0



删除job

 

begin

   dbms_job.remove(3304); ---3304是job号

end;

 

 

手动启动Job

 

begin

   dbms_job.remove(3304); --3304为具体的job ID

end;

 


手动停止一个job


首先查看目标job的运行状态


select * from dba_jobs_running where  job=4403;

 

将其置为broken状态

 

SQL> exec dbms_job.broken(4403,TRUE);

SQL> commit;   

 

最后将该job的进程在操作系统上kill掉


注意:如果环境是rac,在每个实例上都要检查,有可能在node1上kill掉job进程,还会在node2,node3....上起来。

最后修改时间:2021-06-23 11:06:59
文章转载自DB小榴莲,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论