oracle 作业管理

来源:这里教程网 时间:2026-03-03 16:51:21 作者:

作业管理实验 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); 注意:必须要将有效的作业失败后再删除,否则有可能作业正在运行是无法删除的。

相关推荐