详解 Oracle job 的使用与管理技巧!

详解Oraclejob的使用与管理技巧

SVRMGR> select * from dba_jobs;

初始化相关参数job_queue_processes

alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000 ;

job_queue_interval = 10 //调度作业刷新频率秒为单位

select job,what,to_char(last_date,'yyyy-mm-dd HH24:mi:ss'),to_char(next_date,'yyyy-mm-dd HH24:mi:ss'),interval

from dba_jobs where job in (325,295)

select job,what,last_date,next_date,interval

from dba_jobswhere job in (1,3);

查询job的情况。

show paramter background_dump_dest.

alter.log trace

1. 停止一个JOB

SQL> exec dbms_job.broken(1,true)

SQL>commit

2. 启动job作业

SQL> exec dbms_job.broken(1,false)

3. 停其他用户的job

SQL>exec sys.dbms_ijob.broken(98,true);

SQL>commit;

============================

exec dbms_job.broken(:job) 停止

exec dbms_job.broken(186,true) //标记位broken

exec dbms_job.broken(186,false)//标记为非broken

exec dbms_job.broken(186,false,next_day(sysdate,'monday')) //标记为非broken,指定执行时间

exec dbms_job.remove(:job);删除

exec dbms_job.remove(186);

commit

三、查看相关job信息

相关视图

dba_jobs

all_jobs

user_jobs

dba_jobs_running 包含正在运行job相关信息

创建JOB

variable jobno number;

begin

dbms_job.submit(:jobno, 'statspack.snap;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno);

commit;

end;

print jobno

例如,我们已经建立了一个存储过程,其名称为my_job,在sql/plus中以scott用户身份登录,执行如下命令:

sql> variable n number;

sql> begin

dbms_job.submit(:n,'my_job;',sysdate, 'sysdate1/360');

commit;

end;

Sql> print :n;

系统提示执行成功。

Sql> print :n;

系统打印此任务的编号,例如结果为300

一个简单例子

创建测试表

SQL> create table TEST(a date);

表已创建。

创建一个自定义过程

SQL> create or replace procedure MYPROC as

2 begin

3 insert into TEST values(sysdate);

4 end;

5 /

过程已创建。

创建JOB

SQL> variable job1 number;

SQL>

SQL> begin

2 dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440');  

3 end;

4 /

PL/SQL 过程已成功完成。

运行JOB

SQL> begin

2 dbms_job.run(:job1);

3 end;

4 /

PL/SQL 过程已成功完成。

SQL> select to_char(a,'yyyy/mm/dd hh24:mi:ss') 时间 from TEST;

时间

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

2001/01/07 23:51:21

2001/01/07 23:52:22

2001/01/07 23:53:24

删除JOB

SQL> begin

2 dbms_job.remove(:job1);

3 end;

4 /

PL/SQL 过程已成功完成。

=================================

a、利用dbms_job.run()立即执行该job

sql>begin

sql>dbms_job.run(:jobno) jobnosubmit过程提交时返回的job number

sql>end;

sql>/

b、利用dbms_job.broken()重新将broken标记为false

sql>begin

sql>dbms_job.broken (:job,false,next_date)

sql>end;

sql>/

==================================

SQL> create table a(a date);

Table created

创建一个过程

SQL> create or replace procedure test as

2 begin

3 insert into a values(sysdate);

4 end;

5 /

Procedure created

提交JOB作业

SQL> declare

2 job1 number; //定义一个数字型变量

3 begin

4 dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440'); //按分钟算一天1440分钟

5 end;

6 /

PL/SQL procedure successfully completed

job1

---------

4

SQL> commit;

Commit complete

运行JOB作业

SQL> begin

2 dbms_job.run(4);

3 end;

4 /

PL/SQL procedure successfully completed

删除JOB作业

SQL> begin

2 dbms_job.remove(4);

3 end;

4 /

PL/SQL procedure successfully completed

SQL> commit;

Commit complete

修改JOB作业

execute dbms_job.change(186,null,null,'sysdate+3');

execute dbms_job.change(186,'scott.test(update)');

DBA_JOBS

字段(列)

类型

描述

JOB

NUMBER

任务的唯一标示号

LOG_USER

VARCHAR2(30)

提交任务的用户

PRIV_USER

VARCHAR2(30)

赋予任务权限的用户

SCHEMA_USER

VARCHAR2(30)

对任务作语法分析的用户模式

LAST_DATE

DATE

最后一次成功运行任务的时间

LAST_SEC

VARCHAR2(8)

HH24:MM:SS格式的last_date日期的小时,分钟和秒

THIS_DATE

DATE

正在运行任务的开始时间,如果没有运行任务则为null

THIS_SEC

VARCHAR2(8)

HH24:MM:SS格式的this_date日期的小时,分钟和秒

NEXT_DATE

DATE

下一次定时运行任务的时间

NEXT_SEC

VARCHAR2(8)

HH24:MM:SS格式的next_date日期的小时,分钟和秒

TOTAL_TIME

NUMBER

该任务运行所需要的总时间,单位为秒

BROKEN

VARCHAR2(1)

标志参数,Y标示任务中断,以后不会运行

INTERVAL

VARCHAR2(200)

用于计算下一运行时间的表达式

FAILURES

NUMBER

任务运行连续没有成功的次数

WHAT

VARCHAR2(2000)

执行任务的PL/SQL

CURRENT_SESSION_LABEL

RAW MLSLABEL

该任务的信任Oracle会话符

CLEARANCE_HI

RAW MLSLABEL

该任务可信任的Oracle最大间隙

CLEARANCE_LO

RAW MLSLABEL

该任务可信任的Oracle最小间隙

NLS_ENV

VARCHAR2(2000)

任务运行的NLS会话设置

MISC_ENV

RAW(32)

任务运行的其他一些会话参数

描述

INTERVAL参数值

每天午夜12

‘TRUNC(SYSDATE + 1)’

每天早上830

‘TRUNC(SYSDATE + 1) + 8*60+30/(24*60)’

每星期二中午12

‘NEXT_DAY(TRUNC(SYSDATE ), ’’TUESDAY’’) + 12/24’

每个月第一天的午夜12

‘TRUNC(LAST_DAY(SYSDATE ) + 1)’

每个季度最后一天的晚上11

‘TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ‘Q’ ) -1/24’

每星期六和日早上610

‘TRUNC(LEAST(NEXT_DAY(SYSDATE,’’SATURDAY’’), NEXT_DAY(SYSDATE, ’’SUNDAY’’))) + 6×60+10/24×60

一、设置初始化参数 job_queue_processes
  sql> alter system set job_queue_processes=n;n>0

  job_queue_processes最大值为1000
  

  查看job queue 后台进程
  sql>select name,description from v$bgprocess;
  

  二,dbms_job package 用法介绍
  包含以下子过程:
  
  Broken()过程。
  change()过程。
  Interval()过程。
  Isubmit()过程。
  Next_Date()过程。
  Remove()过程。
  Run()过程。
  Submit()过程。
  User_Export()过程。
  What()过程。
  
  1Broken()过程更新一个已提交的工作的状态,典型地是用来把一个已破工作标记为未破工作。
  这个过程有三个参数:job brokennext_date
  
  PROCEDURE Broken (job    IN binary_integer,
           Broken  </

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