oracle job(定时任务)

1、创建job
使用Submit()过程,工作被正常地计划好。
这个过程有五个参数:job、what、next_date、interval与no_parse。

PROCEDURE Submit (
job       OUT binary_ineger,
What      IN  varchar2,
next_date IN  date,
interval  IN  varchar2,
no_parse  IN  booean:=FALSE)

job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。
what参数是将被执行的PL/SQL代码块。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE
指示此PL/SQL代码在它第一次执行时应进行语法分析,
而FALSE指示本PL/SQL代码应立即进行语法分析。

在command window窗口中执行下面脚本
variable pc_job number;
begin
  sys.dbms_job.submit(
  pc_job,
  'pro_name;',
  sysdate,
  'sysdate+1/1440'
  );
  commit;
end;
/

在plSQL中我的做法是
declare 
  pc_job number;    
begin
  sys.dbms_job.submit(pc_job,'pro_name;',sysdate,'sysdate+1/1440');
  commit;
end;

时间间隔设置
1)、 每分钟执行
Interval => TRUNC(sysdate,'mi')+1/(24*60)
2)、 每天定时执行
例如:每天的凌晨2点执行
Interval => TRUNC(sysdate)+1+2/24
3)、 每周定时执行
例如:每周一凌晨2点执行
Interval => TRUNC(next_day(sysdate,2))+2/24 --星期一,一周的第二天
4)、 每月定时执行
例如:每月1日凌晨2点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24
5)、 每季度定时执行
例如每季度的第一天凌晨2点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24
6)、 每半年定时执行
例如:每年7月1日和1月1日凌晨2点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24
7)、 每年定时执行
例如:每年1月1日凌晨2点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24

2、运行JOB
说明:Run()过程用来立即执行一个指定的工作。这个过程只接收一个参数:
SQL> begin
2  sys.dbms_job.run(:pc_job);
3  commit;
4  end;
5  /

在plSQL中我的做法是:
begin
sys.dbms_job.run(dba_jobs.job);--:job可以用dba_jobs.job的值代替 eg:3017
commit;
end;

3、查看创建的job
查看相关job信息
1、相关视图
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息。
如:
select * from dba_jobs

4、删除JOB
SQL> begin
2  sys.dbms_job.remove(dba_jobs.job);
3  commit;
4  end;
5  /

5、修改要执行的操作
SQL> begin
2  sys.dbms_job.what(dba_jobs.job,what);
3  end;
4  /

6、修改下次执行时间
SQL> begin
2  sys.dbms_job.next_date(dba_jobs.job,next_date);
3  commit;
4  end;
5  /

7、修改间隔时间
SQL> begin
2  sys.dbms_job.interval(dba_jobs.job,interval); 
3  commit;
4  end;
5  /

8、停止job
SQL> begin
2  sys.dbms_job.broken(dba_jobs.job,broken,nextdate);
3  commit;
4  end;
5  /

9、修改job_queue_processes的值(保证其不为0否则JOB不自动运行)
方法1: startup pfile='C:\oracle\ora90\database\initorcl.ora';
注:此方法修改initorcl.ora文件的job_queue_processes参数,然后重新启动数据库以后才能生效。

方法2: alter system set job_queue_processes=n;(n>0);
注:此方法不要重新启动数据库就能生效,系统自动修改init.ora文件
[b]

10、查看job_queue_processes的值
SQL> show parameter job_queue_processes;

    

你可能感兴趣的:(oracle,sql,工作,脚本)