Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как быстро вставить 200 тыс строк  [new]
abort
Member

Откуда:
Сообщений: 625
Есть экселевская таблица, содержащая около 200 тыс строк. Каждая строка должна провериться и вставиться процедурой в таблицу Оракл. Подключаемся к ней через оледб провайдер. Время на это уходит много. Какие есть идеи для оптимизации или ускорения процесса. Возможно вместо 200 тыс подключений делать одно и передавать в оракл xml в виде clob и там на месте в цикле по дереву вызывать 200 тыс раз. Будет ли выигрыш в скорости? Может есть лучше способ?
21 фев 12, 18:50    [12132632]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2854
abort,

excel -> csv -> external table
POI и иже с ним
hs
грузануть средствами разработки
21 фев 12, 18:55    [12132668]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
Глупый Телевизор
Member

Откуда: телевизор больше не смотреть (с)
Сообщений: 679
abort
Возможно вместо 200 тыс подключений делать одно и передавать в оракл xml в виде clob и там на месте в цикле по дереву вызывать 200 тыс раз.
Можно делать одно и передавать набор данных без извращений.
Loading Tables
21 фев 12, 19:12    [12132758]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
abort
Member

Откуда:
Сообщений: 625
Глупый Телевизор,

не могу сообразить. Получаю в датасете набор данных из excel/ как теперя сделать
INSERT /*+ APPEND */ INTO моя_таблица SELECT * FROM дата сет
21 фев 12, 20:31    [12133115]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
Глупый Телевизор
Member

Откуда: телевизор больше не смотреть (с)
Сообщений: 679
abort,

Если гетерогенный сервис нормально настроен никаких проблем быть не должно.
How do I read or write an Excel file?
21 фев 12, 20:51    [12133189]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6913
loader
22 фев 12, 06:00    [12134453]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
abort
Member

Откуда:
Сообщений: 625
alex-ls,

загрузка должна быть программно через C#
22 фев 12, 06:36    [12134471]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Что мешает програмно запускать SQL*Loader?
А вообще в OCI есть Direct-Load API
22 фев 12, 06:53    [12134482]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51778

Вячеслав Любомудров
А вообще в OCI есть Direct-Load API

Вот только OCI это интерфейс для С и C# его использховать не может.

Аффтар, ты хотя бы переметризованный запрос и Array DML осиль. Их-то оно скорее всего
точно может использовать.

Posted via ActualForum NNTP Server 1.5

22 фев 12, 13:42    [12136815]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
-2-
Member

Откуда:
Сообщений: 15330
Dimitry Sibiryakov
C# его использховать не может
почему?
22 фев 12, 13:45    [12136843]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51778

-2-
почему?

Потому что в нём вызовы unmanaged code это, мягко говоря, геморрой.

Posted via ActualForum NNTP Server 1.5

22 фев 12, 14:00    [12137039]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
abort
загрузка должна быть программно через C#
Так с этого и надо было начинать.
Если файл находится не на сервере и возможности/желания его туда закинуть и подцепить/загрузить нет, то остается передавать данные массивами.

Дo 11-й версии это можно было сделать только через associative arrays:
Tech Talk: How to pass arrays from .Net C# to Oracle

C 11-й версии можно передавать UDT:
Pass Custom UDT types to Oracle Stored Procedure using ODP.NET

По моим предварительным тестам 10-чный метод работал в пару раз быстрее так что мне не удалось обосновать необходимость обновления библиотек.
Что касается 10-чнго метода, то 200 тыс. строк передает вполне себе шустро.
22 фев 12, 14:33    [12137324]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
abort
alex-ls,

загрузка должна быть программно через C#

можно делать глупости,
можно глупо делать глупости,
а можно глупо делать глупые глупости
22 фев 12, 14:54    [12137508]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6913
abort
alex-ls,
загрузка должна быть программно через C#

изобретайте велосипед, если делать Вам нечего
22 фев 12, 15:01    [12137583]     Ответить | Цитировать Сообщить модератору
 Re: Как быстро вставить 200 тыс строк  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9249
Не поверю, что M$ средства не дают возможность делать batch insert (из array'ев).

По опыту эксплуатации Oracle Server 8.1.5 на Celeron 333 с 256 MB Ram и одним диском. C-ный клиент простыми batch insert'ами (размере буфера был в районе 32 Mb) давал ну очень приемлемую производительность и полностью загружал сервер (cpu под 75%).

Визуально, что моя утилита (без direct load), что Oracle'вые import/export давали почти одинаковую скорость загрузки.

Т.к. данные берутся из Excel, сомневаюсь, что они сильно "широкие". Т.ч. и без direct load'а 200 000 строк закачиваться по сети должны максимум десятки секунд. IMHO. При нормально реализованном клиенте-загрузчике.
22 фев 12, 15:31    [12137802]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить