Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL) / 12 сообщений из 12, страница 1 из 1
08.11.2006, 11:16
    #34111346
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
Как можно добиться такого же эффекта на 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
08.11.2006, 12:36
    #34111775
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
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
08.11.2006, 12:44
    #34111817
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
Спасибо, конечно... только это не по моей проблеме... ;)
...
Рейтинг: 0 / 0
08.11.2006, 13:00
    #34111934
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
funikovyuriСпасибо, конечно... только это не по моей проблеме... ;)
почему?
разве repatable read не подойдет для Ваших целей?
...
Рейтинг: 0 / 0
08.11.2006, 13:15
    #34112023
moris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
komrad funikovyuriСпасибо, конечно... только это не по моей проблеме... ;)
почему?
разве repatable read не подойдет для Ваших целей?

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

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

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

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

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

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

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

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

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

Так и инженеры Sybase ASE про это давно знают. Feature request CR# 192624 - открыт еще в 1999 г. Но ....
...
Рейтинг: 0 / 0
08.11.2006, 20:35
    #34113870
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
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
09.11.2006, 11:00
    #34114865
moris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
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
09.11.2006, 15:59
    #34116744
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
Речь шла о логике, для которой достаточно Repeatable Read, а здесь надо уже SERIALIZABLE.
...
Рейтинг: 0 / 0
17.11.2006, 19:22
    #34137815
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL)
Оо... Даже Юра попал в это счастье под названием ASE. Это наверное издержки программирования на Java.
Можно было и догадаться, что другого способа кроме как указанного MasterZiv, здесь нет.
И это несмотря на присутствие проблемы конвертации блокировки из Shared в Exclusive.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5: аналог FOR UPDATE (Oracle) или UPDLOCK (MSSQL) / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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