Блокировка записей!!!
Модератор: kdv
Блокировка записей!!!
В своей программе я использовал блокировку записей! Например при открытии карточек, чтобы другой пользователь получил сообщение открывая ту карточку, которая уже открыта. Реализовал это посредством холостого апдейта первичного ключа.
таблица CLIENTS первичный ключ - ROW_ID
при открытии какой либо записи в отдельном окошке
update CLIENTS set ROW_ID = ROW_ID where ROW_ID = ?OLD_ROW_ID
Транзакция этого окошка завершится когда оно закроется - тогда другие пользователи смогут открывать эту запись!.
Этот принцип долгое время меня устраивал, но теперь столкнулся с проблемой. Если я хочу вставить в таблицу в которой имеется вторичный ключ на таблицу CLIENTS запись, которая сейчас открыта (произведен этот самый холостой апдейт) - то DEADLOCK.
Отказываться от вторичных ключей не хочется! Есть ли способ обхода этой особенности IB или мне необходимо поменять механизм блокировок записей???
таблица CLIENTS первичный ключ - ROW_ID
при открытии какой либо записи в отдельном окошке
update CLIENTS set ROW_ID = ROW_ID where ROW_ID = ?OLD_ROW_ID
Транзакция этого окошка завершится когда оно закроется - тогда другие пользователи смогут открывать эту запись!.
Этот принцип долгое время меня устраивал, но теперь столкнулся с проблемой. Если я хочу вставить в таблицу в которой имеется вторичный ключ на таблицу CLIENTS запись, которая сейчас открыта (произведен этот самый холостой апдейт) - то DEADLOCK.
Отказываться от вторичных ключей не хочется! Есть ли способ обхода этой особенности IB или мне необходимо поменять механизм блокировок записей???
-
- Сообщения: 41
- Зарегистрирован: 27 окт 2004, 11:06
Спасибо!!!
Изучил - как я понял лучше всего использовать отдельную таблицу
APP_LOCKS(ROW_ID, XDATE) и блокировать холостым апдейтом ее.
Были мысли по поводу Select ... For Update With Lock - но попробовал не работает - похоже при такой блокировке отключаются только триггеры, а вторичные ключи всё же не дают вставить запись если ее карточка открыта!
Изучил - как я понял лучше всего использовать отдельную таблицу
APP_LOCKS(ROW_ID, XDATE) и блокировать холостым апдейтом ее.
Были мысли по поводу Select ... For Update With Lock - но попробовал не работает - похоже при такой блокировке отключаются только триггеры, а вторичные ключи всё же не дают вставить запись если ее карточка открыта!
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05