Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
7-37408
Fydgety
2002-11-03 03:15
2003.01.13
Как определить загруженность процессора?


3-36989
Fishka
2002-12-18 16:11
2003.01.13
Заполнение Мемо-поля через DBMemo


1-37134
jen_bond
2002-12-29 09:51
2003.01.13
Узнать номер компанента


6-37249
pdv
2002-11-09 11:09
2003.01.13
Как отключить инет на компе (инет подключен по локалке) ?


3-36990
First_May
2002-12-19 09:50
2003.01.13
TIBDataSet...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский