ITPub博客

首页 > 数据库 > Oracle > oracle 作业管理

oracle 作业管理

原创 Oracle 作者:一鸣_x88 时间:2021-07-28 13:13:29 1 删除 编辑

作业管理实验


job_queue_processes参数介绍

      job_queue_processes参数决定了job作业能够使用的总进程数。

     当该参数为0值,任何job都不会被执行,建议合理设置该值且至少大于1。

     对于job运行时间也应该尽量合理的设置间隔以及启动时间。

     如果同一时间内运行的Job数很多,过小的参数值导致job不得不进行等待。而过大的参数值则消耗更多的系统资源。

     对于存在依赖关系的job,尽可能将其进行合并到一个job中,如使用chain等。

alter system set job_queue_processes=100;




1.普通用户创建作业

1.1建一张表

22:45:17 lhm@ orcl2>create table auto_open_paytype_date (datetime date,type number);


1.2 建一个存储过程

create or replace procedure auto_open_paytype__job_proc

as

BEGIN

update tablename_666 set isopen=1 where id=666;

insert into auto_open_paytype_date values (sysdate,'1');

END;

/

Warning: Procedure created with compilation error


22:48:24 lhm@ orcl2>show error

Errors for PROCEDURE AUTO_OPEN_PAYTYPE__JOB_PROC:


LINE/COL ERROR

-------- -----------------------------------------------------------------

4/1 PL/SQL: SQL Statement ignored

4/8 PL/SQL: ORA-00942: table or view does not exist


show error  --查看报错原因

select * from user_source;  --查看存储过程的信息



建立关联表

create table tablename_666 (id number);


alter PROCEDURE AUTO_OPEN_PAYTYPE__JOB_PROC compile;  #重新编译过程



1.3创建作业

declare auto_open_paytype_job number;

begin

dbms_job.submit(auto_open_paytype_job,'auto_open_paytype__job_proc;',to_date('2021-07-27 13:00:00','yyyy-MM-dd HH24:mi:ss'),'sysdate+1');

commit;

end;

/

dba


查看作业

col WHAT  for a30

col INTERVAL for a50

select job,what,log_user,priv_user,schema_user,last_date,last_sec,this_date,this_sec,next_date,next_sec,total_time,broken,interval,failures from dba_jobs;


select * from user_jobs;


select * from dba_jobs_running; #注意只有在作业运行的时候才可以查到状态,没有作业运行就会返回空行。



SELECT job FROM USER_JOBS;  #JOB字段就是作业的ID.



手动执行作业

>begin

dbms_job.run(3); --3就是作业ID

commit;

end;

/


SELECT job FROM USER_JOBS;  #JOB字段就是作业的ID.



将运行的作业置为失效状态:

EXEC DBMS_JOB.BROKEN(3,FALSE); 

broken中的第二个参数用于设置作业的状态,如果为true就表示将把作业状态置为失效的,作业不再运行,需要使用run强制运行;如果为false表示只失效本次执行,作业的状态仍然是有效,到作业的下一次运行时间时作业仍然会自动运行。

exec dbms_job.broken(3,true);

注意:停止作业需要使用作业的所有者执行,sys用户执行就会报错。

ERROR at line 1:

ORA-23421: job number 3 is not a job in the job queue

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86

ORA-06512: at "SYS.DBMS_IJOB", line 781

ORA-06512: at "SYS.DBMS_JOB", line 254

ORA-06512: at line 1



将失效的作业删除:

exec dbms_job.remove(25);

注意:必须要将有效的作业失败后再删除,否则有可能作业正在运行是无法删除的。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69978820/viewspace-2783766/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-07-09

  • 博文量
    8
  • 访问量
    9455