资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

oracle如何实现定时 oracle定时器任务时间格式

ORACLE数据库怎么做定时执行操作

1.create table test(id int,starttime date,state int);

隆尧网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联于2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联

2.create or replace procedure sp_update is

cursor cur is select * from test where state=0;

v_id int;

v_starttime date;

v_state int;

begin

open cur;

loop

fetch cur into v_id,v_starttime,v_state;

exit when cur%notfound;

update test set state=1 where starttime=sysdate;

commit;

end loop;

close cur;

end;

/

3.创建JOB

SQL variable job1 number;

SQL

SQL begin

2 dbms_job.submit(:job1,sp_update;',sysdate,'sysdate+1/1440'); --每天1440分钟,即一分钟运行sp_update过程一次

3 end;

4 /

PL/SQL 过程已成功完成。

运行JOB

SQL begin

2 dbms_job.run(:job1);

3 end;

4 /

怎样实现每天自动执行oracle的存储过程一次?

用job

oracle定时器调用存储过程

1、创建一个表,为了能清楚看到定时器的运行情况我们创建一个带有日期字段的表

Sql代码  

create table job_table(run_time date);  

create table job_table(run_time date);

2、创建存储过程

Sql代码  

create or replace procedure job_proc is  

begin

insert into job_table (run_time) values (sysdate);  

end;  

create or replace procedure job_proc is

begin

insert into job_table (run_time) values (sysdate);

end;

3、创建job,并且指定为一分钟执行一次

Sql代码  

declare

job number;  

begin

dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');  

end/  

commit;  

declare

job number;

begin

dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');

end/

commit;

4.创建之后自动处于运行状态,我们查询job表,看看我们创建的job

Sql代码  

select job,broken,what,interval,t.* from user_jobs t;  

select job,broken,what,interval,t.* from user_jobs t;

job broken what interval ...

81 N job_proc; TRUNC(sysdate,'mi') + 1 / (24*60) ...

用job

oracle定时器调用存储过程

创建一个表,为了能清楚看到定时器的运行情况我们创建一个带有日期字段的表

Sql代码  

create table job_table(run_time date);  

create table job_table(run_time date);

2.创建存储过程

Sql代码  

create or replace procedure job_proc is  

begin

insert into job_table (run_time) values (sysdate);  

end;  

create or replace procedure job_proc is

begin

insert into job_table (run_time) values (sysdate);

end;

3.创建job,并且指定为一分钟执行一次

Sql代码  

declare

job number;  

begin

dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');  

end/  

commit;  

declare

job number;

begin

dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');

end/

commit;

4.创建之后自动处于运行状态,我们查询job表,看看我们创建的job

Sql代码  

select job,broken,what,interval,t.* from user_jobs t;  

select job,broken,what,interval,t.* from user_jobs t;

job broken what interval ...

81 N job_proc; TRUNC(sysdate,'mi') + 1 / (24*60) ...

oracle定时更新(JOBS)

oracle定时更新(JOBS)

rm.pro_hrm_emp_info_job过程

需要每天都更新,所以先创建个procedure,再创建个job就可以实现定时更新

create or replace procedure rm.pro_hrm_emp_info_job is

zm

begin

update rm.hrm_emp_info

set ages = to_number(TRUNC(nvl((sysdate brith_date) / 365, 0))),

leng_serv = to_number(TRUNC(nvl((sysdate work_date) / 365, 0))),

ins_len_ser = to_number(TRUNC(nvl((sysdate ente_appe_date) / 365,

0)));

commit;

end pro_hrm_emp_info_job;

相应的`job

declare

jobno number;

begin

dbms_job.submit(jobno,’rm.pro_hrm_emp_info_job;’,trunc(sysdate),’trunc(sysdate)+1’);每天零点更新

commit;

end;

/

分解下job

dbms_job.submit(jobno, job号,由sys.jobseq生成

’rm.pro_hrm_emp_info_job;’, 要执行的procedure

trunc(sysdate), 下次要执行的时间

’trunc(sysdate)+1’); 每次间隔的时间,此处的1标识一天 也可1/1440每一分钟执行一次

查看

select * from sys.user_jobs;

其中创建的jobno(任务号)由sys.jobseq序列生成

主由packages中的sys.dbms_job执行

细节可以查看sys.dbms_job包内容。 ;

如果需要从oracle中每天定时导出数据用什么方法?

1、创建数据库日志表导出为文本文件的脚本tabout.ctl或tabout.sql

注意:该日志导出后在c:\HttpLog目录下

tabout.ctl脚本内容如下:

SET NEWPAGE NONE

SET HEADING OFF

SET TERM OFF

SET SPACE 0

SET PAGESIZE 0

SET TRIMOUT ON

SET TRIMSPOOL ON

SET LINESIZE 2500

set feedback off

set echo off

SET VERIFY OFF

column v_date new_value filename;

select to_char(sysdate,'yyyymmdd') || '.log' v_date from dual;

spool ..\HttpLog\filename            

select id||','||name from orcluser.test;

spool off;

exit;

2、创建调用该脚本的logout.bat文件

logout.bat内容如下:

mkdir ..\HttpLog\

C:\oracle\ora92\bin\sqlplus orcluser/orcl @C:Oracleout.ctl

说明:该bat文件直接在当前目录下创建名为HttpLog的文件夹,以便tabout.ctl脚本输出的文件存放到该目录下。其通过调用Oracle中sqlplus可执行文件来执行tabout.ctl脚本,所以该文件直接双击即可运行,无需其他操作。

3、通过windows定时任务实现自动定期执行

“在控制面板——任务计划——添加任务计划”中建立定期将数据库中日志表数据导出为文本格式(如:你可以根据需求设置为每天对日志表数据进行导出)。根据你当前对日志文件路径的存储需求,修改上面两个脚本中的存储路径,在windows定时任务直接调用logout.bat文件执行即可。

Oracle 定时任务job实际应用

Oracle定时任务是在oracle系统中一个非常重要的子系统,运用得当,可以大大提高我们系统运行和维护能力。oracle定时任务的功能,可以在指定的时间点自行执行任务。

那么在实际工作中,什么样的场景会用到定时任务呢?下面是在实际工作中用到的真实业务场景举例

上面是通过脚本创建,当然也可以通过plsql图形化工具来创建,具体创建过程如下

**系统会自动分配一个任务号jobno ** ,根据jobno 可以进行如下定时任务操作

查询结果如下

其中broken = N 表示该job已经生效

我们再来查看目标表中有没有定时插入数据

可以看到,定时一分钟插入了一条数据。

1、根据jobno,执行以下脚本可以停止job

再来查看定时任务是否停用成功

我们发现BROKEN=Y 说明定时任务已经停止成功了

BROKEN = N ,刚才的定时任务又启动了

下面总计了一些定时任务中常用的运行时间

Oracle中如何定时执行一条SQL语句

通过网上查询,找到一种方案,就是先在oracle里面对要定时的sql写成存储过程,再用DBMS_scheduler对存储过程进行定时执行。

在数据库中新建了一个表MY_JOB_TEST

在数据库中新建了一个表MY_JOB_TEST

在数据库中新建了一个表MY_JOB_TEST

在PLSQL中,执行下面语句模拟存储过程的调用,执行后要点提交才有反应

[sql] view plain copy

BEGIN

INSERT INTO MY_JOB_TEST (NUM) VALUES (1);

END;

然后下面建立一个存储过程JOB_TEST

(注意,这里用户需要CREATE JOB权限,可以用超级管理员用户执行下面语句给指定用户赋予该权限)

[sql] view plain copy

Grant Create Job To 指定用户名

[sql] view plain copy

SQLCREATE OR REPLACE PROCEDURE

JOB_TEST

BEGIN

INSERT INTO MY_JOB_TEST (NUM) VALUES (1);

END;

(此处要执行存储过程不能用exec JB_TEST,这种执行方式只能在命令行中使用)

使用DBMS_SCHEDULER进行定时,这里为每分钟执行一次

[sql] view plain copy

SQL BEGIN

DBMS_SCHEDULER.CREATE_JOB (

job_name           =  'SCHEDULER_TEST',

job_type           =  'STORED_PROCEDURE',

job_action         =  'JOB_TEST',

start_date         =  sysdate,

repeat_interval    =  'FREQ=MINUTELY;INTERVAL=1');

END;

但是这样子定时任务并不会执行。

我们可以用下面的命令查看一下scheduler的状态

[plain] view plain copy

SQLSELECT * FROM USER_SCHEDULER_JOBS;

此时我们可以看到enable的状态是false的,因此我们需要去启动定时任务

[plain] view plain copy

SQLBEGIN

DBMS_SCHEDULER.ENABLE('SCHEDULER_TEST');

END

dbms_scheduler.enable('j_test');  --启用jobs   

dbms_scheduler.disable('j_test');  --禁用jobs    

dbms_scheduler.run_job('j_test');  --执行jobs    

dbms_scheduler.stop_job('j_test');  --停止jobs   

dbms_scheduler.drop_job('j_test');  --删除jobs  

然后再查询job的enable装态,发现为true了。

然后查看MY_JOB_TEST表,发现每分钟会往里面添加记录。

当需要修改定时任务或者调度的其他属性时,可以用下面的

dbms_scheduler.set_attribute('调度名','调度属性','调度值');

至此,定时任务完成。


文章名称:oracle如何实现定时 oracle定时器任务时间格式
当前网址:http://www.cdkjz.cn/article/hhdjde.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220