通过案例学调优之--JOB管理
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,通过案例学调优之--JOB管理Oracle在创建和管理job主要借助两个包,分别为DBMS_JOB和DBMS_SCHEDULER[oracle@rh7 ~]$ sqlplus '/as sysdba'
千家信息网最后更新 2025年01月20日通过案例学调优之--JOB管理
通过案例学调优之--JOB管理
Oracle在创建和管理job主要借助两个包,分别为DBMS_JOB和DBMS_SCHEDULER
[oracle@rh7 ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 25 17:02:15 2014Copyright (c) 1982, 2009, Oracle. All rights reserved.Connected to an idle instance.11:03:43 SYS@ prod >show parameter jobNAME TYPE VALUE------------------------------------ ----------- ------------------------------job_queue_processes integer 1000Job_queue_processes = 1000; 这个是运行JOB时候所起用的进程数,当然系统里面JOB大于这个数值后,就会有排队等候的,最小值是0,表示不运行JOB,最大值是1000
11:26:14 SCOTT@ prod >desc dbms_job
FUNCTION BACKGROUND_PROCESS RETURNS BOOLEANPROCEDURE BROKEN Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- JOB BINARY_INTEGER IN BROKEN BOOLEAN IN NEXT_DATE DATE IN DEFAULTPROCEDURE CHANGE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- JOB BINARY_INTEGER IN WHAT VARCHAR2 IN NEXT_DATE DATE IN INTERVAL VARCHAR2 IN INSTANCE BINARY_INTEGER IN DEFAULT FORCE BOOLEAN IN DEFAULTPROCEDURE INSTANCE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- JOB BINARY_INTEGER IN INSTANCE BINARY_INTEGER IN FORCE BOOLEAN IN DEFAULTPROCEDURE INTERVAL Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- JOB BINARY_INTEGER IN INTERVAL VARCHAR2 INPROCEDURE ISUBMIT Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- JOB BINARY_INTEGER IN WHAT VARCHAR2 IN NEXT_DATE DATE IN INTERVAL VARCHAR2 IN DEFAULT NO_PARSE BOOLEAN IN DEFAULTFUNCTION IS_JOBQ RETURNS BOOLEANPROCEDURE NEXT_DATE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- JOB BINARY_INTEGER IN NEXT_DATE DATE INPROCEDURE REMOVE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- JOB BINARY_INTEGER INPROCEDURE RUN Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- JOB BINARY_INTEGER IN FORCE BOOLEAN IN DEFAULTPROCEDURE SUBMIT Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- JOB BINARY_INTEGER OUT WHAT VARCHAR2 IN NEXT_DATE DATE IN DEFAULT INTERVAL VARCHAR2 IN DEFAULT NO_PARSE BOOLEAN IN DEFAULT INSTANCE BINARY_INTEGER IN DEFAULT FORCE BOOLEAN IN DEFAULTPROCEDURE USER_EXPORT Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- JOB BINARY_INTEGER IN MYCALL VARCHAR2 IN/OUTPROCEDURE USER_EXPORT Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- JOB BINARY_INTEGER IN MYCALL VARCHAR2 IN/OUT MYINST VARCHAR2 IN/OUTPROCEDURE WHAT Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- JOB BINARY_INTEGER IN WHAT VARCHAR2 IN
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 正在运行任务的开始时间,如果没有运行任务则为nullTHIS_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) 任务运行的其他一些会话参数
创建job:
DBMS_JOB.SUBMIT (
job OUT BINARY_INTEGER, --job参数的名称(上例的test_job) what IN VARCHAR2, --执行的存储过程 next_date IN DATE DEFAULT sysdate, --何时运行这个job interval IN VARCHAR2 DEFAULT 'null', --何时这个job被从新执行 no_parse IN BOOLEAN DEFAULT FALSE, --是否从新解析 instance IN BINARY_INTEGER DEFAULT any_instance, --指定哪个实例去执行(用在RAC环境下) force IN BOOLEAN DEFAULT FALSE --是否必须由执行的实例才能执行 );
案例测试:
1、建立测试表
117:17:45 SCOTT@ prod >CREATE TABLE DATE_LOG17:18:03 2 (create_date DATE CONSTRAINT create_date_pk PRIMARY KEY);Table created.Elapsed: 00:00:01.1517:18:06 SCOTT@ prod >desc date_log Name Null? Type ----------------------------------------------------------------- -------- -------------------------------------------- CREATE_DATE NOT NULL DATE
2、建立一个procedure
17:18:15 SCOTT@ prod >CREATE OR REPLACE PROCEDURE create_date_log_row17:18:27 2 IS17:18:27 3 BEGIN17:18:27 4 INSERT INTO date_log(create_date)VALUES(sysdate);17:18:27 5 END;17:18:27 6 /Procedure created.
3、建立一个job
17:40:02 SCOTT@ prod >begin17:40:23 2 dbms_job.submit(:jobno,'create_date_log_row;',sysdate,'sysdate+1/1440');17:40:31 3 commit;17:40:35 4 end;17:40:36 5 /PL/SQL procedure successfully completed.
4、查看测试表情况
17:41:31 SCOTT@ prod >select * from DATE_LOG;CREATE_DA---------25-AUG-1425-AUG-1425-AUG-1425-AUG-14
5、查看job的工作情况
17:42:28 SCOTT@ prod >col interval for a5017:42:36 SCOTT@ prod >r 1 select last_date,last_sec,next_date,next_sec,interval,broken from user_jobs 2* where job=24LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC INTERVAL B--------- ---------------- --------- ---------------- -------------------------------------------------- -25-AUG-14 17:41:41 25-AUG-14 17:42:41 sysdate+1/1440 N LAST_DATE 第一次执行日期 LAST_SEC 第一次执行时间 NEXT_DATE 下一次执行日期 NEXT_SEC 下一次执行时间 INTERVAL 执行频率
6、中止和启动job的执行
17:43:22 SCOTT@ prod >exec dbms_job.broken(24,true);PL/SQL procedure successfully completed.17:43:45 SCOTT@ prod >commit; //注意要提交Commit complete.查看中断信息:17:43:47 SCOTT@ prod >select broken from user_jobs where job = 24;B-Y启动job:17:44:00 SCOTT@ prod >exec dbms_job.broken(24,false);PL/SQL procedure successfully completed.17:44:35 SCOTT@ prod >select broken from user_jobs where job = 24;B-N
7、修改job的执行时间
11:17:40 SCOTT@ prod >select job,log_user,last_date,last_sec,next_date,next_sec,interval,what from user_jobs
JOB LOG_USER LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC INTERVAL WHAT---------- ---------- --------- ---------------- --------- ---------------- ---------- ---------- 23 SCOTT 26-AUG-14 11:17:40 26-AUG-14 11:18:40 sysdate+1/ create_dat 1440 e_log_row; 24 SCOTT 26-AUG-14 11:10:39 26-AUG-14 11:18:39 sysdate+3/ create_dat (24*60) e_log_row;
查询目前下次执行时间 11:17:40 SCOTT@ prod >select next_date,next_sec from user_jobs;NEXT_DATE NEXT_SEC--------- ----------------26-AUG-14 11:20:4026-AUG-14 11:21:40 修改下次执行之时间 SQL> exec dbms_job.next_date(24,sysdate+2/(24*60));SQL>commit; 查询目前下次执行时间 SQL> select next_date,next_sec from user_jobs; NEXT_DATE NEXT_SEC ---------- ---------------- 26-AUG-14 12:05:58 第五步 修改job执行频率 SQL> exec dbms_job.interval(24,'sysdate+3/(24*60)');SQL>commit; 查询执行频率 SQL> select interval from user_jobs; INTERVAL -------------------------------------- sysdate+3/(24*60)
8、删除job
SQL> exec dbms_job.REMOVE(24);SQL> commit; 11:25:33 SCOTT@ prod >exec dbms_job.remove(24);PL/SQL procedure successfully completed.11:25:49 SCOTT@ prod >commit;Commit complete.
附录:
其中的Interval的设置是一个难点,在此阐述几个常用的设置值:
1、 每分钟执行 Interval => TRUNC(sysdate,'mi') + 1 / (24*60) 2、 每天定时执行 例如:每天的凌晨2点执行 Interval => TRUNC(sysdate) + 1 +2 / (24) 3、 每周定时执行 例如:每周一凌晨2点执行 Interval => TRUNC(next_day(sysdate,'星期一'))+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'),6)+2/24 8、 每天午夜12点 'TRUNC(SYSDATE + 1)' 9、 每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' 10、 每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24' 11、 每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)' 12、 每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24' 13、 每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "S UNDAY"))) + (6×60+10)/(24×60)'
任务
运行
时间
日期
参数
季度
小时
星期
格式
用户
频率
查询
测试
案例
管理
最大
最小
成功
可信
实例
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
古诗词系统分析报告软件开发
软件开发对日外包能学到技术嘛
DB OL 网上数据库格式
大梦数据库怎么新建用户
ntp授时服务器说明书
抖音服务器一天数据有多大
软件开发项目设计变更管理
pyqt5连接和显示数据库
学了网络安全以后怎样找工作的
网络安全面临的严峻挑战包括哪些
崇明区一站式软件开发供应商
云网络安全解决方案
服务器安全维护软件
探讨电子支付带来的网络安全
水发集团软件开发
服务器配置与管理心得体会
武汉有收费安装传奇服务器的吗
滨州戴尔服务器代理联系方式
服务器硬件层面的安全防护
安装wrf模式需要服务器么
简道云软件开发
移动公司网络技术类
网络安全是计算机专业的吗
连接服务器超时代码pin
数据库技术及应用学习通
lol国服服务器排队
哪些网络安全行为是触犯法律的
文档在软件开发过程的重要性
数据库技术应用方向考研
什么是数据库开发平台常用软件