#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. Затем соединение открывается только в первый раз, когда это необходимо, и остается открытым для всех задач в пакете.