最近在SQL Server代理预定作业中发生了一系列随机出现的以下错误,我无法找到解决方案。
错误很少发生,但通常每周一次,对于每日预定的工作,但在任何数量的不同工作中并不总是相同的工作。每个作业都分享它从运行作业的同一服务器执行SSIS包的事实。它也总是运行几乎正好30秒的时间,我猜是超时阈值。但是我不确定如果服务器只是连接到它自己的SSIS目录,为什么它会超时。另外值得注意的是,它实际上从未达到执行SSIS包的程度,无论尝试执行哪个包,都会发生这种情况。
在我的研究中,我遇到很多人建议只需将SQL Sever 2012更新到最新的CU *或SP2就可以解决问题,但是将服务器升级到SP2则没有。
尝试的一个解决方案(当然是丑陋的)只是在作业步骤失败时进行单次重试,实际上在大约30%的情况下解决了问题。
我欢迎任何有错误经验的人,或任何有任何建议的人。
错误消息如下:
Date 16/07/2014 6:00:11 AM
Log Job History ({$jobname})
Step ID 1
Server {$productionserver}
Job Name {$jobname}
Step Name {$stepname}
Duration 00:00:31
Sql Severity 0
Sql Message ID 0
Operator Emailed
Operator Net sent
Operator Paged
Retries Attempted 0
Message
Executed as user: {$user}.
Microsoft (R) SQL Server Execute Package Utility Version 11.0.5058.0 for 64-bit Copyright (C) Microsoft Corporation. All rights reserved.
Started: 6:00:11 AM Failed to execute IS server package because of error 0x80131904.
Server: {$productionserver},
Package path: {$packagepath},
Environment reference Id: NULL.
Description: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Source: .Net SqlClient Data Provider
Started: 6:00:11 AM Finished: 6:00:42 AM
Elapsed: 31.122 seconds. The package execution failed. The step failed.
答案 0 :(得分:4)
试试这个:
这个
看起来像是一个已知的错误。
答案 1 :(得分:1)
在程序包发生故障时检查实例上还有/正在运行的内容(例如,数据库完整性检查或类似的密集操作)。
SQL代理正在与其自己的SSIS目录进行超时(30秒超时)。它实际上并不是在执行包,因此它与包本身无关,而且与执行时实例的繁忙程度有关。
(回答这个问题,因为它出现在Google搜索中)
答案 2 :(得分:1)
尝试在同一时刻启动多个SSIS包时遇到此错误。服务包应该修复它,但没有。我们已经实施了SSIS包的交错计划,因此在任何给定时刻只开始一个包。
答案 3 :(得分:1)
我知道这是一个老问题。但是我遇到了同样的问题,但是这个答案没有被接受。
工作在1.5秒内失败,因此我认为这不是超时问题。
我可以确认0x80131904是(或可以是)权限问题。我的SSIS包在带有SQL代理权限和网络管理员权限的SQL代理作业下运行。当我将其切换到权限较少的帐户时,会出现此错误。
对我来说,问题是因为我没有在所有正确的位置分配权限。我已经在“项目属性”中设置了“读取/执行”权限。然后(这是我没有做的步骤),我必须在包含“项目和环境”的文件夹上分配“读取”权限。
希望这对某人有帮助。
答案 4 :(得分:0)
有时,在SQL Integration Service Catalogs下部署包两次时会发生此类错误。您也可能更改了包名称,但是其他相关的自动生成配置是唯一的,如环境参考ID和其他。
因此,如果您有预定的工作,则需要创建一个新工作并将其指向。
祝你好运
答案 5 :(得分:0)
我们也遇到了相同的错误。作为解决方法,我们创建了以下存储过程。如果您将其放在每隔一周运行一次的工作中10分钟内,如果出现随机故障,可以确保作业连续重启,直到发生故障而没有超时故障。
USE [msdb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_StartTimedOutJob]
AS
DECLARE @jobid NVARCHAR(100)
, @jobname NVARCHAR(250)
, @stepname NVARCHAR(250)
, @varMail VARCHAR(MAX)
DECLARE cJobs CURSOR FOR
-- CTE selects all jobs that are currently not running and orders them by most recent
WITH CTE_NotRunning AS (
SELECT S.job_id
, S.step_name
, S.[message]
, rownum = ROW_NUMBER() OVER (PARTITION BY S.job_id ORDER BY S.run_date DESC, S.run_time DESC)
FROM msdb.dbo.sysjobhistory AS S
LEFT OUTER JOIN (SELECT DISTINCT ja.job_id
FROM msdb.dbo.sysjobactivity ja
LEFT JOIN msdb.dbo.sysjobhistory jh ON ja.job_history_id = jh.instance_id
JOIN msdb.dbo.sysjobs j ON ja.job_id = j.job_id
JOIN msdb.dbo.sysjobsteps js
ON ja.job_id = js.job_id
AND ISNULL(ja.last_executed_step_id,0)+1 = js.step_id
WHERE
ja.session_id = (
SELECT TOP 1 session_id FROM msdb.dbo.syssessions ORDER BY agent_start_date DESC
)
AND start_execution_date is not null
AND stop_execution_date is NULL) AS R
ON S.job_id = R.job_id
WHERE R.job_id IS NULL)
-- only select the jobs into the cursor set for which the most recent job had a timeout issue
SELECT job_id
, step_name
FROM CTE_NotRunning
WHERE [message] LIKE '%0x80131904%time%out%' -- error message that corresponds to timed out jobs, error code: 0x80131904
AND rownum = 1
OPEN cJobs
FETCH NEXT FROM cJobs
INTO @jobid, @stepname
WHILE @@FETCH_STATUS = 0
BEGIN
-- for each of the timed out jobs in the cursor, start the job again from the step that caused the timeout
SET @jobname = (SELECT [name] FROM msdb.dbo.sysjobs WHERE job_id = @jobid)
EXECUTE dbo.sp_start_job @job_id = @jobid, @step_name = @stepname
END
CLOSE cJobs
DEALLOCATE cJobs
GO
答案 6 :(得分:0)
我遇到了同样的问题。 SQL Agent运行SSIS作业完全正常,然后突然我遇到了此错误。花了大约一个小时在网上寻找解决方案。发现服务器管理员已安装新的Windows更新。
我只是重新启动了服务器(托管SSIS目录和SQL Server / Agent)。服务器重新启动后,作业再次运行正常。
希望服务器重启适用于下一个经历的人。