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

Откуда:
Сообщений: 24
Доброго времени суток!

Мне необходимо в программе, написанной на Delphi, загрузить данные из файлика в таблицу Informix. При закачке данных в цикле уходит много времени, так как обрабатывается более 15 000 записей. Вроде как для этих целей можно использовать утилиту dbload, вот только не знаю, как ею пользоваться.

Подскажите, пожалуйста, как пользоваться утилитой dbload?

Заранее большое спасибо.
1 сен 10, 16:20    [9365354]     Ответить | Цитировать Сообщить модератору
 Re: Использование утилиты dbload  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
код в студию.

Кстати много времени это сколько? Я программой на делфи 200 тыс за 1,5 мин. грузил в информикс. Это быстро или долго?
1 сен 10, 16:30    [9365438]     Ответить | Цитировать Сообщить модератору
 Re: Использование утилиты dbload  [new]
Lyudik
Member

Откуда:
Сообщений: 24
код загрузки в цикле
...
Dbf1.First;
While not Dbf1.Eof do
begin
quLoadData.SQL.Clear;
quLoadData.SQL.Text:= 'insert into provision_new_serv_main (поле1, поле2, поле3, поле4, поле5, поле6, поле7)'
+' values ('
+Dbf1.FieldByName('поле1').AsString+','
+''''+Dbf1.FieldByName('поле2').AsString+''','
+''''+Dbf1.FieldByName('поле3').AsString+''','
+''''+Dbf1.FieldByName('поле4').AsString+''','
+''''+Dbf1.FieldByName('поле6').AsString+''','
+''''+Dbf1.FieldByName('поле7').AsString+''''
+')';
quLoadData.ExecSQL;
Dbf1.Next;
end;
...

загрузка идет приблизительно 10-15 минут
1 сен 10, 16:46    [9365578]     Ответить | Цитировать Сообщить модератору
 Re: Использование утилиты dbload  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
самая очевидная ошибка, непрепаренный запрос.

//quLoadData.SQL.Clear;  не нужно перед Text:=
quLoadData.SQL.Text:= 'insert into provision_new_serv_main (поле1, поле2, поле3, поле4, поле5, поле6, поле7)'
+' values (:поле1, :поле2, :поле3, :поле4, :поле5, :поле6, :поле7)';
quLoadData.Prepare;

While not Dbf1.Eof do
begin
quLoadData.Params[0] := Dbf1.FieldByName('поле1').AsString;
quLoadData.Params[1] := Dbf1.FieldByName('поле2').AsString;
quLoadData.Params[2] := Dbf1.FieldByName('поле3').AsString;
quLoadData.Params[3] := Dbf1.FieldByName('поле4').AsString;
quLoadData.Params[4] := Dbf1.FieldByName('поле6').AsString; //поле 5 потерялось?
quLoadData.Params[5] := Dbf1.FieldByName('поле7').AsString;
quLoadData.ExecSQL;
Dbf1.Next;
end;
1 сен 10, 16:54    [9365630]     Ответить | Цитировать Сообщить модератору
 Re: Использование утилиты dbload  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
кстати если закоментировать execsql вы узнаете сколько времени из 10 мин. уходит на чтение dbf
1 сен 10, 16:55    [9365652]     Ответить | Цитировать Сообщить модератору
 Re: Использование утилиты dbload  [new]
Lyudik
Member

Откуда:
Сообщений: 24
Спасибо за совет.
Теперь загрузка идет быстрее. 17 335 записей загружаются около 3-х минут, при этом на чтение dbf файла уходит 1 секунда :)
Хотелось бы, чтобы данные загружались еще быстрее.
Преобразование данных dbf файла в unl файл происходит в программе также за 1 с.
код
...
Var Buffer: string;
ListOut: TStringList;
...
While not Dbf1.Eof do
begin
Buffer:= Dbf1.FieldByName('поле1').AsString + '|' +
Dbf1.FieldByName('поле2').AsString + '|' +
Dbf1.FieldByName('поле3').AsString + '|' +
Dbf1.FieldByName('поле4').AsString + '|' +
Dbf1.FieldByName('поле5').AsString + '|' +
Dbf1.FieldByName('поле6').AsString + '|';
ListOut.Add(Buffer);
Dbf1.Next;
end;
ListOut.SaveToFile(UnlPath + 'file.unl');

и я думаю, что если есть возможность использовать утилиту dbload, то при ее использовании данные из файла формата unl в таблицу Informix будут загружаться быстрее :) (уверенности в этом нет, но попробовать можно было бы)
1 сен 10, 17:52    [9366230]     Ответить | Цитировать Сообщить модератору
 Re: Использование утилиты dbload  [new]
vasilis
Member

Откуда: Украина, Киев
Сообщений: 2205
Lyudik
Подскажите, пожалуйста, как пользоваться утилитой dbload?

А что мешает посмотреть в доку по вашей версии ?
Есть конкретные вопросы или просто ничего не читали ?
http://publib.boulder.ibm.com/infocenter/idshelp/v115/index.jsp - это информация по 11.5
В поле поиска задаете dbload и получите массу ссылок на нужные разделы, от синтаксиса до советов по применению.
1 сен 10, 21:40    [9367335]     Ответить | Цитировать Сообщить модератору
 Re: Использование утилиты dbload  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
утилитой dbload не удастся воспользоваться скорее всего, она только без пароля умеет ходить
берите dbaccess и команды connect и load
2 сен 10, 11:49    [9369783]     Ответить | Цитировать Сообщить модератору
 Re: Использование утилиты dbload  [new]
olleg
Member

Откуда: Россия
Сообщений: 190
Lyudik

Хотелось бы, чтобы данные загружались еще быстрее.

Может индексы тормозят и их временно отключить?
set indexes  for provision_new_serv_main  disabled;
<загрузка>
set indexes  for provision_new_serv_main  enabled;
update statistics for table provision_new_serv_main;

Может есть ненужные триггеры?

А может журналирование мешает?
alter table provision_new_serv_main type raw;
<загрузка>
alter table provision_new_serv_main type standard;
update statistics for table provision_new_serv_main;
3 сен 10, 11:00    [9377182]     Ответить | Цитировать Сообщить модератору
Все форумы / Informix Ответить