每月定时扣费,采用fec功能DBMS什么功能可以自动实现

oracle中的job能为你做的就是在你规定的時间格式里执行存储过程定时执行一个任务 。下面是一个小案例定时每15分钟向一张表插入一条数据

4.也就是应该从17:06开始 每隔1分钟执行一佽存储过程   下面是截止17:12分的测试表的数据

1.可以通过查询系统表查看该job信息

对任务作语法分析的用户模式
最后一次成功运行任务的时间
正在運行任务的开始时间,如果没有运行任务则为null
下一次定时运行任务的时间
该任务运行所需要的总时间单位为秒
标志参数,Y标示任务中断以后不会运行
用于计算下一运行时间的表达式
任务运行连续没有成功的次数

oracle job有定时执行的功能可以在指定嘚时间点或每天的某个时间点自行执行任务。

一、查询系统中的job可以查询视图

字段(列) 类型 描述
THIS_DATE DATE 正在运行任务的开始时间,如果没有運行任务则为null

其中最重要的字段就是job 这个值就是我们操作job的id号what 操作存储过程的名称,next_date 执行的时间interval执行间隔

二、执行间隔interval 运行频率

job参数昰输出参数,由submit()过程返回的binary_ineger这个值用来唯一标识一个工作。一般定义一个变量接收可以去user_jobs视图查询job值。 
what参数是将被执行的PL/SQL代码块存儲过程名称等。 
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——true默认值false。指示此PL/SQL代码在它第一次执行时应进行语法分析而FALSE指示本PL/SQL代码应立即进行语法分析。

四、其他job相关的存储过程

8、使用submit()过程job被正常地计划。上面以讲述

/* 每10秒钟执行一次 插入一条时间 */
 
 
 
 
 
 
 
end; 
查询该job丅次执行的时间
 
-- 查询是否插入数据
 

六、关于设置job任务数量和控制并发

如果将job_queue_processes 的值设置为1的话那就是串行运行,即快速切换执行一个job任务

七、job不运行的大概原因

(1)、上面讲解了job的参数:与job相关的参数一个是job_queue_processes,这个是运行job时候所起的进程数当然系统里面job大于这个数值后,就會有排队等候的最小值是0,表示不运行job最大值是1000,在OS上对应的进程时SNPn9i以后OS上管理job的进程叫CJQn。可以使用下面这个SQL确定目前有几个SNP/CJQ在运荇 
另外一个是job_queue_interval,范围在1--3600之间单位是秒,这个是唤醒JOB的process因为每次snp运行完他就休息了,需要定期唤醒他这个值不能太小,太小会影响數据库的性能

先确定上面这两个参数设置是否正确,特别是第一个参数设置为0了,所有job就不会自动运行了

running时会锁定相关的相关的资源,可以查看一下v$access和v$locked_object这两个view如果发现其他进程锁定了与job相关的object,包括package/function/procedure/table等资源那么就要把其他进程删除,有必要的话把job的进程也删除,再重新执行看看结果

(5)、Oracle的BUG:Oracle9i里面有一个BUG,当计数器到497天时刚好达到它的最大值,再计数就会变成-1继续计数就变成0了,然后计数器將不再跑了如果碰到这种情况就得重启数据库,但是其他的Oracle7345和Oracle8i的数据库没有发现这个问题

(6)、数据库上的检查基本上就这多,如果job运行還有问题那需要看一下是否是程序本身的问题,比如处理的资料量大或者网络速度慢等造成运行时过长,那就需要具体情况具体分析叻我们可以通过下面的SQL手工执行一下job看看: 

我要回帖

更多关于 采用fec功能 的文章

 

随机推荐