Oracle调度器Scheduler
2022/8/3 2:52:44
本文主要是介绍Oracle调度器Scheduler,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
以下例子在scott用户下进行:
一、查看
先查看一下 当前用户的scheduler 的所有数据字典,看看要关注什么
SET LINE 200 PAGESIZE 2000 COL TABLE_NAME FOR A60 COL COMMENTS FOR A120 SELECT TABLE_NAME,COMMENTS FROM DICTIONARY WHERE TABLE_NAME LIKE '%USER_SCHEDULER%' ORDER BY 1;
一大堆数据字典,暂时关注其中的三个,
SELECT * FROM USER_SCHEDULER_PROGRAMS; SELECT * FROM USER_SCHEDULER_SCHEDULES; SELECT * FROM USER_SCHEDULER_JOBS;
comments里有解析,但是我有不一样的想法,具体化为一个例子:我调了个闹钟,
闹钟响起要做什么(USER_SCHEDULER_PROGRAMS),
闹钟什么时候响(USER_SCHEDULER_SCHEDULES),
闹钟是否开启(USER_SCHEDULER_JOBS);
关于program、schedule、job的参数请参考:DBMS_SCHEDULER (oracle.com)
二、创建
在使用scheduler之前,最好先考虑一下要做什么(为什么设置这个闹钟)
我没想好,干脆把emp表的信息插入到一个临时表中吧。
先在sys用户把创建表、存储过程、JOB的权限给SCOTT
grant create table to scott; grant create procedure to scott; grant create job to scott;
先创建一个临时表:
create table temp as select * from emp where 1=2;
创建一个存储过程,作用:找出emp表的sal>1000的所有信息,插入到temp表中。
注意:在创建此存储过程之前把 or replace去掉,防止把已存在的procedure覆盖掉。
create or replace procedure my_procedure as cursor my_cur is select EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO from emp where sal>1000; begin for i in my_cur loop insert into temp values (i.EMPNO,i.ENAME,i.JOB,i.MGR,i.HIREDATE,i.SAL,i.COMM,i.DEPTNO); end loop; end; /
下面创建一个scheduler.program,program_action指定上面的存储过程
begin dbms_scheduler.create_program( program_name=>'scott.my_program_01', program_type=>'stored_procedure', program_action=>'my_procedure', enabled=>true, comments=>'这是我的第一个scheduler.program' ); end; /
随后创建一个scheduler.schedule,为了能尽快看到效果,把FREQ指定为SECONDLY类型,INTERVAL为30秒
附:为了忘记关掉,结束时间设置为开始后的1小时
begin dbms_scheduler.create_schedule( schedule_name=>'scott.my_schedule_01', start_date=>sysdate, repeat_interval=>'freq=secondly;interval=30', end_date=>sysdate+1/24, comments=>'这是我的第一个scheduler.schedule' ); end; /
最后,创建一个job,启用按schedule计划执行program
begin dbms_scheduler.create_job( job_name=>'scott.my_job_01', program_name=>'scott.my_program_01', schedule_name=>'scott.my_schedule_01', enabled=>TRUE, comments=>'这是我的第一个scheduler.job' ); end; /
等一段时间,查看temp表,不出意外的话已经有数据了。
随后查看数据字典
SELECT * FROM USER_SCHEDULER_PROGRAMS; SELECT * FROM USER_SCHEDULER_SCHEDULES; SELECT * FROM USER_SCHEDULER_JOBS;
可以看到program、schedule、job的信息。
二、停止与禁用与启用
停止只跟JOB有关,就相当于闹钟响了,停止正常响着的闹钟,但是明天闹钟该响还是响。
附:闹钟响多久(JOB IS RUNNING) 取决于执行的速度;
EXEC DBMS_SCHEDULER.STOP_JOB('SCOTT.JOB');
禁用就相当于把闹钟给关了,明天这个闹钟也不响了,除非再把这个闹钟打开。
EXEC DBMS_SCHEDULER.DISABLE('SCOTT.MY_JOB_01');
与禁用相对的就是启用
EXEC DBMS_SCHEDULER.ENABLE('SCOTT.MY_JOB_01');
三、修改
嘿,计划总赶不上变化,我决定换个时间
--修改schedule的start_date为当前时间 EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('SCOTT.MY_SCHEDULE_01','START_DATE',SYSDATE); --修改schedule的end_date为一小时后 EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('SCOTT.MY_SCHEDULE_01','END_DATE',SYSDATE+1/24);
四、删除
嗐,计划取消
EXEC DBMS_SCHEDULER.DROP_JOB('SCOTT.MY_JOB_01'); EXEC DBMS_SCHEDULER.DROP_SCHEDULE('MY_SCHEDULE_01'); EXEC DBMS_SCHEDULER.DROP_PROGRAM('MY_PROGRAM_01');
附:存储过程my_procedure的删除和temp表一样。
这篇关于Oracle调度器Scheduler的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享
- 2024-11-22ansible 的archive 参数是什么意思?-icode9专业技术文章分享
- 2024-11-22ansible 中怎么只用archive 排除某个目录?-icode9专业技术文章分享
- 2024-11-22exclude_path参数是什么作用?-icode9专业技术文章分享
- 2024-11-22微信开放平台第三方平台什么时候调用数据预拉取和数据周期性更新接口?-icode9专业技术文章分享
- 2024-11-22uniapp 实现聊天消息会话的列表功能怎么实现?-icode9专业技术文章分享
- 2024-11-22在Mac系统上将图片中的文字提取出来有哪些方法?-icode9专业技术文章分享
- 2024-11-22excel 表格中怎么固定一行显示不滚动?-icode9专业技术文章分享
- 2024-11-22怎么将 -rwxr-xr-x 修改为 drwxr-xr-x?-icode9专业技术文章分享
- 2024-11-22在Excel中怎么将小数向上取整到最接近的整数?-icode9专业技术文章分享