Форум: "Базы";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизВопрос в IBX... Найти похожие ветки
← →
DimaK (2004-12-29 09:39) [0]Как сделать кучу insert в одной транзакции.
Пока я делаю так:
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add("insert .....");
IBQuery1.ExecSQL;
IBQuery1.Close;
- это для каждого инсерта. Пытался запихать несколько строк IBQuery1.SQL - он начинает ругаться на второй строке типа "token "insert" unknown" что то.
А как я вижу у меня Commit происходит после каждого IBQuery1.ExecSQL. А хотелось бы делать commit после последнего инсерта (или Rollback). Вообще на IBX как такое организуется? Можно примерчик?
← →
Johnmen © (2004-12-29 09:53) [1]Так управляй транзакциями сам. В чем проблема то ?
И см. IBScript.
← →
msguns © (2004-12-29 11:05) [2]>DimaK (29.12.04 09:39)
>IBQuery1.Close;
А вот это-то зачем ?
>А как я вижу у меня Commit происходит после каждого IBQuery1.ExecSQL
Каким образом видишь ? Может в контексте той же транзакции, которой меняешь, а Read_commited отсутствует ?
Классический правильный способ работы с IB: две транзакции - одна "долгоиграющая" читает (TIBQueryes), другая кратковременная пишущая (TIBSQL`s). После каждой записи - завершение транзакции. Схема, конечно, упрощенная, но верно отражает принцип разделения обмена данными с клиентами на 2 основные целостные группы: только читающую и только модифицирующую.
← →
msguns © (2004-12-29 11:15) [3]Параметры "читающей" транзакции:
Read (не обязательно)
Read_commited,
NoWait
И "пишущей":
Write
Concurrency
NoWait
"Читающая" транзакция может быть открыта длительное время, она практически не тормозит сервер. В ее контексте можно читать данные для визуализации произвольного кол-ва таблиц (вьюх)
"Пишущая" транзакция используется для проведения одиночных либо каскадных (цепочных) целостных модификаций в одной либо группе логически связанных таблиц. По завершению каждой целостной модификации либо по краху в любой ее части транзакцию коммитить либо откатывать явно (Commit/RollBack без Retaining).
Есть, правда, случаи использования одной транзакции для чтения и модификации "в одном стакане", например, обслуживание справочника или автономной таблицы БД. В этом случае транзакция завершается после попытки изменения без завершения (точнее с рестартом): CommitRetaining/RollBackRetaining
← →
msguns © (2004-12-29 11:18) [4]Да, забыл добавить: после подтверждения "пишущей" транзакции все визуализированные НД, открытие в контексте "читающей" транзакции, необходимо переоткрывать (имеются в виду те НД, которые содержат данные, потенциально модифицированные "пишущей" транзакцией) или профетчивать.
← →
Johnmen © (2004-12-29 11:45) [5]>msguns © (29.12.04 11:05) [2]
>После каждой записи - завершение транзакции
Уточню, что при массовой вставке завершать надо после 100-500 записей. Отключить индексы. Отключить ForceWrite.
← →
Sergey13 © (2004-12-29 11:47) [6]2[5] Johnmen © (29.12.04 11:45)
>Отключить индексы. Отключить ForceWrite.
Ну это наверное только при оч-ч-ч-чень массовой. 8-)
← →
Johnmen © (2004-12-29 11:49) [7]>Sergey13 © (29.12.04 11:47) [6]
>Ну это наверное только при оч-ч-ч-чень массовой. 8-)
Ну да. При очень массовой и нерегулярной :)
← →
msguns © (2004-12-29 11:52) [8]>Johnmen © (29.12.04 11:45) [5]
>Уточню, что при массовой вставке завершать надо после 100-500 записей. Отключить индексы. Отключить ForceWrite.
Жень, давай вместе прочитаем еще раз [3]:"Пишущая" транзакция используется для проведения одиночных либо каскадных (цепочных) целостных модификаций в одной либо группе логически связанных таблиц. По завершению каждой целостной модификации либо по краху в любой ее части транзакцию коммитить либо откатывать явно (Commit/RollBack без Retaining).
Если в понятие "целостности" входит как частный случай, вставка 500 записей, значит именно после 500-й и надо коммитить.
Что-то ты сегодня не в форме. Вчера в старкрафт переиграл ? ;)
← →
Johnmen © (2004-12-29 12:00) [9]>msguns © (29.12.04 11:52) [8]
Нет-нет, именно при массовой вставке, ничего с целостностью не имеющей. Т.к. "целостность" в данном случае это вставка всех записей.
>Вчера в старкрафт переиграл ? ;)
Не совсем... Реплеев пересмотрел...:)
← →
DimaK (2004-12-29 15:53) [10]Спасибо, вроде разобрался.
И тогда еще вопрос по транзакциям: посоветуйте параметры транзакции, на которой IBStoredProc1 висит, и который возвращает всего 10 параметров по результатам кучи запросов и не производит никакие изменения с таблицей (ну короче хитрые суммы для отчета считает). И вообще ничего если его посадить на ту же "читающую" транзакцию на которой висят просматриваемые таблицы (вьюхи)?
← →
Max Zyuzin © (2004-12-29 16:46) [11]>DimaK (29.12.04 15:53) [10]
Вполне, она ж у тебя читает... прочитай еще раз msguns © (29.12.04 11:05) [2] очень полезный совет
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c