以下例子在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表一样。
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
plsql连接Oracle超时,完犊子了肯定是服务器断电了。得马上检查Oracle服务器状态1、检查数据库是否启动su-oracle切换到Oracle用户,输入sqlplus/assysdba显示连接状态。如果末尾显示的状态是Connectedtoanidleinstance.证明未启动2、启动数据库startup启动数据库,末尾出现Databaseopened说明数据库启动成功3、查看数据库监听是否正常先quit;断开Oracle连接,使用lsnrctlstatus查看监听状态,如果出现TNS-开头的Nolistener、Connectionrefused等错误,说明监听未启动4、启动数据库
我需要一个用于大型动态任务集合的调度程序。目前我正在查看resque-scheduler,rufus-scheduler,和clockwork.如果您提供有关选择使用哪一个(或其他替代方案)的建议,我将不胜感激。一些细节:有大量要定期执行的任务(最多100K)。最短执行周期为1h。新任务可能会不时出现。现有任务可能会更改或删除。调度延迟最小化在这里不是关键任务(可扩展性和可持续性最重要)。任务执行不是繁重的操作,可以轻松并行。总结,我需要类似cron的Ruby项目,它可以处理大量动态变化的任务集合。更新:我花了一天时间尝试调度库,现在我想简单总结一下新获得的经验。我已经不再关注Cloc
我无法连接到OracleDB,阅读了很多资料但对结果没有帮助。我有远程OracleDB,我正在使用DBVisualizer设置连接连接到它,如下所示:DBType:OracleDriver(jdbc):OraclethinDatabaseURL:jdbc:oracle:thin:@10.10.100.10:1521/VVV.LOCALDOMAINUserIdf:SomeUserPass:SomePass连接正常。我在Ruby中所做的是:require'oci8'require'dbi'...conn=OCI8.new('SomeUser','SomePass','//10.10.100
我有以下代码执行oracleView,如下所示:defrun_queryconnection.exec_query("SELECT*FROMTABLE(FN_REQRESP(#{type_param},#{search_type_param},#{tid_param},#{last_param},#{key_param},#{tran_id_param},#{num_param},#{start_date_param},#{end_date_param}))")end上述查询的输出如下:SELECT*FROMTABLE(FN_REQRESP('ALL','ALL_TRAN','1000
我正在为我的工作用Ruby编写一个作业调度应用程序(主要是为了以给定的频率使用各种协议(protocol)移动文件)我的主循环是这样的:whiletruedo#somecodetolaunchtheproperjobsleepCONFIG["interval"]end它的工作就像一个魅力,但我不确定它是否足够安全,因为该应用程序可能在运行cpu密集型软件的服务器上运行。是否有另一种方法可以做同样的事情,或者sleep()对我来说是否足够安全? 最佳答案 每当我觉得需要阻塞时,我都会使用事件循环;通常是libev。这是一个Ruby绑定
我正在尝试使用rails3和resquescheduler测试future的调度作业:以下是我正在使用的代码,但我收到NoMethodErrorset_schedule。Resque.set_schedule("1",{:cron=>"306**1",:class=>"Notify",:queue=>"username",:message=>'notificationmessage'})我尝试使用简单的入队Resque.enqueue(Notify,params[:message])并且效果很好。更新:以下是我遇到的错误:undefinedmethod`set_schedule'for
我一直在努力理解double-dispatchpattern并且很难过。我终于尝试了一个示例程序来帮助自己理解。Here's要旨。但后来我决定尝试一下withoutDoubledispatch解决方案看起来并没有比平时更糟糕。我做错了什么?编辑:根据建议,我发布了这个问题here.保留此链接以进行重定向。 最佳答案 在单一分派(dispatch)中——您在大多数现代OO语言中看到的——方法是根据单个对象的运行时类型分派(dispatch)的。这显示为点运算符(在ruby、java、javascript等中)或箭头运算符(perl
数据同步的方式数据同步的2大方式基于SQL查询的CDC(ChangeDataCapture):离线调度查询作业,批处理。把一张表同步到其他系统,每次通过查询去获取表中最新的数据。也就是我们说的基于SQL查询抽取;无法保障数据一致性,查的过程中有可能数据已经发生了多次变更;不保障实时性,基于离线调度存在天然的延迟;工具软件以Kettle(ApacheHop最新版)、DataX为代表,需要结合任务调度系统使用。基于日志的CDC:实时消费日志,流处理,例如MySQL的binlog日志完整记录了数据库中的变更,可以把binlog文件当作流的数据源;保障数据一致性,因为binlog文件包含了所有历史变更
C#连接oracle数据库常用的三种方法有三种: 一、Oracle.ManagedDataAccess.dll:Oracle官方提供的oracle数据库访问组件,不存在其他依赖dll库,推荐该方法最为重要的是:它不需要安装oracle客户端,也不区分x86位和x64位,直接就能用,连上其他电脑或者服务端oracle数据库。 二、Oracle.DataAccess.Client.dll:也叫ODP.net,是Oracle提供的数据库访问dll库。好处是:不需要安装客户端也能访问服务器上的oracle,不需要配置tnsNames.Ora文件,但是区分x86位和x64,也比较麻烦。 三、Sys