Извлечение-преобразование-загрузка из Oracle в SQL Server с помощью C # - PullRequest
0 голосов
/ 16 апреля 2011

Я слонялся без дела в течение нескольких дней, нашел сообщество замечательным!Я уверен, что кто-то может дать мне мнение по моему вопросу:

У нас есть необработанные данные на сервере Oracle, и наш запрос извлекает около 312 МБ данных (только столбцы, которые нам нужны, объединенные в паре таблиц)).Это делается с использованием Oracle.DataAccess.Client, FetchSize = RowSize * 512, что составляет около 3,9 МБ.В настоящее время я использую OracleDataReader и выполняю обработку в его цикле while().

Затем результаты обработки записываются с использованием подготовленных параметризованных IF EXISTS() UPDATE ELSE INSERT.Из этой базы данных мы можем вернуть необходимые данные непосредственно в Excel после объединения таблиц измерений.

Я ищу способы повышения производительности.Возможно ли многопоточность BULK INSERT s и UPDATE s, а также многопоточность обработки строк (скажем, запуск 4 потоков и равномерное разделение входящих строк между ними), и что-то вроде BULK UPDATE существует в SQL Server 2005?

Я не ищу код для копирования-вставки, меня больше интересуют уже существующие передовые практики или шаблоны.

С наилучшими пожеланиями,

1 Ответ

1 голос
/ 16 апреля 2011

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

Мой обычный подход для этого будет использовать SqlBulkCopy для чтения строк из OracleDataReader и вставкиих в пустую промежуточную таблицу в целевой базе данных.

Затем обработайте промежуточную таблицу партиями, UPSERTing в целевую таблицу.Каждая партия будет транзакцией.

...