Oracle12cR2之Job定时作业调度器详解
文章目录
1.Oracle Job
1. 关于Job
在 Oracle 12c 中,“job” 通常指的是使用 Oracle 作业调度器(Oracle Scheduler)创建和管理的作业。Oracle Scheduler 是一个强大的工具,用于执行各种任务,例如存储过程、PL/SQL 程序、shell 脚本、操作系统命令等,可以按照指定的时间表定期运行这些任务。Oracle 12c 中的作业调度器功能非常强大,可以帮助你管理和执行各种任务,并通过灵活的配置选项来满足不同的需求。
以下是 Oracle 12c 中关于作业调度器的详细介绍及使用方法:
2. 使用方法
- 创建作业:
在 Oracle 12c 中,你可以使用 DBMS_SCHEDULER 包中的过程来创建作业。例如,你可以使用 CREATE_JOB 过程来定义一个新的作业。创建作业时,你需要指定作业的名称、作业类型(作为存储过程、PL/SQL 程序等)、作业的调度时间等信息。 - 定义作业:
通过定义作业的属性,如重复时间间隔、优先级、准备状态等,来为作业添加更多细节信息和定制化选项。 - 启动作业:
一旦作业被定义和配置完成,你可以手动或自动的方式启动作业来运行。你可以通过调用 DBMS_SCHEDULER 包中的 RUN_JOB 过程来手动启动一个作业。 - 监控作业:
Oracle 提供了一些视图和查询语句来监控作业的执行情况,例如通过查询 DBA_SCHEDULER_JOB_RUN_DETAILS 视图来查看作业运行的详细信息,或者通过 DBMS_SCHEDULER 包中的 GET_JOB_LOG 方法来获取作业的日志信息。 - 修改和删除作业:
如果需要修改或删除作业,你可以使用 ALTER_JOB 和 DROP_JOB 过程来进行相关操作。
2. Job详细说明
1. 查看Job的相关视图
select * from dba_jobs;
select * from all_jobs;
--All jobs owned by this user
select * from user_jobs;
2.SYS.DBA_JOBS视图字段详细说明
dba_jobs
、all_jobs
、user_jobs
视图都是基于SYS.DBA_JOBS
定义的同义词,如下create public synonym DBA_JOBS for SYS.DBA_JOBS create public synonym ALL_JOBS for SYS.USER_JOBS create public synonym USER_JOBS for SYS.USER_JOBS
字段 | 类型 | 官方描述 | 注释 |
---|---|---|---|
JOB | number | Identifier of job. Neither import/export nor repeated executions change it. | 作业的标识符。无论是导入/导出还是重复执行都不会改变它。 |
LOG_USER | varchar2(128) | USER who was logged in when the job was submitted | 提交作业时登录的用户 |
PRIV_USER | varchar2(128) | USER whose default privileges apply to this job | 默认权限适用于此作业的USER |
SCHEMA_USER | varchar2(128) | select * from bar means select * from schema_user.bar | selectfrom bar表示从schema_ser.bar中选择 |
LAST_DATE | date(yyyy-MM-dd HH:mm:ss) | Date that this job last successfully executed | 上次成功执行此作业的日期 |
LAST_SEC | varchar2(8) | Same as LAST_DATE. This is when the last successful execution started. | 与LAST_DATE相同。这是最后一次成功执行的开始时间。 |
THIS_DATE | date(yyyy-MM-dd HH:mm:ss) | Same as THIS_DATE. This is when the last successful execution started. | 与THIS_DATE相同。这是最后一次成功执行的开始时间。 |
NEXT_DATE | date(yyyy-MM-dd HH:mm:ss) | Date that this job will next be executed | 下一次执行此作业的日期 |
NEXT_SEC | varchar2(8) | Same as NEXT_DATE. The job becomes due for execution at this time. | 与NEXT_DATE相同。此时作业将到期执行。 |
TOTAL_TIME | number | Total wallclock time spent by the system on this job, in seconds | 系统在此作业上花费的墙时钟总时间(秒) |
BROKEN | varchar2(1) | If Y, no attempt is being made to run this job. See dbms_jobq.broken(job). | 如果是,则表示没有尝试运行此作业。请参阅dbms_jobq.breaked(job)。 |
INTERVAL | varchar2(200) | A date function, evaluated at the start of execution, becomes next NEXT_DATE | 在执行开始时评估的日期函数将成为下一个next_date |
FAILURES | number | How many times has this job started and failed since its last success? | 自上次成功以来,这项工作已经开始和失败了多少次? |
WHAT | varchar2(4000) | Body of the anonymous PL/SQL block that this job executes | 此作业执行的匿名PL/SQL块的主体 |
NLS_ENV | varchar2(4000) | alter session parameters describing the NLS environment of the job | 更改描述作业的NLS环境的会话参数 |
MISC_ENV | raw | a versioned raw maintained by the kernel, for other session parameters | 内核为其他会话参数维护的版本化原始 |
INSTANCE | number | Instance number restricted to run the job | 限制运行作业的实例数 |
3. 创建及查看Job
1. 创建Job
declare
variable jobSeq number;
begin
sys.dbms_job.submit(job => jobSeq,
what => 'functionName or procedureName;', --需要定时执行的函数或存储过程的名字
next_date => sysdate,
interval =>'trunc(sysdate,''mi'')+1/(24*60)')'); --每分钟执行一次
commit;
end;
2. 查看运行中的Job
注意:必须使用oracle的sys用户登录到数据库,才能查看dba_jobs_running, v p r o c e s s , v process, v process,vsession表的信息
select * from dba_jobs_running;