powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Informix [игнор отключен] [закрыт для гостей] / Особенность блокировок в SPL
7 сообщений из 7, страница 1 из 1
Особенность блокировок в SPL
    #32107450
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
Обнаружил, что из хранимой процедуры

...
begin work;
foreach c1 for select ... for update
end foreach;
commit work;
...

ставит блокировку на чтение.

облом ... хотелось бы поставить изменяемую.
...
Рейтинг: 0 / 0
Особенность блокировок в SPL
    #32107466
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>for update
for readolny ?
...
Рейтинг: 0 / 0
Особенность блокировок в SPL
    #32107569
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
нет такой буквы...

есть конструкция
foreach select ...
end foreach
которая и открывает неявно курсор на чтение

а есть

foreach C1 for select ...
...
update ... where current of C1;
...
end foreach;

она по идее должна неявно открывать курсор for update, но не открывает :-(
...
Рейтинг: 0 / 0
Особенность блокировок в SPL
    #32108841
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> ставит блокировку на чтение

Не совсем понял, что это обозначает.
Есть разделяемые(S) и монопольные (эксклюзивные)(X) блокировки, есть их комбинация - изменяемая(U).
Ты, возможно, хотел сказать, что при работе данной процедуры другие сессии не могут читать эти строки пока не завершится транзакция ?
Так так и надо. А что, ты хочешь прочитать фантомы (т.е. незакомитченные данные) ? Если так, то ставь уровень изоляции в читающем процессе dirty read. Или что то другое ?
В любом случае полезно посмотреть в доке описание уровней изоляции и особенно cursor stability.
...
Рейтинг: 0 / 0
Особенность блокировок в SPL
    #32110834
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
ага почитай почитай...
а я напомню, что поставить изменяемую блокировку (U) может только один процесс (также как и монопольную X), но в отличии от X U позволяет читать блокированные данные другим процессам.

так вот конструкция на esqlc

$begin work;
$declare c1 cursor for select ... from update;
$open c1;
$fetch c1; -- установит блокировку U
...

а аналог в SPL установит блокировку S
...
Рейтинг: 0 / 0
Особенность блокировок в SPL
    #32112197
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> $begin work;
> $declare c1 cursor for select ... from update;
> $open c1;
> $fetch c1; -- установит блокировку U
> ...
> а аналог в SPL установит блокировку S

И чем это плохо ? Строки будут читаться другими процессами (твой процесс не мешает им читать) до того времени, пока ты не изменишь строку . После этого на строку будет установлена Х-блокировка до конца транзакции.

Может все таки попробуй объяснить более подробно, в чем суть вопроса ?
Чего ты хочешь добиться ?
...
Рейтинг: 0 / 0
Особенность блокировок в SPL
    #32112380
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
>> $begin work;
>> $declare c1 cursor for select ... from update;
>> $open c1;
>> $fetch c1; -- установит блокировку U
>> ...
>> а аналог в SPL установит блокировку S

>И чем это плохо ? Строки будут читаться другими процессами (твой процесс >не мешает им читать) до того времени, пока ты не изменишь строку . После >этого на строку будет установлена Х-блокировка до конца транзакции.

>Может все таки попробуй объяснить более подробно, в чем суть вопроса ?
>Чего ты хочешь добиться ?

Дело в том, что мне как раз и нет надобности менять менять строку в C1,
мне надо провести некоторые изменения в других таблицах, связанных с этой строкой, и эти изменения должны выполняться строго последовательно. Изменения строки С1 обеспечит последовательную обработку, но повлечет невозможность доступа к этой строке для процессов которые только читают эту строку, а это плохо, тк вероятность такого рода запросов достаточно высока. В то же время читающие процессы не могут работать в режиме изоляции dirty read. Мне пришлось для решения этой проблемы блокировать монопольно (изменять) в еще одной таблице строку соответствующую строке C1 и это нормально работает (благо что эта доп таблица нужна сама по себе). Но случаи то разные бывают...
Получается что такого рода действия должны быть реализованы только из программ esqlc или 4gl, что тоже не всегда возможно.
Понятно что системы резервирования авиабилетов пишут на си, но я то занимаюсь учетно-финансовыми системами.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Особенность блокировок в SPL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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