Oracle 9i Job Queues总结

1、Oracle与Job有关的操作都是通过DBMS_JOB来完成的;

2、后台进程CJQ0(Coordinate Job Queue)定期查询dba_views,并将这些job按时间进行排序。当发现一个Job可以运行了,就自动产生一个Job Queue进程(Jnnn)来执行这个Job.

3、通过数据库的参数JOB_QUEUE_PROCESSES来控制:1)是否启动CJQ0  2)Job Queue进程的个数(即可同事执行的Job的最大个数)。JOB_QUEUE_PROCESSES为0,则CJQ0不启动,所有Job均不会如期执行。 JOB_QUEUE_PROCESSES为为20,表明最大20个Job可以同时运行.  JOB_QUEUE_PROCESSES参数是dynamic的,可动态修改:ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 20;

4、创建一个JOB:
  VARIABLE jobno NUMBER
  BEGIN
  DBMS_JOB.SUBMIT(:jobno,
  'DBMS_DDL.ANALYZE_OBJECT(''TABLE'',
  ''HR'', ''EMPLOYEES'',
  ''ESTIMATE'', NULL, 50);',
  SYSDATE, 'SYSDATE + 1');
  COMMIT;
  END;
  /
  PRINT jobno
 DBMS_JOB.SUBMIT 的格式为:
 SUBMIT(JOBNO,WHAT,NEXT_DATE,INTERVAL,NO_PARSE),其中:
  jobno是 一个OUT参数。当SUBMIT执行完毕,jobno会带出ORACLE分配的job号码。这个job号码作为这个JOB的标识
  WHAT是这 个JOB要做的事情。用''引起来的任何PL/SQL语句
  NEXT_DATE是下次要执行这个JOB的时间。默认为SYSDATE
  INTERVAL 是间隔,决定了这个任务下次运行的时间。每次JOB运行时,都会计算这个INTERVAL字段,并在执行完毕后将这个值放到NEXT_DATE字段中去, 作为下次执行的时间;
  NO_PARSE:决定WHAT部分的东西实在SUBMIT的时候进行解析(FALSE)还是第一次执行的时候解析 (TRUE)。
  
5、常见的WHAT:
 'myproc(''10-JAN-99'', next_date, broken);'
 'scott.emppackage.give_raise(''JFEE'', 3000.00);'
 'dbms_job.remove(job);'

6、常见的INTERVAL:
 'SYSDATE + 7'    每七天
 'SYSDATE + 1/48' 每半小时
 'NEXT_DAY(TRUNC(SYSDATE), ''MONDAY'') + 15/24' 每周一的下午三点
 'NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE, ''Q''), 3), ''THURSDAY'')' 每季度的第1个星期四
 
7、删除一个JOB
BEGIN
DBMS_JOB.REMOVE(14144);
END;
/

8、Altering JOB

1)
BEGIN
DBMS_JOB.CHANGE(14144, NULL, NULL, 'SYSDATE + 3');
END;
/

2)
BEGIN
DBMS_JOB.WHAT(14144,'DBMS_DDL.ANALYZE_OBJECT(''TABLE'',
''HR'', ''DEPARTMENTS'',
''ESTIMATE'', NULL, 50);');
END;
/
3)
BEGIN
DBMS_JOB.NEXT_DATE(14144, SYSDATE + 4);
END;
/
4)
BEGIN
DBMS_JOB.INTERVAL(14144, 'NULL');
END;
/


9、broken job
  一个JOB处于broken状态,这个JOB就不会再被执行。可以手工置这个状态,也可以再JQ尝试执行一个JOB失败16次后自动置;
 
10、 强迫执行JOB

BEGIN
DBMS_JOB.RUN(14144);
END;
/


11、停止JOB
找到JOB对应得SESSION,然后用ALTER SYSTEM KILL SESSION来KILL

12、相关VIEW
USER_JOBS
ALL_JOBS
DBA_JOBS
这些VIEW里边是COMMIT的JOB

DBA_JOBS_RUNNING里是正在RUN的JOB。停止JOB的时候,可以从这个里边找SESSION的ID。

 

 

 

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

 

job_queue_process 表示oracle能够并发的job的数量,可以通过语句

  show parameter job_queue_process;

  来查看oracle中job_queue_process的值。当job_queue_process值为0时表示全部停止oracle的 job。可以通过语句

  ALTER SYSTEM SET job_queue_processes = 10;

  来修改oracle中job_queue_process的值(这里改为10,job_queue_process的值该设为多少是另外的问 题),不过这种修改是动态的,当oracle重新启动后job_queue_process的值将仍然从/%ORACLE_HOME%/admin /mydb/pfile/init.ora文件中读取。

你可能感兴趣的:(oracle,Date,session,null,System,jobs)