Какой самый быстрый способ загрузки данных в базу данных ORACLE с помощью .NET? - PullRequest
4 голосов
/ 24 марта 2009

В настоящее время у меня есть ежедневный процесс, который загружает большой объем данных из файла TXT в базу данных ORACLE, используя сценарий оболочки, который вызывает sql_loader. Я хочу перенести это в службу .NET, но не хочу полагаться на выполнение sql_loader из моего сервиса.

Каков наилучший (и самый быстрый) способ сделать это?

Ответы [ 6 ]

5 голосов
/ 24 марта 2009

Полагаю, вам не нравится SQL Loader из-за его интерфейса командной строки и (несколько) неуклюжих управляющих файлов. Но это не единственный способ использовать «SQL Loader»

У Oracle теперь есть нечто, называемое Внешними таблицами. Вы можете увидеть пример здесь .

Просто вы помещаете файл в каталог (объект базы данных, который определяет каталог файловой системы), вы определяете параметры таблицы и т. Д ... просто посмотрите на пример. Теперь внезапно ваш плоский файл выглядит как таблица для Oracle.

Вы выполняете «INSERT INTO perm_Table SELECT * FROM external_table».

Итак, теперь ваше приложение .net просто переименовывает файлы в соответствии с указаниями внешней таблицы, затем выполняет INSERT и затем переименовывает файл обратно.

Вуаля.

Ваши данные загружены. Все это делается с помощью SQL, намного быстрее, чем ADO или любая другая библиотека, к которой вы можете добраться. Нет больше неуклюжего интерфейса командной строки.

4 голосов
/ 24 марта 2009

Загрузите данные в DataTable и используйте класс OracleBulkCopy (из Поставщик данных Oracle для .NET ), чтобы загрузить их в базу данных одновременно. Это будет работать только в том случае, если вы только вставляете данные в базу данных, вы не можете выполнять обновления с OracleBulkCopy.

1 голос
/ 24 марта 2009

Поставщик ADO.Net для SQL Server поддерживает функцию SqlBulkCopy, которая имитирует BCP SQL Server.

Я ничего не знаю о поставщике Oracle, но я бы начал искать, поддерживает ли этот поставщик функцию, аналогичную sql_loader.

0 голосов
/ 20 мая 2009

Я фактически решил свою собственную проблему, используя альтернативный метод: я написал хранимую процедуру для загрузки данных и использовал пакет UTL_FILE . Я не знаю, является ли это самым быстрым методом, но он достаточно быстрый и очень гибкий (я могу манипулировать текстовыми данными, как я хочу, во время загрузки).

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

0 голосов
/ 24 марта 2009

Если у вас есть SSIS, это был бы хороший инструмент. На стороне .NET я бы рекомендовал использовать класс Oracle, упомянутый выше, но SSIS или любой инструмент ETL был бы лучшим выбором.

0 голосов
/ 24 марта 2009

Я бы посмотрел на сторонние библиотеки dotConnect от DevArt (ранее CoreLab). Хотя я не использовал их компонент OracleLoader специально, я ежедневно использую их объекты подключения, команды, устройства чтения данных и dataadapter и считаю, что они действительно очень быстрые.

Надеюсь, это поможет: о)

...