В источнике OLE DB SSIS случайным образом отсутствуют строки из источника данных Oracle

#sql-server #oracle #ssis #etl #oledbconnection

#sql-server #Oracle #ssis #etl #oledbconnection

Вопрос:

Я сталкиваюсь со странной проблемой с некоторыми пакетами при извлечении данных из Oracle в SQL DB: случайным образом я получаю весь ожидаемый набор данных, или я получаю его частично, или я получаю пустой набор данных. Я не получаю никаких ошибок или предупреждений.

Подробные сведения:

  • Моим источником является Oracle 19C, а местом назначения — SQL Server 2019.
  • Соединение является поставщиком Oracle для OLE DB (64 бита)
  • Visual Studio 2019 и SSIS 15.0.2000.94
  • В источнике OLE DB я использую команду SQL из переменной
  • Я регистрирую извлеченные и вставленные записи и вижу, что проблема заключается в извлечении.

Я уже пробовал:

  • Переключение между быстрой загрузкой / / нормальной загрузкой
  • Добавьте в строку подключения свойство UseSessionFormat=True;

Я был бы признателен за любую подсказку или помощь

Комментарии:

1. Вы уверены, что в исходной базе данных что-то не происходит? Какой-либо процесс перестраивает материализованное представление или какой-либо другой пакетный процесс, который заставляет ваш запрос возвращать другой набор результатов, чем вы ожидаете?

2. @JustinCave Да, так как это статическая резервная база данных

Ответ №1:

Я знаю, что эта казуистика очень специфична, но на всякий случай это может кому-то помочь…

Причина проблемы заключалась в том, как мы подключались к Oracle. В этой новой версии (19C) обязательно использовать вызов ‘secpac.set_user’ перед запросом любой исходной таблицы для продолжения извлечения.

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

Решение: установите для свойства «Сохранить то же соединение» значение True. Затем соединение открывается только в первый раз, когда это необходимо, и остается открытым для всех задач в пакете.