Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 - тупой HOLDLOCK (или я) ? / 7 сообщений из 7, страница 1 из 1
09.01.2006, 16:52
    #33472799
ska
ska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 - тупой HOLDLOCK (или я) ?
Привет,

Я с Sybase дел не имел. Теперь пришлось :-((
Понадобился эквивалент Ораклового select for update или MSSQL updlock.
Поискал, увидел holdlock, проверяю:

#1
start transaction
select * from test holdlock
-- получаю запись

#2
start transaction
select * from test holdlock
-- получаю запись. ????????????????????????????

Попытка update в любой транзакции приводит к lock !

На хрена такой holdlock ? Или у них какие-нибудь патчи есть ?

Сергей
...
Рейтинг: 0 / 0
09.01.2006, 19:08
    #33472921
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 - тупой HOLDLOCK (или я) ?
Обсуждали уже.
select * from test holdlock
означает, что таблице test в запросе присваивается алиас holdlock. Читайте документацию, как правильно указывать уровень изоляции в запросах. К примеру в ASA нужно после имени таблицы указывать оператор WITH.
...
Рейтинг: 0 / 0
09.01.2006, 20:38
    #33472991
ska
ska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 - тупой HOLDLOCK (или я) ?
ASCRUSОбсуждали уже.
select * from test holdlock
означает, что таблице test в запросе присваивается алиас holdlock. Читайте документацию, как правильно указывать уровень изоляции в запросах. К примеру в ASA нужно после имени таблицы указывать оператор WITH.

Неверно Вы сказали, Уважаемый. holdlock ASE понимает, только вот делает что-то недоношенное.

session 1:
1> begin transaction
2> select * from test holdlock
3> go
k v
------------------------------------------ --------------------
0x3161316131613161000000000000000000000000 1111

(1 row affected)

session 2:
1> begin transaction
2> select * from test holdlock
3> go
k v
------------------------------------------ --------------------
0x3161316131613161000000000000000000000000 1111

(1 row affected)

ПРОДОЛЖЕНИЕ:

session 1:
1> update test set v = '222'
2> go

ВИСИМ !!!!!!

session 2:
1> update test set v = '222'
2> go
Msg 1205, Level 13, State 1:
Server 'SUN60', Line 1:
Your server command (family id #0, process id #30) encountered a deadlock
situation. Please re-run your command.

session 1:
ПРОСНУЛИСЬ
(1 row affected)
...
Рейтинг: 0 / 0
09.01.2006, 21:12
    #33473022
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 - тупой HOLDLOCK (или я) ?
skaПривет,

Я с Sybase дел не имел. Теперь пришлось :-((
Понадобился эквивалент Ораклового select for update или MSSQL updlock.
Поискал, увидел holdlock, проверяю:

#1
start transaction
select * from test holdlock
-- получаю запись

#2
start transaction
select * from test holdlock
-- получаю запись. ????????????????????????????

Попытка update в любой транзакции приводит к lock !

На хрена такой holdlock ? Или у них какие-нибудь патчи есть ?

Сергей
1. К сожалению Sybase ASE не поддерживает опеpатора select for update
(в чистом SQL, только c курсорами), хотя можно попробовать select for browse (хотя предназначен для работы только c library, но вроде не только), a проще надо делать pучками updlock самому делая update сначала, a затем select (например как описано в ASE TS Guide (err.1205), хотя в последних версиях вроде можно прямо в update и @key выхватить новый, у мен err. дает)

2. Holdlock ведет себя как описано держа shared lock до конца транзакции. (To ASCRUS:Никакой syntax ошибки тут нет), но позволяя другой select.

3. Попытка update (в обоих транзакциях) приведет k deadlock, разрешаемый
ASE и надо проверить @@error=1205, и снова пытаться повторить victim-transaction.

4. Этот довольно неуклюжий (select ... holdlock, update -> "artificial" deadlock) механизм борьбы с фантомами описан в книге Дэйта по DB2.
...
Рейтинг: 0 / 0
09.01.2006, 22:21
    #33473067
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 - тупой HOLDLOCK (или я) ?
Тут уже Жора все правильно написал, я только хочу уточнить ...

ska
Попытка update в любой транзакции приводит к lock !
На хрена такой holdlock ? Или у них какие-нибудь патчи есть ?


HOLDLOCK держит Shared Lock до конца транзакции. Это позволяет другим читать запись, но не изменять ее. updlock-а как в MSSQL в Sybase ASE нет.
Если нужно , можно его съимитировать с помощью ложного UPDATE.
...
Рейтинг: 0 / 0
09.01.2006, 22:37
    #33473075
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 - тупой HOLDLOCK (или я) ?
Забыл кстати отметить что @@err=1205 невозможно проверить в ХП, только
на клиенте, а старые версии ODBC не возвращали эту "ошибку" в клиент,
так что полная ж..., труба извиняюсь была (есть ?)
...
Рейтинг: 0 / 0
10.01.2006, 00:27
    #33473131
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 - тупой HOLDLOCK (или я) ?
Какая то странная, эта ASE. Вот в ASA пишешь
Код: plaintext
SELECT * FROM Table WITH (уровень изоляции, в т.ч. XLOCK)
и все понятно и работает так, как мне нужно. Никаких бубнов и изобретений функциональности. Раз этого в ASE нет, значит нужно писать:
Код: plaintext
1.
UPDATE Table
SET Field = Field
Будет аналог ASA-шной XLOCK монопольной блокировки.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 - тупой HOLDLOCK (или я) ? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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