Гость
Форумы / Informix [игнор отключен] [закрыт для гостей] / Особенность блокировок в SPL / 7 сообщений из 7, страница 1 из 1
17.02.2003, 16:05
    #32107450
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Особенность блокировок в SPL
Обнаружил, что из хранимой процедуры

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

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

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

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

а есть

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

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

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

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

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

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

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

Может все таки попробуй объяснить более подробно, в чем суть вопроса ?
Чего ты хочешь добиться ?
...
Рейтинг: 0 / 0
27.02.2003, 20:02
    #32112380
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Особенность блокировок в SPL
>> $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
Форумы / Informix [игнор отключен] [закрыт для гостей] / Особенность блокировок в SPL / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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