Форум: "Базы";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
ВнизРабота механизма транзакций в InterBase Найти похожие ветки
← →
PrettyFly (2002-12-17 15:49) [0]Запускаю 2 одинаковых приложения (с InterBase), в одном удаляю элемент A из таблицы, в другом добавляю элемент B, которой внешним ключём связан с A(т.е. нарушаю целостность из различных транзакций). Я всегда думал, что в таком случае механизм транзакций автоматически исправляет ошибки и позволяет продолжить работу, но приложение виснет... что делать?
← →
Prooksius (2002-12-17 15:55) [1]Deadlock, похоже...
www.ibase.ru читай, весь раздел Девелоперу/Транзакции.
← →
Johnmen (2002-12-17 15:57) [2]"Никто за тебя ничего не сделает !"
Лучше руководствоваться таким принципом и самому обрабатывать ошибки...
← →
Andriano (2002-12-17 16:00) [3]Ненадо никогда транзакции на запись открывать для browser-инга и жить станет легче.
← →
Johnmen (2002-12-17 16:08) [4]>Andriano © (17.12.02 16:00)
М-да.. И к чему это было сказано ?
← →
PrettyFly (2002-12-17 16:09) [5]Там по смыслу оба клиента должны вносить изменения. в данном же случае сервер должен был определить, что A - удалён. И просто не добавлять B. Как без этого может работать сетевая прога?
← →
Johnmen (2002-12-17 16:22) [6]>PrettyFly © (17.12.02 16:09)
Так он и не будет добавлять !
← →
PrettyFly (2002-12-17 16:29) [7]Понятно, что не будет, но мне надо сделать так, чтобы при этом ещё и приложение не висло :)
← →
Andriano (2002-12-17 16:34) [8]> Johnmen ©
Я о разделённых транзакциях. Просмотр в транзакции на чтение, а запись длиться миллисекундами в транзакции на запись. CommitRetaining тогда не к чему. Так как Read Transaction не закрывается.
В FIB это поддерживается. А в остальных можно делать запросом, составляемым динамически.
← →
Johnmen (2002-12-17 16:37) [9]Вот там, где виснет, опоясываешь try ... except ... end
В чем проблема ?
← →
PrettyFly (2002-12-17 16:43) [10]try ... except ... end - это зло, попытка вместо исправление ошибок, закрыть на них глаза...
← →
Johnmen (2002-12-17 16:45) [11]>Andriano © (17.12.02 16:34)
И что ? Причем здесь это ?
Кто-то из нас явно не понял вопроса...И есть предположение, кто...:)
← →
FreeLancer (2002-12-17 16:51) [12]
> PrettyFly © (17.12.02 16:43)
> try ... except ... end - это зло, попытка вместо исправление
> ошибок, закрыть на них глаза...
Это не зло, а как раз механизм для обработки ошибок. А ситуация, о которой вы тут спорите в нормальных условиях должна вызвать DeadLock. Если его нет, значит кто-то кого-то обманывает...
← →
Johnmen (2002-12-17 18:20) [13]>FreeLancer © (17.12.02 16:51)
>...значит кто-то кого-то обманывает...
Точно ! Все вокруг врут друг другу !!! :)))
Даже утверждая про зло...
← →
Сергєєв Володимир (2002-12-17 22:37) [14]Я это так решил.
Если какая-то таблица - справочник, то есть есть ссылки на ее столбцы из других таблиц, то во время посмотра если прозводится редкатирование, вставка или удаление, транзакция тут же завершается. Затем стартует заново и набор данных переоткрывается.
Есть триггеры у этой таблицы, рассылающие мессаги. Если твоя клинтская прога ловит эту мессагу, то набор данных переоткрывается.
При самой заваленной сетке на 10МБит (с учетом того, что директор с бухгалтером и товароведом в этот момент играют в Кваку) нужно вставить в дочернюю таблицу данные и удалить из родительской так, чтобы поймать DeadLock, примерно с точностью до 0,1 секунды, что очень трудно(хотя, как показала практика, возможно). Но с другой стороны, возникает иллюзия, что пользователи работают с одной таблицей, а не с ее локальными копиями в рамках их транзакций, т.к. изменения отображаются незамедлительно у всех.
Заодно в IBEvents напиши че-нить, чтобы когда они поймают события изменения в родительской таблице, в дочернюю уже нельзя было вставить лажевые данные.
Johnmen прав, никто ниче за тебя делать не будет.
← →
Prooksius (2002-12-17 23:17) [15]2 Сергєєв Володимир (17.12.02 22:37)
Все это более-менее работает при небольшом кол-ве юзеров.
При 100 юзерах ты заимеешься видеть на своем экране моргание от постоянных рефрешей или просто не сможешь работать.
P.S. А где обещаный подарочек за QReport??? :)))))))
2 PrettyFly © (17.12.02 15:49)
У тебя, как мы поняли, DeadLock.
Поэтому поставь при update параметр транзакции nowait.
Тогда у тебя прога будет вываливаться с ошибкой типа Master record missing или что-то в этом роде.
← →
Сергєєв Володимир (2002-12-17 23:20) [16]2 Prooksius ©
В четврег будет, ОК? Извини, тут приболел немного и не было
меня давно.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c