FAQ по коннекторам SSIS к Oracle

За время работы с Oracle Database и Microsoft SQL Server Integration Services я собрал 2 FAQ-а. Первый — по Oracle Client — опубликован предыдущим постом, а здесь следующий — по коннекторам SSIS к Oracle.

Нужен ли Oracle Client?

Да, все описанные ниже коннекторы используют Oracle Client.

Что такое Devart dotConnect?

Devart выпускает .NET провайдеры и инструменты, в том числе для СУБД Oracle и MySQL, dotConnect это .NET провайдер.

Какую редакцию dotConnect надо взять, чтобы работать из SSIS?

Возьмите редакцию Express, которая предоставляется бесплатно.

Что за предупреждение про Devart.Data.dll при установке dotConnect for Oracle и dotConnect for MySQL?

В дистрибутивах коннекторов dotConnect для разных СУБД есть общие компоненты, которые устанавливаются с каждым из них. Предупреждение возникает при попытке установки коннектора dotConnect, если библиотека более старой версии уже установлена с коннектором dotConnect к другой СУБД.

Это означает, что имеет смысл скачать и установить на машину с интеграционными службами SQL Server коннекторы сразу ко всем СУБД, с которыми в условиях организации возможно интегрироваться, что бы потом (при установке очередного коннектора) не обновлять уже установленные коннекторы и не вносить дополнительные риски.

Что такое Microsoft Connector for Oracle by Attunity?

Attunity выпускает для Microsoft, а Microsoft бесплатно предоставляет для пользователей SQL Server Enterprise Edition компоненты SSIS для извлечения и вставки в СУБД Oracle под названием Microsoft Connector for Oracle by Attunity. Технически, компоненты работают в SSIS во всех редакциях SQL Server, а не только в Enterprise.

Для SQL Server 2012 - требуется Microsoft Connector for Oracle by Attunity версии 2.0.

Для SQL Server 2008 (включая R2) - Microsoft Connector for Oracle by Attunity версии 1.2.

Существует ещё Microsoft Connector for Teradata by Attunity.

Что быстрее работает - dotConnect или Connector by Attunity?

При том, что dotConnect более универсален — это не компонент SSIS, а обычный .NET провайдер — быстрее работает dotConnect.

Вот результаты тестов в секундах между СУБД Oracle 10g и SQL Server 2012 Developer Edition на таблице, содержащей 126 828 записей (наш Oracle под рабочей нагрузкой):

Чем из Oracle Чем в MS SQL Тест 1 Тест 2 Тест 3 Тест 4 Тест 5 Среднее без выплесков
Attunity OLE DB 5,819 4,665 4,743 4,711 4,711 4,71
Attunity ADO.NET 4,836 4,805 4,899 4,852 4,758 4,83
dotConnect ADO.NET 2,309 2,418 2,293 3,026 2,324 2,37
dotConnect OLE DB 1,451 1,482 1,466 1,467 1,435 1,46

Разумеется, для строк разного размера и на различающемся оборудовании результаты будут различаться — мои можно использовать как ориентировочные при настройках пакета SSIS по умолчанию (об этих настройках ниже).

В первых двух тестах ADO.NET со стороны SQL Server добавлял незначительно времени (ограничивающим фактором был Attunity коннектор со стороны Oracle), а в последних двух тестах, ограничивающим фактором было подключение к SQL Server, где OLE DB очевидно быстрее и, поэтому, OLE DB рекомендуется пока Microsoft не прекратит поддержку OLE DB.

О влиянии настроек

В 2015-м году один из моих читателей сообщил, что при тестировании загрузки его данных с помощью Attunity и dotConnect из Oracle 9 (с использованием SSIS из SQL Server 2012) он добился почти паритета Attunity и dotConnect за счёт настроек.

При DefaultBufferMaxRows = 50 000 и BatchSize = 50 000 для источника Oracle от Attunity, на широкой таблице с большим количеством полей, в том числе больших текстовых полей, Attunity проигрывал всего 0,7 %, а на узкой, с большим количество записей и одним текстовым полем в 20, символов Attunity проигрывал менее 8,2 %.

При настройках по умолчанию, Attunity проигрывал dotConnect-у в 6 раз.

Какие ещё есть варианты подключения к Oracle из SSIS?

Все остальные варианты хуже чем dotConnect и Microsoft Connector for Oracle by Attunity — они обладают худшей поддержкой и меньшей скоростью.

Вот весь перечень известных нам компонентов:

Где находится в SSIS Что это? Особенности
.Net Providers\OracleClient Data Provider .NET провайдер от Microsoft Поддержка прекратится в будущем. Сейчас всё работает. Хорошая понятность ошибок.
.Net Providers\Oracle Data Provider for .NET .NET провайдер от Oracle  
.Net Providers for OleDb\Microsoft OLE DB Provider for Oracle OLE DB провайдер от Microsoft Не работает с параметрами. Работает только в Runtime 32, официально поддерживает только Oracle Database 8i.
.Net Providers\Oracle Provider for OLE DB OLE DB провайдер от Oracle Рекомендуется, если нужны OLE DB команды.
Microsoft Connector for Oracle by Attunity (MSORA) Специальный компонент подключения от Microsoft Рекомендуется для больших объемов данных. Разумеется, не работает с OLE DB командами и SQL Task.
.Net Providers\dotConnect for Oracle .NET провайдер от DevArt Рекомендуется во всех случаях. Разумеется, не работает с OLE DB командами.

Следует заметить, что dotConnect совместим по API с Oracle Data Provider for .NET, что неплохо в случае замены одного на другой, чтобы не трогать C# в Script Task и Script Transformation.

Почему русские буквы в данных, извлекаемых из Oracle, заменяются на непонятные символы?

В Devart dotConnect for Oracle, можно в настройках подключения установить Unicode = true и не зависеть от кодировки клиента.

Но, в любом случае, рекомендуется настроить кодировку Oracle Client в ОС Windows на 1251 - смотрите FAQ по Oracle Client.

Использовать прямой режим dotConnect или работать через Oracle Client?

Рекомендуется работать через Oracle Client, в частности потому, что Oracle Client корректно работает с единой транзакцией на пул подключений.

Это означает, что если в процессе работы SSIS использует 100 подключений к Oracle, то все они будут находиться в одной транзакции с точки зрения Oracle, открываемой первым подключением. В прямом режиме, каждое подключение будет в своей собственной транзакции, что ухудшает согласованность данных.