Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Vakho
Member

Откуда: ---------
Сообщений: 405
MS SQL SERVER 2000
Имеется во такой скрипт, который я запускаю в Query Analyzer (эксперименты с блокировками):
DECLARE @MyError INT
DECLARE @V INT
SET LOCK_TIMEOUT 5000
SET @V = (SELECT COUNT(*) FROM GOODS)
SET @MyError = @@Error
SELECT @MyError AS MyError


До установки блокировки все нормально:
- в закладке Messages сообщается "(1 row(s) affected)";
- в закладке Grids выдается MyError 0

При помощи другого скрипта на таблицу GOODS ставим блокировочку (XLOCK) и запускаем
первый скрипт.
Проходит 5 секунд
В закладке Messages появляется сообщение
"Server: Msg 1222, Level 16, State 51, Line 4
Lock request time out period exceeded."
НО НИКАКИХ (1 row(s) affected). Т.е. надо понимать, что до
SET @MyError = @@Error
SELECT @MyError AS MyError

дело просто не дошло.
Ну, и в закладке Grids нет вообще ничего.

В чем может быть проблема ?
Спасибо.
9 янв 13, 13:21    [13740852]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Vakho,

DECLARE @MyError INT
DECLARE @V INT
SET LOCK_TIMEOUT 50
SET XACT_ABORT OFF 
SET @V = (SELECT COUNT(*) FROM CURRENCY.Currency)
SET @MyError = @@Error
SELECT @MyError AS MyError

Так поведение надо ?
9 янв 13, 13:30    [13740913]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Vakho
Member

Откуда: ---------
Сообщений: 405
Ken@t
Vakho,

DECLARE @MyError INT
DECLARE @V INT
SET LOCK_TIMEOUT 50
SET XACT_ABORT OFF
SET @V = (SELECT COUNT(*) FROM CURRENCY.Currency)
SET @MyError = @@Error
SELECT @MyError AS MyError

Так поведение надо ?


Нет команда
SET XACT_ABORT OFF
не нужна.

Тут еще один нюанс.
Описанный мной эксперимент на пять с плюсом работает в Data Engine 2000 (тот, который
поставлялся с MS Office 2003):
SET @MyError = @@Error
SELECT @MyError AS MyError

в закладке Grids возвращает MyError 1222, т.е. клиентское приложение может получить это
значение и проанализировать.

Но дело в том, что Data Engine 2000 мне не нужен. Механика должна работать на
MS SQL 2000.
Не знаю что и предпинять <:-(
9 янв 13, 13:45    [13741032]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Vakho,

автор
закладке Grids возвращает MyError 1222, т.е. клиентское приложение может получить это
значение и проанализировать.

Но дело в том, что Data Engine 2000 мне не нужен. Механика должна работать на
MS SQL 2000.
Не знаю что и предпинять <:-(


Совсем не понял, что вы имели ввиду.
9 янв 13, 13:49    [13741069]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Vakho
Member

Откуда: ---------
Сообщений: 405
Ken@t,
Я имел в виду, что MS SQL Server 2000 по истечении таймаута блокировки
не выполнил команды
SET @MyError = @@Error
SELECT @MyError AS MyError


а на MS SQL Server Desctop Engine эти команды, при прочих равных условиях, выполнились.
MS SQL Server Desctop Engine укороченный MS SQL Server 2000 и поставлялся вместе c Office 2003
9 янв 13, 14:01    [13741176]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Crimean
Member

Откуда:
Сообщений: 13148
ваш примерчик под 2000:

Microsoft SQL Server 2000 - 8.00.2282 (Intel X86)

Server: Msg 1222, Level 16, State 50, Line 6
Lock request time out period exceeded.
MyError
-----------
1222

(1 row(s) affected)

все работает
9 янв 13, 14:03    [13741194]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Vakho
Member

Откуда: ---------
Сообщений: 405
Crimean
ваш примерчик под 2000:

Microsoft SQL Server 2000 - 8.00.2282 (Intel X86)

Server: Msg 1222, Level 16, State 50, Line 6
Lock request time out period exceeded.
MyError
-----------
1222

(1 row(s) affected)

все работает


Вы будете смеяться, но Ваш ответ меня расстроил.
Неужели сервер загибается ?
9 янв 13, 14:12    [13741260]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Crimean
Member

Откуда:
Сообщений: 13148
нет, все проще - вы нас где-то "обманываете". возможно, сами не знаете где. про XACT_ABORT вам уже подсказку дали - проверяйте. если у вас действие в транзакции и данная опция установлена - таки да - результат select вы не получите
9 янв 13, 14:13    [13741280]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Vakho
Member

Откуда: ---------
Сообщений: 405
Crimean
нет, все проще - вы нас где-то "обманываете". возможно, сами не знаете где. про XACT_ABORT вам уже подсказку дали - проверяйте. если у вас действие в транзакции и данная опция установлена - таки да - результат select вы не получите


Блокировку таблицы ставлю отдельным скриптом через отдельное соединение
Весь экспериментальный пример на картинке.

К сообщению приложен файл. Размер - 21Kb
9 янв 13, 14:30    [13741444]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
super-code
Member

Откуда:
Сообщений: 244
Vakho, а теперь там где ошибка на "grid" нажимаем и видим чудо?
9 янв 13, 14:35    [13741487]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Crimean
Member

Откуда:
Сообщений: 13148
super-code
Vakho, а теперь там где ошибка на "grid" нажимаем и видим чудо?


+1. а чтобы волшебное сообщение появилось - делаем "set nocount off"
9 янв 13, 14:39    [13741532]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Vakho
Member

Откуда: ---------
Сообщений: 405
Crimean,

К сожалению чуда не произошло: на Grid ничего нет, пусто.
На всякий случай сделал картинку, которая получилась при работе с Desktop Engine.

set nocount off надо попробовать.

К сообщению приложен файл. Размер - 24Kb
9 янв 13, 14:44    [13741586]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Vakho,

Ещё раз, на десктоп у вас XACT_ABORT OFF по умолчанию. для 2000 XACT_ABORT ON.

В скрипте или устанвках сервера укажите необходимое значение.
9 янв 13, 14:50    [13741638]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Vakho
Member

Откуда: ---------
Сообщений: 405
Crimean
+1. а чтобы волшебное сообщение появилось - делаем "set nocount off"


Увы ! Результат тот же, не утешительный.
9 янв 13, 14:52    [13741653]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Vakho
Member

Откуда: ---------
Сообщений: 405
Ken@t
Vakho,

Ещё раз, на десктоп у вас XACT_ABORT OFF по умолчанию. для 2000 XACT_ABORT ON.

В скрипте или устанвках сервера укажите необходимое значение.


Все без изменений
9 янв 13, 14:57    [13741706]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Crimean
Member

Откуда:
Сообщений: 13148
select db_name()
go

dbcc opentran
go

select @@version
go

dbcc useroptions
go
9 янв 13, 15:00    [13741743]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2000. Не могу поймать ошибку по таймауту блокировки.  [new]
Vakho
Member

Откуда: ---------
Сообщений: 405
Crimean
ваш примерчик под 2000:

Microsoft SQL Server 2000 - 8.00.2282 (Intel X86)

Server: Msg 1222, Level 16, State 50, Line 6
Lock request time out period exceeded.
MyError
-----------
1222

(1 row(s) affected)

все работает


У Вашего сервера номер версии Microsoft SQL Server 2000 - 8.00.2282 (Intel X86) сильно отличается от моего. Поставил SP4, и всё зашевелилось в нужном направлении.
9 янв 13, 16:53    [13742721]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить