Выполнить несколько запросов на вставку к базе данных 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();