Выполнить несколько запросов на вставку к базе данных Firebird, используя isql

У меня есть требование inserting enormous data in table of firebird database around 40K entries, Я подготовил свои сценарии, но во время его выполнения с помощью flameRobin пользовательский интерфейс просто зависал навсегда, вставляя такие огромные данные за один раз.

Я знаю, что было бы хорошо, если бы я выполнял свои запросы вставки в блоках по 255 запросов, но я хочу знать, есть ли какие-либо bulk insert tool available for Firebird делать такие записи при чтении из моего файла scripts.sql.

После некоторого поиска в Google, я столкнулся isql инструмент, но не в состоянии выполнить сценарии против него. Может ли кто-нибудь направить меня к какому-либо другому инструменту или соответствующей документации для ввода таких огромных данных за один раз?

я имею firebird version 2.5 установлен в моей системе.

3 ответа

Решение

40K не кажется большим числом для меня. В наших случаях мы работаем с миллионами записей без особых проблем. Я думаю, что причина голода в том, что Flamerobin пытается разобрать весь сценарий или что-то вроде этого. Вместо этого используйте утилиту isql. Сначала подготовьте текстовый файл с командами:

CONNECT "your_server:your_database_name" USER "sysdba" PASSWORD "masterkey";
INSERT ... ;
INSERT ... ;
....
INSERT ... ;
EXIT;

Затем запустите утилиту из командной строки:

isql < your_script.sql

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

Вы можете использовать EXECUTE BLOCK, чтобы добавить больше вставок в один оператор. Что-то вроде этого:

set term !! ;
EXECUTE BLOCK AS BEGIN
  insert into ... values ...;
  insert into ... values ...;
  insert into ... values ...;
  insert into ... values ...;
  ....etc.
  insert into ... values ...;
END!!

Вы можете сгруппировать их по 100 за раз или подобное. Это должно ускорить процесс и улучшить парсинг FlameRobin.

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

Вы можете использовать EXTERNAL,

command.CommandText = @"CREATE TABLE TEMP1 EXTERNAL FILE 'c:\ExternalTables\Ext.ext'(ID INTEGER,CRLF CHAR(2));";
int j=command.ExecuteNonQuery();
Другие вопросы по тегам