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

Откуда: Москва
Сообщений: 311
Всем привет. По умолчанию коннект к БД идет с таймаутом 2000 на уровне клиента зашито.

Необходимо на время выполнения определенной процедуры сделать его в -1, чтобы процедура ждала освобождение таблицы и не отваливалась с "Lock request time-out period exceeded"

SET LOCK_TIMEOUT 2000

Так работает.

А если сделать вот так:

DECLARE @NowTimeout int 

SELECT @NowTimeout=@@lock_timeout

SET LOCK_TIMEOUT -1

--Выполнение основного кода
***
-- Возвращаем переменную в исходное значение
SET LOCK_TIMEOUT @NowTimeout

ругается и пишет
Incorrect syntax near 'LOCK_TIMEOUT'.

Как можно реализовать подобное, чтобы можно было сохранить текущее значение, а потом его обратно вернуть?
28 окт 11, 16:28    [11517378]     Ответить | Цитировать Сообщить модератору
 Re: SET LOCK_TIMEOUT  [new]
Glory
Member

Откуда:
Сообщений: 104751
А зачем запоминать LOCK_TIMEOUT внутри процедуры и возвращать его обратно, если сервер это сделает сам по окончании процедуры ?
28 окт 11, 16:38    [11517475]     Ответить | Цитировать Сообщить модератору
 Re: SET LOCK_TIMEOUT  [new]
Glory
Member

Откуда:
Сообщений: 104751
Hamber
По умолчанию коннект к БД идет с таймаутом 2000 на уровне клиента зашито.

Необходимо на время выполнения определенной процедуры сделать его в -1, чтобы процедура ждала освобождение таблицы и не отваливалась с "Lock request time-out period exceeded"

А как SET LOCK_TIMEOUT отменит зашитый на уровне клиента таймаут на время выполнения ?
28 окт 11, 16:39    [11517488]     Ответить | Цитировать Сообщить модератору
 Re: SET LOCK_TIMEOUT  [new]
Hamber
Member

Откуда: Москва
Сообщений: 311
Так клиент эти настройки устанавливаются при соединении первичном, в процедуре как я понимаю их можно переопределить и они как раз будут иметь силу.

По поводу того что это устанавливается на уровне выполнения процедуры.

В MSDN описано иначе- тынц

MSDN
Замечания
В начале соединения эта настройка имеет значение -1. После изменения новая настройка остается в силе до конца соединения.
28 окт 11, 16:43    [11517523]     Ответить | Цитировать Сообщить модератору
 Re: SET LOCK_TIMEOUT  [new]
Glory
Member

Откуда:
Сообщений: 104751
set lock_timeout 100
dbcc useroptions()
exec('set lock_timeout 200; dbcc useroptions()')
dbcc useroptions()

Если инструкция SET запускается в хранимой процедуре или триггере, значение параметра инструкции SET восстанавливается после того, как управление вернется из хранимой процедуры или триггера. Также если инструкция SET указана в динамической строке SQL, которая выполняется с помощью процедуры sp_executesql или инструкции EXECUTE, значение параметра инструкции SET восстанавливается после того, как управление вернется из пакета, указанного в динамической строке SQL.
28 окт 11, 16:46    [11517556]     Ответить | Цитировать Сообщить модератору
 Re: SET LOCK_TIMEOUT  [new]
iljy
Member

Откуда:
Сообщений: 8711
Hamber,

а проверить?
create proc #ttt as
	select @@LOCK_TIMEOUT
	set lock_timeout 20
	select @@LOCK_TIMEOUT
go

select @@LOCK_TIMEOUT
exec #ttt
select @@LOCK_TIMEOUT

drop proc #ttt
28 окт 11, 16:47    [11517562]     Ответить | Цитировать Сообщить модератору
 Re: SET LOCK_TIMEOUT  [new]
Glory
Member

Откуда:
Сообщений: 104751
Hamber
Так клиент эти настройки устанавливаются при соединении первичном,

Вы это откуда знаете ? Вы видели трассу того, что выполняется при соединении ? Или клиентский код
28 окт 11, 16:48    [11517576]     Ответить | Цитировать Сообщить модератору
 Re: SET LOCK_TIMEOUT  [new]
Hamber
Member

Откуда: Москва
Сообщений: 311
Я предполагаю,
а за вышеуказанные примеры и информацию спасибо вам Glory и iljy.
Не знал этих тонкостей.
28 окт 11, 16:53    [11517636]     Ответить | Цитировать Сообщить модератору
 Re: SET LOCK_TIMEOUT  [new]
Glory
Member

Откуда:
Сообщений: 104751
Hamber
Я предполагаю,

А мне кажется, что вы путаете клиентский таймаут с LOCK_TIMEOUT
28 окт 11, 16:55    [11517658]     Ответить | Цитировать Сообщить модератору
 Re: SET LOCK_TIMEOUT  [new]
Hamber
Member

Откуда: Москва
Сообщений: 311
Ну клиент на Delphi. в TMS компоненте, там поле называется DefaultLockTimeout, я подозреваю что это именно оно :)
28 окт 11, 17:01    [11517708]     Ответить | Цитировать Сообщить модератору
 Re: SET LOCK_TIMEOUT  [new]
aleks2
Guest
Hamber
Ну клиент на Delphi. в TMS компоненте, там поле называется DefaultLockTimeout, я подозреваю что это именно оно :)


Это два разных Timeout. Не имеющих друг к другу НИКАКОГО отношения.
28 окт 11, 18:13    [11518246]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить