plsql定时任务执行失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了plsql定时任务执行失败相关的知识,希望对你有一定的参考价值。

有2个原因,
一是某次任务半小时没有执行完成,会影响下次执行时间,
二是执行间隔不要用sysdate+1/12,如果用的是sysdate,即使任务每次都是正常执行,每次执行间隔也不是严格的30分钟,如果你想每个整点和半点执行,可以改成
参考技术A 设置的是半小时执行一次,会出现某次执行时间间隔异常的问题。
比如00:00到08:00之间都是正常的,每半小时插入一批数据,但下一次执行会变成08:45才执行,这样就导致后面的查询全都延迟十几分钟。请问会是什么原因?failure次数也是0。

SQL Server 里需要定时执行某个存储过程,存储过程怎么写?

SQL Server 里需要定时执行某个存储过程,存储过程怎么写?

数据库:test
表名:biao

id money1 time money2 money3 money4
1 600 2010-1-10 100
2 1200 2010-1-12 200

存储过程是:if DateDiff("d",time,now)<=30 and DateDiff("d",time,now)>0
money3 = money1*0.3
if DateDiff("d",time,now)<=60 and DateDiff("d",time,now)>30
money3 = money1*0.6
if DateDiff("d",time,now)<=365 and DateDiff("d",time,now)>60
money3 = money1*0.9
if DateDiff("d",time,now)>365
money3 = money1

if DateDiff("d",time,now)<=30 and DateDiff("d",time,now)>0
money4 = money1*0.3-money2
if DateDiff("d",time,now)<=60 and DateDiff("d",time,now)>30
money4 = money1*0.6-money2
if DateDiff("d",time,now)<=365 and DateDiff("d",time,now)>60
money4 = money1*0.9-money2
if DateDiff("d",time,now)>365
money4 = money1-money2

时间是每天的01:00执行一次
存储过程的SQL怎么写???

create
procedure
pro_test
as
declare
@time
datetime,
@id
int,
@difftime
int
declare
cursor_time
cursor
for
select
id,time
from
test_table
-----(your
table_name)
open
cursor_time
fetch
cursor_time
into
@id,@time
begin
while
@@fetch_status=0
begin
select
@difftime=DateDiff(dd,@time,getdate())
if
@difftime>0
and
@difftime<=30
begin
update
test_table
set
money3
=
money1*0.3,money4
=
(money1*0.3-money2)
where
id=@id
end
if
@difftime>30
and
@difftime<=60
begin
update
test_table
set
money3
=
money1*0.6,money4
=
(money1*0.6-money2)
where
id=@id
end
if
@difftime>60
and
@difftime<=365
begin
update
test_table
set
money3
=
money1*0.9,
money4
=
(money1*0.9-money2)
where
id=@id
end
if
@difftime>365
begin
update
test_table
set
money3
=
money1
,money4
=
(money1-money2)
where
id=@id
end
end
end
把存储过程里的表明改成你的table
创建好这个存储过程后,然后在企业管理器里,展开“管理”-“sql
server
代理”-“作业”
新建一个作业。
在“步骤”里选择你要执行的库,然后
在代码栏写上‘exec
pro_test’,“调度”里设置下时间,就可以了。
不明白的地方hi我。
参考技术A create procedure pro_test
as
declare @time datetime,
@id int,
@difftime int
declare cursor_time cursor for select id,time from test_table -----(your table_name)
open cursor_time
fetch cursor_time into @id,@time

begin
while @@fetch_status=0
begin
select @difftime=DateDiff(dd,@time,getdate())
if @difftime>0 and @difftime<=30 begin
update test_table set money3 = money1*0.3,money4 = (money1*0.3-money2) where id=@id
end
if @difftime>30 and @difftime<=60 begin
update test_table set money3 = money1*0.6,money4 = (money1*0.6-money2) where id=@id
end
if @difftime>60 and @difftime<=365 begin
update test_table set money3 = money1*0.9, money4 = (money1*0.9-money2) where id=@id
end
if @difftime>365 begin
update test_table set money3 = money1 ,money4 = (money1-money2) where id=@id
end
end
end

把存储过程里的表明改成你的table
创建好这个存储过程后,然后在企业管理器里,展开“管理”-“sql server 代理”-“作业” 新建一个作业。
在“步骤”里选择你要执行的库,然后 在代码栏写上‘exec pro_test’,“调度”里设置下时间,就可以了。

不明白的地方hi我。
参考技术B 1、管理->SQL Server代理->作业(按鼠标右键)->新建作业->
2、新建作业属性(常规)->名称[自定义本次作业的名称]->启用的方框内是勾号->
分类处可选择也可用默认的[未分类(本地)]->所有者默认为登录SQL Server用户[也可选其它的登录]->描述[填写本次工作详细描述内容];[ 创建作业分类的步骤:SQL Server代理->作业->右键选所有任务->添加、修改、删除 ]
3、新建作业属性(步骤)->新建->步骤名[自定义第一步骤名称]->类型[Transact-SQL(TSQL)脚本]->数据库[要操作的数据库]->命令[ 如果是简单的SQL直接写进去即可,也可用打开按钮输入一个已写好的*.sql文件如果要执行存储过程,填exec p_procedure_name v_parameter1,[ v_parameter2…v_parameterN]]->确定(如果有多个步骤,可以再次调用下面的新建按钮;也可以对已有的多个步骤插入、编辑、删除);
4、建作业属性(调度)->新建调度->名称[自定义调度名称]->启用的方框内是勾号->调度->反复出现->更改[调度时间表]->确定(如果只要保存此作业,不要定时做可以把启用的方框内是勾号去掉);
5、建作业属性(通知)->用默认的通知方法就好[当作业失败时,写入Windows应用程序系统日志] ->确定。
参考技术C 在sql管理器中,打开sqlserver代理,选择作业,--》新增作业。
根据步骤,输入执行脚本,设置执行间隔时间等,启用就可以了
参考技术D 可以用windows自带的任务执行计划,在附件-系统工具中。

以上是关于plsql定时任务执行失败的主要内容,如果未能解决你的问题,请参考以下文章

PLSQL创建Oracle定时任务

Windows Server2012/2018 定时任务设置及执行失败的解决方法

Oracle 定时任务job实际应用

SQL Server 里需要定时执行某个存储过程,存储过程怎么写?

shell正常运行,加入定时任务执行失败

PLSQL存储过程及定时任务_示例