powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
12 сообщений из 12, страница 1 из 1
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
    #34111346
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно добиться такого же эффекта на Sybase ASE? Т.е. указать серверу о том что при выполнении данного SELECT'a нужно накладывать U pdate блокировку, а не S hared?

Я пока вижу только одно решение - lock table <table_name> in exclusive mode
но мне оно не сильно нравиться :)

Вроде еще можно открыть курсор FOR UPDATE?


PS Все это нужно чтобы работало на
Adaptive Server Enterprise/12.5.4/EBF 13381

ЗЫЗЫ заранее большое спасибо!
...
Рейтинг: 0 / 0
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
    #34111775
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriКак можно добиться такого же эффекта на Sybase ASE? Т.е. указать серверу о том что при выполнении данного SELECT'a нужно накладывать U pdate блокировку, а не S hared?

Я пока вижу только одно решение - lock table <table_name> in exclusive mode
но мне оно не сильно нравиться :)

Вроде еще можно открыть курсор FOR UPDATE?


PS Все это нужно чтобы работало на
Adaptive Server Enterprise/12.5.4/EBF 13381

ЗЫЗЫ заранее большое спасибо!


LOCKINGControlling isolation levels
You can set the transaction isolation level used by select commands:

For all queries in the session, with the set transaction isolation level command

For an individual query, with the at isolation clause

For specific tables in a query, with the holdlock, noholdlock, and shared keywords

ЛИНК
...
Рейтинг: 0 / 0
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
    #34111817
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, конечно... только это не по моей проблеме... ;)
...
Рейтинг: 0 / 0
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
    #34111934
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriСпасибо, конечно... только это не по моей проблеме... ;)
почему?
разве repatable read не подойдет для Ваших целей?
...
Рейтинг: 0 / 0
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
    #34112023
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad funikovyuriСпасибо, конечно... только это не по моей проблеме... ;)
почему?
разве repatable read не подойдет для Ваших целей?

Проблема в том что, для того чтобы было repatable read - как раз ASE и накладывает shared блокировку. НО у komrad проблема в ином, чтобы при select накладывалась именно exclusive, а не shared блокировка.

Т.е. когда несколько spid-ов работают с однимим и теми же объектами, и с начала делается select-ы, а потом надо изменить полученные строки, то в результате могут появляться deadlock-и

Сам сталкивался с подобной проблемой.
...
Рейтинг: 0 / 0
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
    #34112093
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть несколько feature request для реализации подобной функциональности:

CR# 192624 - "select ... for update"
CR# 364990 - Feature request for method to have SELECT get EXCLUSIVE lock

Но, к сожалению, нет пока планов, по их реализации
...
Рейтинг: 0 / 0
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
    #34112166
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
moris

Ясно, спасибо

BTW в db/2 это в первой версии уже было :)
...
Рейтинг: 0 / 0
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
    #34112246
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri moris

Ясно, спасибо

BTW в db/2 это в первой версии уже было :)

Так и инженеры Sybase ASE про это давно знают. Feature request CR# 192624 - открыт еще в 1999 г. Но ....
...
Рейтинг: 0 / 0
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
    #34113870
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
moris
Проблема в том что, для того чтобы было repatable read - как раз ASE и накладывает shared блокировку. НО у komrad проблема в ином, чтобы при select накладывалась именно exclusive, а не shared блокировка.



Shared & Exclusive не совместимы все равно, так что наличие SHared не даст другим транзакциям изменить эти данные. Не все ли равно как будет называться тот lock, который сделает то, что вам нужно ?


А так есть еще и такое:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
begin transaction

update my_table set some_field = some_field where <все чё надо>

....

select * from my_table where <все чё надо>

...

commit


Да, для дедлоков конечно это может быть нужно.
...
Рейтинг: 0 / 0
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
    #34114865
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv

Да, для дедлоков конечно это может быть нужно.

Да вариант с мнимым update можно рассматривать как workaround, но только подходит от далеко не для всех случаев

Вот например в этом случае мнимый update не поможет

Код: plaintext
1.
2.
3.
4.
5.
6.
begin transaction

declare @max_id int
select @max_id = max(id) from table1 
update  table1 set c1= ... where id =@max_id

...
Рейтинг: 0 / 0
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
    #34116744
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Речь шла о логике, для которой достаточно Repeatable Read, а здесь надо уже SERIALIZABLE.
...
Рейтинг: 0 / 0
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
    #34137815
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оо... Даже Юра попал в это счастье под названием ASE. Это наверное издержки программирования на Java.
Можно было и догадаться, что другого способа кроме как указанного MasterZiv, здесь нет.
И это несмотря на присутствие проблемы конвертации блокировки из Shared в Exclusive.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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