powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите программно определить, заблокирована ли запись в таблице (FireBird 2.5, .Net)
6 сообщений из 6, страница 1 из 1
Помогите программно определить, заблокирована ли запись в таблице (FireBird 2.5, .Net)
    #38448529
AlexandrSk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С FireBird знаком плохо, ногами не бить.

Есть одна база FireBird 2.5 и две программы с ней взаимодействующие.

При работе первая програма делает lock на все данные с которыми в текущий момент работает пользователь. Программа сторонняя, написана давно, исходников нет. Вторая программа(наша) работает с выборками из этой же базы. Задача: если при работе во второй программе в выборку попали данные, которые в текущий момент редактируются в первой программе, то необходимо превать работу и вывести сообщение(именно прервать, а не считать назакоммиченые данные).

Не нашел чего-то полезного на эту тему в интернете. (Буду рад ссылке)

Пытался проверять lock на запись в таблице фэйковым апдейтом(update table set value = value where id = @id) с таймаутом команды выставленным на пару секунд. Не помогло, транзакция "залипает" пока запись в таблице залочена.

Решение желательно применимое к .Net, со стандартной функциональностью взаимодействия с FireBird.
...
Рейтинг: 0 / 0
Помогите программно определить, заблокирована ли запись в таблице (FireBird 2.5, .Net)
    #38448539
AlexandrSkПытался проверять lock на запись в таблице фэйковым апдейтом(update table set value = value where id = @id) с таймаутом команды выставленным на пару секунд. Не помогло, транзакция "залипает" пока запись в таблице залочена.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
C:\MIX\firebird\fb25>isql FOO.fdb -n
Database:  FOO.fdb
SQL> commit;
SQL>  set transaction lock timeout 5; 
SQL> update t set x=100 where y=(select min(y) from t);
-- after 5 seconds:
Statement failed, SQLSTATE = 40001
lock time-out on wait transaction
-deadlock
-update conflicts with concurrent update
-concurrent transaction number is 129
...
Рейтинг: 0 / 0
Помогите программно определить, заблокирована ли запись в таблице (FireBird 2.5, .Net)
    #38448545
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexandrSkРешение желательно применимое к .Net
Не используй умолчательный уровень изоляции Read Committed. Он в .NET провайдере вроде бы
ещё не пофикшен.

Читай:
http://ibase.ru/devinfo/versions.htm
http://ibase.ru/devinfo/plocks.htm
http://ibase.ru/devinfo/pslock.htm
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите программно определить, заблокирована ли запись в таблице (FireBird 2.5, .Net)
    #38448674
AlexandrSk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Isolation level пробовал разные. Ни один из них не повел себя корректно. Все "залипали".

Может кому будет полезно.
Проблема решилась следующим образом. Для транзакции нужно было выствавить опцию NO_wait. Похоже что для всех уровней изоляции она была определена как Wait. В моем случае выставлялось так :
FbTransaction tran = cnn.BeginTransaction(FbTransactionOptions.NoWait);
(на самом деле не сразу приходи в голову что в конструктор можно передать не только IsolationLevel)
Попытка выполнить команду апдейта на залоченую запись в таблице сразу возвращает ошибку update conflict, таймаут ставить не нужно.

Впринципе это то, о чем я спрашивал. Тему можно закрывать.
...
Рейтинг: 0 / 0
Помогите программно определить, заблокирована ли запись в таблице (FireBird 2.5, .Net)
    #38448679
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexandrSkМожет кому будет полезно.
Разве что таким же шарпеям, которые тоже ниасилили прочитать три статьи по ссылкам...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите программно определить, заблокирована ли запись в таблице (FireBird 2.5, .Net)
    #38449115
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexandrSkПроблема решилась следующим образом. Для транзакции нужно было выствавить опцию NO_wait.
охрененно полезно. У всех драйверов и компонент no_wait по умолчанию, только у одного .Net Firebird по умолчанию wait, и Иржи кладет болт на любые пожелания на эту тему. Мол, программист может сам выставить нужный режим.
А программист, оказывается, ни сном ни духом про транзакции в IB/FB
http://www.ibase.ru/devinfo/ibtans.htm
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите программно определить, заблокирована ли запись в таблице (FireBird 2.5, .Net)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]