为Oracle建立job的demo
为Oracle建立job的demo
1.首先开启OracleJobSchedulerORCL这个服务器,它主要是用于管理oracle的任务的定时器
2.然后在pl/sql里执行如下脚本: (注意是命令窗口,而不是sql窗口)
create or replace procedure DeleteDataForJob as hisDataTime number; begin hisDataTime := 12; //删除12月之前的数据 delete from hps_passvehicleinfo p where p.pass_time <=add_months(sysdate,-hisDataTime); commit; end; / variable job number; begin dbms_job.submit(:job,'DeleteDataForJob;',trunc(sysdate+1), 'trunc(sysdate+1)+1' ); //每天0点执行一次,间隔一天 commit; end; /
得到一个job id 是一个整数
3.记住job变量的值,将值传入下面的方法
exec dbms_job.run(82);//82为任务计划的id
如果想变为每三个月执行一次: dbms_job.submit(:job,'DeleteDataForJob;',trunc(sysdate+1), 'trunc(sysdate+1)+90' ); //90天之后执行 如果想每天凌晨三点执行: dbms_job.submit(:job,'DeleteDataForJob;',trunc(sysdate+1) +3/24, ' (trunc(sysdate+1) +3/24) +1' ); //90天之后执行
创建ORACLE JOB
oracle job简介
主要的使用情景
定时在后台执行相关操作:如每天晚上0点将一张表的数据保存到另一张表中,2:定时备份数据库等
熟化说万事开头难,这里我只简单记述一个创建一个简单的job
步骤如下:
1、创建一张表g_test create table G_TEST ( ID NUMBER(12), C_DATE DATE ) 2、创建一个sequence create sequence G_SEQ minvalue 1 maxvalue 999999999999999999999999999 start with 141 increment by 1 cache 20; 3、创建一个存储过程 create or replace procedure prc_g_test is begin insert into g_test values(g_seq.nextval,sysdate); end prc_g_test; 4、创建job, 使用Submit()过程,工作被正常地计划好。 这个过程有五个参数:job、what、next_date、interval与no_parse。 PROCEDURE Submit ( job OUT binary_ineger, What IN varchar2, next_date IN date, interval IN varchar2, no_parse IN booean:=FALSE) job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。 what参数是将被执行的PL/SQL代码块。 next_date参数指识何时将运行这个工作。 interval参数何时这个工作将被重执行。 no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE 指示此PL/SQL代码在它第一次执行时应进行语法分析, 而FALSE指示本PL/SQL代码应立即进行语法分析。 在command window窗口中执行下面脚本 variable job1 number; begin sys.dbms_job.submit(job => :job, what => 'prc_g_test;', next_date => to_date('22-10-2008 10:06:41', 'dd-mm-yyyy hh24:mi:ss'), interval => 'sysdate+1/1440');--每天1440分钟,即一分钟运行test过程一次 commit; end; / ---------------------------------------------------------------------------------- 在plSQL中我的做法是: declare job number; begin sys.dbms_job.submit(job,'prc_g_test;',sysdate,'sysdate+1/1440'); end; ---------------------------------------------------------------------------------- 5、查看创建的job 查看相关job信息 1、相关视图 dba_jobs all_jobs user_jobs dba_jobs_running 包含正在运行job相关信息。 如: select * from dba_jobs 6、运行JOB 说明:Run()过程用来立即执行一个指定的工作。这个过程只接收一个参数: SQL> begin 2 dbms_job.run(:job); 3 end; 4 / ---------------------------------------------------------------------------------- 在plSQL中我的做法是: begin dbms_job.run(3017); end; ---------------------------------------------------------------------------------- 7、删除JOB SQL> begin 2 dbms_job.remove(:job);--:job可以用dba_jobs.job的值代替如:1198 3 end; 4 /
说明:在sqlplus命令行直接定义变量要variable!!!!