首页 > 数据库 > Oracle > oracle 作业管理
作业管理实验
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/ ,如需转载,请注明出处,否则将追究法律责任。