none
несколько раз в день на sql сервере появляется ошибка 12291 Package "ssisFEP_GetErrorsDuringUpload" failed. RRS feed

  • Вопрос

  • Обычно один раз в 17 часов (повторяется три раза, как написано в задании) и выдается сообщение

    208

    SQL Server Scheduled Job 'FEP_GetNewData_FEPDW_TAL' (0x892982D482B2BD4B8DA958BC8A591087) - Status: Failed - Invoked on: 2012-04-04 17:00:00 - Message: The job failed.  The Job was invoked by Schedule 10 (JobSchedule).  The last step to run was step 7 (ssisFEP_GetErrorsDuringUpload_FEPDW_TAL).

    Иногда правда она еще раз появляется но в разное время в 16:30, 16:15, но всегда вечером.

    До этого момента и после него задание выполняется без сбоев.

    В логах задание есть такая ошибка

    04/05/2012 17:15:29,FEP_GetNewData_FEPDW_TAL,In Progress,7,SQL01,FEP_GetNewData_FEPDW_TAL,ssisFEP_GetErrorsDuringUpload_FEPDW_TAL,,Microsoft (R) SQL Server Execute Package Utility<nl/>Version 10.50.2500.0 for 64-bit<nl/>Copyright (C) Microsoft Corporation 2010. All rights reserved.<nl/><nl/>Started:  17:17:34<nl/>Error: 2012-04-05 17:17:34.24<nl/>   Code: 0xC002F210<nl/>   Source: Get errors during uploader from FEPDB Execute SQL Task<nl/>   Description: Executing the query "spFEP_Uploader_GetErrorsDuringUpload" failed with the following error: "Error 242<c/> Procedure spFEP_Uploader_BeginGetNewResults<c/> Line 241<c/> Message The conversion of a datetimeoffset data type to a datetime data type resulted in an out-of-range value.". Possible failure reasons: Problems with the query<c/> "ResultSet" property not set correctly<c/> parameters not set correctly<c/> or connection not established correctly.<nl/>End Error<nl/>DTExec: The package execution returned DTSER_FAILURE (1).<nl/>Started:  17:17:34<nl/>Finished: 17:17:34<nl/>Elapsed:  0.219 seconds,00:02:06,0,0,,,,0

    Пока это не на что не влияет.... но можно это как-то исправить?

    5 апреля 2012 г. 15:06

Ответы

  • Суть скрипта в том, что он считывает и обрабатывает данные из вьюшек vwFEP_Uploader_ResultXmls и vwFEP_Uploader_LastUploadedResultsXmls

    В эти вьюшки попадает информация о результатах сканирования систем. Возможно, что по результатам сканирования систем в районе 17 часов туда попадает какая-то некорректная информация, а по результатам сканирования в другое время видимо всё хорошо.

    Те строки, которые содержали некорректную информацию записываются в vwAN_Uploader_FailedDataItems_Current

    Там и нужно искать что именно не так.

    • Помечено в качестве ответа Kupriyanov 12 апреля 2012 г. 5:48
    6 апреля 2012 г. 21:33

Все ответы

  • Проблема в процедуре spFEP_Uploader_BeginGetNewResults. Скорее всего дата не укладывается в нужный диапазон. Стоит попробовать заменить тип данных datetime на datetime2.

    5 апреля 2012 г. 15:34
  • А можно это посмотреть где-нибудь более точно? И почему раньше укладывалась, а теперь нет. И почему только вечером не укладывается?

    5 апреля 2012 г. 15:54
  • У вас в 17:00 по плану запускается процесс под названием FEP_GetNewData_FEPDW_TAL. На седьмом его шаге запускается процедура spFEP_Uploader_GetErrorsDuringUpload. Которая пытается для чего-то преобразовать из одного типа в другой какие-то данные.

    Отвечая на вопросы:1) Чтобы сказать что-то более точно нужно смотреть код процедуры
    2) Потому что вероятно изменились данные в базе
    3) Потому что задача запускается именно в 5 часов вечера

    5 апреля 2012 г. 16:03
  • В принципе он запускается каждые 15 минут круглые сутки. Это задание настравиватся так при установке Forefront Endpoint protection. 

    То есть целые сутки данные правильные, а вечером он не может их трансформировать? И до 25 марта данные трансформиловались нормально целые сутки.

    Можно ли где-то посмотреть более подробный лог или как-то отследить, какие именно данные вызывают эту ошибку?

    Просто 241 строка пустая, как я понял...

    Вот код процедуры (прошу прощения, не знаю как его уменьшить)

    USE [FEPDB_TAL] GO /****** Object: StoredProcedure [dbo].[spFEP_Uploader_BeginGetNewResults] Script Date: 04/06/2012 09:01:16 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[spFEP_Uploader_BeginGetNewResults] AS BEGIN SET NOCOUNT ON; -- Start a new error section EXEC spAN_Common_BeginRaiseNewErrorsSection 1 DECLARE @UtcNow DATETIME SET @UtcNow = dbo.fnFEP_Common_GetUTCNow() -- Results are not affected by snapshot ids, so we don't take that snapshot id DECLARE @ExecutionMode TINYINT SELECT TOP(1) @ExecutionMode = CurrentRunExecutionMode FROM vwAN_Uploader_ExecutionMode WITH(NOLOCK) IF @ExecutionMode = 1 BEGIN EXEC spAN_Common_TruncateTable 'dtFEP_Uploader_LastUploadedResultsXmls' END DECLARE @LastRowVersion TIMESTAMP SELECT @LastRowVersion = CurrentRowVersion FROM vwFEP_Uploader_LastUploadedTimeStamp WITH(NOLOCK) WHERE TableType = 1 -- -- Get the rows that had some change on them -- DECLARE @ResultsTable TABLE ( CiUniqueId NVARCHAR(512) NOT NULL, ResourceID INT NOT NULL, LastComplianceMessageTime DATETIME NOT NULL, LastComplianceScanTime DATETIME NOT NULL, rowversion BINARY(8) NOT NULL, DetectionTime DATETIME NOT NULL, IsEventDetectionTime TINYINT NOT NULL, InstanceData NVARCHAR(MAX) NOT NULL, SourceStartPosition BIGINT NOT NULL, SourceEndPosition BIGINT NOT NULL, PackedXml XML NOT NULL ) DECLARE @CiUniqueId NVARCHAR(512) DECLARE @ResourceID INT DECLARE @CurrentLastComplianceMessageTime DATETIME DECLARE @CurrentLastComplianceScanTime DATETIME DECLARE @CurrentMaxDetectionTime DATETIME DECLARE @LastComplianceMessageTime DATETIME DECLARE @LastComplianceScanTime DATETIME DECLARE @rowversion BINARY(8) DECLARE @InstanceData NVARCHAR(MAX) DECLARE @PackedXmlString NVARCHAR(MAX) BEGIN TRY ; WITH ReleventResults AS (SELECT Results.CiUniqueId, Results.ResourceID, Status.CurrentLastComplianceMessageTime, Status.CurrentLastComplianceScanTime, Status.CurrentMaxDetectionTime, ISNULL(Results.LastComplianceMessageTime, CAST(0 AS DATETIME)) AS LastComplianceMessageTime, ISNULL(Results.LastComplianceScanTime, CAST(0 AS DATETIME)) AS LastComplianceScanTime, Results.rowversion, T.X.value('(./InstanceData)[1]/./text()[1]', 'nvarchar(MAX)') AS InstanceData, T.X.value('(./CurrentValue)[1]/./text()[1]', 'nvarchar(MAX)') AS PackedXmlString FROM vwFEP_Uploader_ResultXmls AS Results LEFT JOIN vwFEP_Uploader_LastUploadedResultsXmls AS Status WITH(NOLOCK) ON Results.ResourceID = Status.ResourceID AND Results.CiUniqueId = Status.ConfigurationItemUniqueID CROSS APPLY ComplianceStatusDetails.nodes('/PartCIComplianceState/ConstraintViolations/ConstraintViolation') as T(X) WHERE Results.[rowversion] > @LastRowVersion AND ( Status.ResourceID IS NULL OR ( Results.LastComplianceMessageTime IS NOT NULL AND Results.LastComplianceMessageTime > Status.CurrentLastComplianceMessageTime ) OR ( LastComplianceScanTime IS NOT NULL AND Results.LastComplianceScanTime > Status.CurrentLastComplianceScanTime ) )) , ReleventResultsWithPackedXml AS ( SELECT CiUniqueId, ResourceID, CurrentLastComplianceMessageTime, CurrentLastComplianceScanTime, CurrentMaxDetectionTime, LastComplianceMessageTime, LastComplianceScanTime, rowversion, InstanceData, CHARINDEX('\', InstanceData, CHARINDEX('\\', InstanceData) + 2) + 1 AS SourceStartPosition, CHARINDEX(':', InstanceData, CHARINDEX(':', InstanceData, CHARINDEX('\', InstanceData, CHARINDEX('\\', InstanceData) + 2) + 1 + 1) + 1) AS SourceEndPosition, CAST(PackedXmlString AS XML) AS PackedXml FROM ReleventResults ) , ReleventResultsWithDetectionTime AS ( SELECT CiUniqueId, ResourceID, CurrentLastComplianceMessageTime, CurrentLastComplianceScanTime, CurrentMaxDetectionTime, LastComplianceMessageTime, LastComplianceScanTime, rowversion, PackedXml.value('(./INSTANCE/PROPERTY[@NAME="DetectionTime"]/VALUE)[1]/text()[1]', 'DATETIME') AS DetectionTime, InstanceData, SourceStartPosition, SourceEndPosition, PackedXml FROM ReleventResultsWithPackedXml ) INSERT INTO @ResultsTable ( CiUniqueId, ResourceID, LastComplianceMessageTime, LastComplianceScanTime, rowversion, DetectionTime, IsEventDetectionTime, InstanceData, SourceStartPosition, SourceEndPosition, PackedXml ) SELECT CiUniqueId, ResourceID, LastComplianceMessageTime, LastComplianceScanTime, rowversion, DetectionTime, 1, InstanceData, SourceStartPosition, SourceEndPosition, PackedXml FROM ReleventResultsWithDetectionTime WHERE DetectionTime IS NOT NULL AND ( CurrentMaxDetectionTime IS NULL OR DetectionTime > CurrentMaxDetectionTime ) UNION ALL SELECT CiUniqueId, ResourceID, LastComplianceMessageTime, LastComplianceScanTime, rowversion, CASE WHEN LastComplianceScanTime > LastComplianceMessageTime THEN LastComplianceScanTime ELSE LastComplianceMessageTime END AS DetectionTime, 0, InstanceData, SourceStartPosition, SourceEndPosition, PackedXml FROM ReleventResultsWithDetectionTime WHERE DetectionTime IS NULL END TRY BEGIN CATCH DECLARE ReleventResultsCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY FAST_FORWARD FOR SELECT Results.CiUniqueId, Results.ResourceID, Status.CurrentLastComplianceMessageTime, Status.CurrentLastComplianceScanTime, Status.CurrentMaxDetectionTime, ISNULL(Results.LastComplianceMessageTime, CAST(0 AS DATETIME)) AS LastComplianceMessageTime, ISNULL(Results.LastComplianceScanTime, CAST(0 AS DATETIME)) AS LastComplianceScanTime, Results.rowversion, T.X.value('(./InstanceData)[1]/./text()[1]', 'nvarchar(MAX)') AS InstanceData, T.X.value('(./CurrentValue)[1]/./text()[1]', 'nvarchar(MAX)') AS PackedXmlString FROM vwFEP_Uploader_ResultXmls AS Results LEFT JOIN vwFEP_Uploader_LastUploadedResultsXmls AS Status WITH(NOLOCK) ON Results.ResourceID = Status.ResourceID AND Results.CiUniqueId = Status.ConfigurationItemUniqueID CROSS APPLY ComplianceStatusDetails.nodes('/PartCIComplianceState/ConstraintViolations/ConstraintViolation') as T(X) WHERE Results.[rowversion] > @LastRowVersion AND ( Status.ResourceID IS NULL OR ( Results.LastComplianceMessageTime IS NOT NULL AND Results.LastComplianceMessageTime > Status.CurrentLastComplianceMessageTime ) OR ( LastComplianceScanTime IS NOT NULL AND Results.LastComplianceScanTime > Status.CurrentLastComplianceScanTime ) ) OPEN ReleventResultsCursor FETCH NEXT FROM ReleventResultsCursor INTO @CiUniqueId, @ResourceID, @CurrentLastComplianceMessageTime, @CurrentLastComplianceScanTime, @CurrentMaxDetectionTime, @LastComplianceMessageTime, @LastComplianceScanTime, @rowversion, @InstanceData, @PackedXmlString WHILE @@FETCH_STATUS = 0 BEGIN BEGIN TRY ; WITH ReleventResults AS (SELECT @CiUniqueId AS CiUniqueId, @ResourceID AS ResourceID, @CurrentLastComplianceMessageTime AS CurrentLastComplianceMessageTime, @CurrentLastComplianceScanTime AS CurrentLastComplianceScanTime, @CurrentMaxDetectionTime AS CurrentMaxDetectionTime, @LastComplianceMessageTime AS LastComplianceMessageTime, @LastComplianceScanTime AS LastComplianceScanTime, @rowversion AS rowversion, @InstanceData AS InstanceData, @PackedXmlString AS PackedXmlString) , ReleventResultsWithPackedXml AS ( SELECT CiUniqueId, ResourceID, CurrentLastComplianceMessageTime, CurrentLastComplianceScanTime, CurrentMaxDetectionTime, LastComplianceMessageTime, LastComplianceScanTime, rowversion, InstanceData, CHARINDEX('\', InstanceData, CHARINDEX('\\', InstanceData) + 2) + 1 AS SourceStartPosition, CHARINDEX(':', InstanceData, CHARINDEX(':', InstanceData, CHARINDEX('\', InstanceData, CHARINDEX('\\', InstanceData) + 2) + 1 + 1) + 1) AS SourceEndPosition, CAST(PackedXmlString AS XML) AS PackedXml FROM ReleventResults ) , ReleventResultsWithDetectionTime AS ( SELECT CiUniqueId, ResourceID, CurrentLastComplianceMessageTime, CurrentLastComplianceScanTime, CurrentMaxDetectionTime, LastComplianceMessageTime, LastComplianceScanTime, rowversion, PackedXml.value('(./INSTANCE/PROPERTY[@NAME="DetectionTime"]/VALUE)[1]/text()[1]', 'DATETIME') AS DetectionTime, InstanceData, SourceStartPosition, SourceEndPosition, PackedXml FROM ReleventResultsWithPackedXml ) INSERT INTO @ResultsTable ( CiUniqueId, ResourceID, LastComplianceMessageTime, LastComplianceScanTime, rowversion, DetectionTime, IsEventDetectionTime, InstanceData, SourceStartPosition, SourceEndPosition, PackedXml ) SELECT CiUniqueId, ResourceID, LastComplianceMessageTime, LastComplianceScanTime, rowversion, DetectionTime, 1, InstanceData, SourceStartPosition, SourceEndPosition, PackedXml FROM ReleventResultsWithDetectionTime WHERE DetectionTime IS NOT NULL AND ( CurrentMaxDetectionTime IS NULL OR DetectionTime > CurrentMaxDetectionTime ) UNION ALL SELECT CiUniqueId, ResourceID, LastComplianceMessageTime, LastComplianceScanTime, rowversion, CASE WHEN LastComplianceScanTime > LastComplianceMessageTime THEN LastComplianceScanTime ELSE LastComplianceMessageTime END AS DetectionTime, 0, InstanceData, SourceStartPosition, SourceEndPosition, PackedXml FROM ReleventResultsWithDetectionTime WHERE DetectionTime IS NULL END TRY BEGIN CATCH EXEC spAN_Common_InsertErrorToErrorTable 1 INSERT INTO vwAN_Uploader_FailedDataItems_Current ( FailureTime, ResourceID, InstanceData, PackedXmlString, Reason ) VALUES ( @UtcNow, @ResourceID, @InstanceData, @PackedXmlString, ERROR_MESSAGE() ) END CATCH FETCH NEXT FROM ReleventResultsCursor INTO @CiUniqueId, @ResourceID, @CurrentLastComplianceMessageTime, @CurrentLastComplianceScanTime, @CurrentMaxDetectionTime, @LastComplianceMessageTime, @LastComplianceScanTime, @rowversion, @InstanceData, @PackedXmlString END CLOSE ReleventResultsCursor DEALLOCATE ReleventResultsCursor END CATCH -- We have all the data that passed schema validation (XML is valid, data types are correct) -- We now want to filter on invalid data INSERT INTO vwAN_Uploader_FailedDataItems_Current ( FailureTime, ResourceID, InstanceData, PackedXmlString, Reason ) SELECT @UtcNow, ResourceID, InstanceData, CAST(PackedXml AS NVARCHAR(MAX)), 'Invalid InstanceData format' FROM @ResultsTable WHERE SourceEndPosition <= SourceStartPosition INSERT INTO vwAN_Infra_ErrorEvents_Current ( ErrorSource, DetectionTime, ErrorNumber, ErrorLine, ErrorSeverity, ErrorState, ErrorProcedure, ErrorMessage ) SELECT 1, @UtcNow, 0, 0, 0, 0, 'spFEP_Uploader_BeginGetNewResults', 'Invalid InstanceData format' FROM @ResultsTable WHERE SourceEndPosition <= SourceStartPosition -- Remove invalid data from the temp table DELETE FROM @ResultsTable WHERE SourceEndPosition <= SourceStartPosition IF (SELECT COUNT(*) FROM @ResultsTable) > 0 BEGIN INSERT INTO vwFEP_Uploader_LastUploadedResultsXmls ( ResourceID, ConfigurationItemUniqueID, CurrentLastComplianceMessageTime, CurrentLastComplianceScanTime, CurrentMaxDetectionTime, NextLastComplianceMessageTime, NextLastComplianceScanTime, NextMaxDetectionTime, IsDuringUpdate ) SELECT DISTINCT Results.ResourceID, Results.CiUniqueId, CAST(0 AS DATETIME), CAST(0 AS DATETIME), CAST(0 AS DATETIME), CAST(0 AS DATETIME), CAST(0 AS DATETIME), CAST(0 AS DATETIME), 0 FROM @ResultsTable AS Results LEFT JOIN vwFEP_Uploader_LastUploadedResultsXmls AS Status WITH(NOLOCK) ON Results.ResourceID = Status.ResourceID AND Results.CiUniqueId = Status.ConfigurationItemUniqueID WHERE Status.ResourceID IS NULL -- -- Set the compliance / scan time -- ; WITH NormalizedDetectionTimeResults AS ( SELECT ResourceID, CiUniqueId, LastComplianceMessageTime, LastComplianceScanTime FROM @ResultsTable AS Results ), AggregatedResults AS ( SELECT ResourceID, CiUniqueId, MAX(LastComplianceMessageTime) AS MaxLastComplianceMessageTime, MAX(LastComplianceScanTime) AS MaxLastComplianceScanTime FROM NormalizedDetectionTimeResults AS Results GROUP BY ResourceID, CiUniqueId ) UPDATE Status SET NextLastComplianceMessageTime = MaxLastComplianceMessageTime, NextLastComplianceScanTime = MaxLastComplianceScanTime, IsDuringUpdate = 1 FROM AggregatedResults AS Results INNER JOIN vwFEP_Uploader_LastUploadedResultsXmls AS Status ON Results.ResourceID = Status.ResourceID AND Results.CiUniqueId = Status.ConfigurationItemUniqueID -- -- Set the detection time -- ; WITH NormalizedDetectionTimeResults AS ( SELECT ResourceID, CiUniqueId, DetectionTime FROM @ResultsTable AS Results WHERE IsEventDetectionTime = 1 ), AggregatedResults AS ( SELECT ResourceID, CiUniqueId, MAX(DetectionTime) AS MaxDetectionTime FROM NormalizedDetectionTimeResults AS Results GROUP BY ResourceID, CiUniqueId ) UPDATE Status SET NextMaxDetectionTime = MaxDetectionTime, IsDuringUpdate = 1 FROM AggregatedResults AS Results INNER JOIN vwFEP_Uploader_LastUploadedResultsXmls AS Status ON Results.ResourceID = Status.ResourceID AND Results.CiUniqueId = Status.ConfigurationItemUniqueID UPDATE vwFEP_Uploader_LastUploadedTimeStamp SET NextRowVersion = (SELECT MAX([rowversion]) FROM @ResultsTable) WHERE TableType = 1 END SELECT SccmComputerID, CAST(SUBSTRING(InstanceData, SourceStartPosition, SourceEndPosition - SourceStartPosition) AS NVARCHAR(255)) AS Source, DetectionTime, PackedXml FROM @ResultsTable AS Results INNER JOIN vwAN_Uploader_ComputerAttributes AS ComputerAttributes ON Results.ResourceID = ComputerAttributes.ResourceID WHERE -- Don't upload results on deleted computers SccmComputerID IS NOT NULL SET NOCOUNT OFF; END



    • Изменено Kupriyanov 6 апреля 2012 г. 5:25
    6 апреля 2012 г. 5:21
  • Суть скрипта в том, что он считывает и обрабатывает данные из вьюшек vwFEP_Uploader_ResultXmls и vwFEP_Uploader_LastUploadedResultsXmls

    В эти вьюшки попадает информация о результатах сканирования систем. Возможно, что по результатам сканирования систем в районе 17 часов туда попадает какая-то некорректная информация, а по результатам сканирования в другое время видимо всё хорошо.

    Те строки, которые содержали некорректную информацию записываются в vwAN_Uploader_FailedDataItems_Current

    Там и нужно искать что именно не так.

    • Помечено в качестве ответа Kupriyanov 12 апреля 2012 г. 5:48
    6 апреля 2012 г. 21:33
  • Да, в этих вьюшках были более подробные записи... На двух компьютерах время обнаружения вируса было 1600 год. Вот сиквел и заглючил.

    Помогла очистка журнала антивируса на этих компьютерах.

    Datetime2 не получилось использовать, при сохранении вьюшки, выдается ошибка, что что-то там запрещено. Explicit conversion from data type int to datetime2 is not allowed.

    12 апреля 2012 г. 5:48