У меня есть пакет SSIS, который я запускаю вручную для тестирования. Когда я это делаю, возникает ошибка (см. Рис. Ниже). Но сначала позвольте мне объяснить, что происходит в пакете: есть только сам поток данных. Там я запрашиваю представление (OLE DB Source), которое предоставит мне параметры, которые мне понадобятся для следующего шага. Затем стрелка указывает на команду OLE DB, где I EXEC хранит процедуру на локальном сервере БД и передает параметры. Этот SP является моей оболочкой, где происходят 3 основные вещи: 1. SET XACT_ABORT ON; (нам понадобится это для распределенной транзакции позже). 2. Вызовите вспомогательный SP, который создаст новый синоним моей таблицы Remote Target. (это создает синоним, такой как MY_REMOTE_TABLE, когда он создан, я могу без проблем запросить его у себя). 3. Вызовите вспомогательный SP, который будет выполнять основную задачу. У этого вспомогательного SP есть НАЧАЛО РАСПРОСТРАНЕННОЙ ОПЕРАЦИИ. Там я вставляю в MY_REMOTE_TABLE несколько записей из моей локальной БД. Теперь я поместил запись в журнал непосредственно перед и непосредственно после BEGIN DISTRIBUTED TRANSACTION, но в моем журнале есть только запись, которую я печатаю до начала транзакции. Таким образом, похоже, что он не работает, как только он открывает распределенную транзакцию. На рисунке ниже показана ошибка, которую я получаю от SSIS, но я понятия не имею, что с этим делать. Любая идея очень ценится!Ошибка SSIS с командой OLE DB
Ошибка: SSIS Код ошибки DTS_E_OLEDBERROR. Произошла ошибка OLE DB. Код ошибки: 0x80040E14. Доступна запись OLE DB. Источник: «Поставщик Microsoft OLE DB для SQL Server» Hresult: 0x80040E14 Описание: «Координатор распределенных транзакций Microsoft (MS DTC) отменил распределенную транзакцию« Ошибка: код ошибки SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. «Вход» ввода команды OLE DB «(140)» не выполнен, потому что произошел код ошибки 0xC020906E, а расположение строки ошибки на «вводе» OLE DB Command Input «(140)» указывает на ошибку при ошибке. Произошла ошибка в указанном объекте указанного компонента. До этого могут появляться сообщения об ошибках с дополнительной информацией о сбое. Ошибка: Код ошибки SSIS DTS_E_PROCESSINPUTFAILED. Метод ProcessInput на компоненте «exec Run_My_Wrapper_SP» (135) «не удалось с кодом ошибки 0xC0209029 при обработке ввода« OLE DB Command Input »(140) .Описанный компонент возвратил ошибку из метода ProcessInput.Эта ошибка относится к компоненту, но ошибка фатальна и вызовет задачу потока данных, чтобы остановить выполнение. Там может быть сообщения об ошибках, вывешенные перед этим с дополнительной информацией о неудаче.
BEGIN TRY
BEGIN DISTRIBUTED TRANSACTION
-- do my stuff here
IF (@@TRANCOUNT > 0 AND XACT_STATE() = 1)
BEGIN
COMMIT TRANSACTION
END
IF @Output_on = 1
EXEC sp_write_to_log 'End of DISTRIBUTED TRANSACTION!';
END TRY
BEGIN CATCH
IF (@@TRANCOUNT > 0 AND XACT_STATE() = -1)
ROLLBACK TRANSACTION
INSERT INTO my_error_log (Time, Source, MSG, MSG_NR, Line_Nr)
VALUES (GETDATE(), ERROR_PROCEDURE() , ERROR_MESSAGE(), ERROR_NUMBER(), ERROR_LINE());
IF @Output_on = 1
EXEC sp_write_to_log 'Error in DISTRIBUTED TRANSACTION!';
END CATCH;
Можете ли вы опубликовать ошибку в тексте, а не как изображение? Текст на изображении почти не читается. –
не удалось скопировать его, поэтому пришлось записать его вручную:/ – BaseBallBatBoy
Возможно ли, что ограничение FK на моей удаленной таблице нарушено? если да, то как мне удалось продвинуть сообщение об ошибке с удаленного сервера БД на мою локальную процедуру для его захвата? – BaseBallBatBoy