2010-07-21 3 views
2

У меня есть пакет, который считывает данные из таблицы и на основе значения столбца сохраняет записи в двух других таблицах. Пакет использует свойство, требуемое транзакцией. До недавнего времени он работал нормально, когда я создал некластеризованный индекс в исходной таблице для повышения производительности. Пакет отказывается приступить к выполнению после показа Прогресса, поскольку «Проверка началась».Свойство ValidateExternalMetadata, что именно это делает?

Две вещи решить эту проблему:

  1. Используйте кластерный индекс вместо некластерного
  2. Set ValidateExternalMetadata собственности на Ложный

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

  1. Что именно происходит, когда вы включаете свойство false, кроме проверки метаданных столбцов?
  2. Почему некластеризованный индекс вызывает ошибку проверки?

PS: Раньше не было указателей на столе.

ответ

0

Это может быть объяснение:

http://support.microsoft.com/kb/2253391

Выполнение пакета служб интеграции SQL Server (SSIS) перестает отвечать на запросы при включении DTC транзакции для пакета в Microsoft SQL Server

+0

Спасибо, Крис. Я это видел, но он не объясняет, что происходит внутри. – Faiz

9

KB linked to в предыдущем ответе должен решить эту конкретную проблему, но не полностью объясняет, что делает флаг ValidateExternalMetadata.

Большинство компонентов SSIS, которые взаимодействуют с внешней системой (например, преобразование поиска или компоненты источника/назначения), будут определять столбцы внешних метаданных. Они представляют столбцы в таблице/представлении/запросе, с которым взаимодействует компонент. Эта информация метаданных кэшируется в файле пакета (.dtsx).

Во время фазы Validation компонент должен проверить, чтобы кешированные метаданные в пакете все еще находились в синхронизации с базовой таблицей/представлением/запросом. Если есть несоответствие, компонент возвращает специальный статус (VS_NEEDSNEWMETADATA). Когда это происходит во время разработки, SSIS запускает обновление метаданных, вызывая ReinitializeMetadata(). Во время выполнения это приводит к ошибке.

Поскольку проверка метаданных может быть дорогостоящей (например, большая таблица с большим количеством столбцов), флаг ValidateExternalMetadata может установить значение false, чтобы отключить эту проверку. Обычно вы делаете это только тогда, когда уверены, что ваш пакет и базовая таблица/просмотр/запрос останутся в синхронизации.

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