Свойство ValidateExternalMetadata, что именно это делает?
У меня есть пакет, который читает данные из таблицы и на основе значения столбца хранит записи в двух других таблицах. Пакет использует свойство Transaction required. До недавнего времени она работала без сбоев, когда я создал некластеризованный индекс для исходной таблицы для повышения производительности. Пакет запрещает продолжить выполнение после отображения хода выполнения как "Проверка началась".
Две вещи решают проблему:
- Используйте кластерный индекс вместо некластеризованного
- Установите для свойства ValidateExternalMetadata значение False
Я не должен использовать оба, но один из них, и пакет работает гладко. Я выбрал вариант 1, но я не понимаю, что происходит под капотом. Мои вопросы
- Что именно происходит, когда вы устанавливаете свойство false, кроме проверки метаданных столбца?
- Почему некластерный индекс вызывает проблемы с проверкой?
PS: раньше на столе не было индексов.
2 ответа
КБ, ссылка на которую приведена в предыдущем ответе, должна решить эту конкретную проблему, но не полностью объясняет, что делает флаг ValidateExternalMetadata.
Большинство компонентов служб SSIS, которые взаимодействуют с внешней системой (например, компоненты "Преобразование поиска" или "Источник / назначение"), определяют столбцы внешних метаданных. Они представляют столбцы в таблице / представлении / запросе, с которыми взаимодействует компонент. Эта информация метаданных кэшируется в файле пакета (.dtsx).
На этапе проверки компонент должен проверить, чтобы убедиться, что кэшированные метаданные в пакете все еще синхронизированы с базовой таблицей / представлением / запросом. Если имеется несоответствие, компонент возвращает специальный статус (VS_NEEDSNEWMETADATA). Когда это происходит во время разработки, SSIS запускает обновление метаданных, вызывая ReinitializeMetadata(). Во время выполнения это приводит к ошибке.
Поскольку проверка метаданных может быть дорогой (например, большая таблица с большим количеством столбцов), для флага ValidateExternalMetadata можно установить значение false, чтобы отключить эту проверку. Как правило, вы делаете это только тогда, когда уверены, что ваш пакет и базовая таблица / представление / запрос останутся в синхронизации.
Это может быть объяснение:
http://support.microsoft.com/kb/2253391
Выполнение пакета служб интеграции SQL Server перестает отвечать на запросы при включении транзакций DTC для пакета в Microsoft SQL Server