2010-06-24 3 views
0

Я получаю сообщение об ошибке для запланированного пакета SSIS, который выполняется ежечасно. Самое забавное, что если я удалю файл контрольной точки и снова запустил пакет, он отлично работает, но ошибка может появиться в будущем. Я не знаю, почему это происходит. Вот полное сообщение об ошибке.«Не удалось заблокировать переменную» Ошибка SSIS

Executed as user: UserNameChanged. Microsoft (R) SQL Server Execute Package Utility Version 10.0.2531.0 for 64-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved.
Started: 09:21:40 Error: 2010-06-24 09:21:45.83 Code: 0xC0014054
Source: Save MaxLSN & Extract Date
Description: Failed to lock variable "User::UpdateProcessControlQuery" for read access with error 0xC0010001 "The variable cannot be found. This occurs when an attempt is made to retrieve a variable from the Variables collection on a container during execution of the package, and the variable is not there. The variable name may have changed or the variable is not being created.". End Error Error: 2010-06-24 09:21:45.84 Code: 0xC0024107 Source: Save MaxLSN & Extract Date Description: There were errors during task validation. End Error DTExec: The package execution returned DTSER_FAILURE (1). Started: 09:21:40 Finished: 09:21:45 Elapsed: 4.875 seconds. The package execution failed. The step failed.

Чтобы добавить к этому, у меня есть более 100 таких пакетов, работающих там в группах по 20 пакетов в группе и 5 групп в час. И эта ошибка переменной блокировки появляется, по крайней мере, один раз в каждом цикле. Поэтому мне нужно выяснить основную причину. Может ли кто-нибудь помочь ...

ответ

3

Я подозреваю, что это связанно с тем же переменным записываются в нескольких компонентах, которые выполняются параллельно. По сути, это будет условие гонки на эту переменную.

Например, если компонент A и компонент B могут выполняться параллельно и оба записываются в заданную переменную, то возможно, что компонент A будет записывать на него (показывая, что он недоступен), когда компонент B пытается выполнить. Поскольку время начала двух заданий будет варьироваться между прогонами, вы можете получить случаи, когда пакет выглядит случайным образом.

Для решения проблемы вам необходимо либо добавить дополнительную переменную, чтобы они не были разделены, либо, наоборот, принудительно заполнить один компонент до начала другого (через зависимость).

Надеюсь, это поможет.

0

Кажется, что в контейнере последовательности в пакете отсутствует переменная, она может понадобиться получить либо от других заданий, либо от родительского пакета. Я думаю, что это проблема либо объема переменной, либо генерации переменных значений во время выполнения.

благодаря Правдин

+0

Nope. Если это так, то почему пакет запускается после удаления файла контрольной точки? – Faiz

0

Проверьте и убедитесь в свойствах диспетчера соединений в редакторе задач. Если вы копируете задачи/ящик связи из других пакетов, мы должны убедиться, что все свойства были повторно определены правильно.

0

У меня была та же проблема. Fix, который работал для меня:

Причина корня: Я создал переменную и использовал ее внутри «потока данных», чтобы сохранить значение «Row Count». После этого я пытался использовать эту переменную в «потоке управления»> «Задача скрипта». Он не работал и дал мне ту же ошибку, что и опубликованная.

Исправление: Я создал переменные и использовал их в «Задача скрипта». После того, как он стал использоваться в задании скрипта, я присвоил значение Row Count в Data Flow> Row Count.

Мне кажется странным, но это сработало :)

Смежные вопросы