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, открываемой первым подключением. В прямом режиме, каждое подключение будет в своей собственной транзакции, что ухудшает согласованность данных.