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

Откуда:
Сообщений: 11
SQL2005 Ent. Подскажите, пожалуйста, можно ли определить участвует определенная запись в произвольной таблице БД в какой-либо транзакции в текущий момент времени или нет?
2 ноя 09, 11:51    [7869838]     Ответить | Цитировать Сообщить модератору
 Re: Как определить, что запись не участвует в транзакции?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31175
b_m_d
SQL2005 Ent. Подскажите, пожалуйста, можно ли определить участвует определенная запись в произвольной таблице БД в какой-либо транзакции в текущий момент времени или нет?
Думаю, нельзя. По крайней мере, простыми средствами.

Разве что наложить блокировку и проанализировать результат.
2 ноя 09, 11:55    [7869872]     Ответить | Цитировать Сообщить модератору
 Re: Как определить, что запись не участвует в транзакции?  [new]
b_m_d
Member

Откуда:
Сообщений: 11
Детальная информация по транзакции не нужна. Важно понять, идет ли работа с записью или её уже "оставили в покое".
2 ноя 09, 12:01    [7869925]     Ответить | Цитировать Сообщить модератору
 Re: Как определить, что запись не участвует в транзакции?  [new]
Supra93
Member

Откуда:
Сообщений: 8174
+ ОФФтопик

Зачем?
2 ноя 09, 12:04    [7869960]     Ответить | Цитировать Сообщить модератору
 Re: Как определить, что запись не участвует в транзакции?  [new]
b_m_d
Member

Откуда:
Сообщений: 11
Есть распределенная система из нескольких БД, в которой работает не-SQL репликация. Одна незадача, клиент видит грязные данные и поменять уровень изоляции непосредственно при выборке данных возможности нет.
2 ноя 09, 12:14    [7870040]     Ответить | Цитировать Сообщить модератору
 Re: Как определить, что запись не участвует в транзакции?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31175
b_m_d
Детальная информация по транзакции не нужна. Важно понять, идет ли работа с записью или её уже "оставили в покое".
Ну вот, для этого я предложил вариант - наложить блокировку с установкой SET LOCK_TIMEOUT 0 или с хинтом NOWAIT и проанализировать результат.
2 ноя 09, 12:15    [7870050]     Ответить | Цитировать Сообщить модератору
 Re: Как определить, что запись не участвует в транзакции?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31175
b_m_d
Есть распределенная система из нескольких БД, в которой работает не-SQL репликация. Одна незадача, клиент видит грязные данные и поменять уровень изоляции непосредственно при выборке данных возможности нет.
Вам же не поможет такая проверка для того, чтобы избежать грязного чтения.
2 ноя 09, 12:16    [7870060]     Ответить | Цитировать Сообщить модератору
 Re: Как определить, что запись не участвует в транзакции?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
> клиент видит грязные данные

если запросы с NOLOCK - ничего уже не сделать
2 ноя 09, 12:20    [7870114]     Ответить | Цитировать Сообщить модератору
 Re: Как определить, что запись не участвует в транзакции?  [new]
b_m_d
Member

Откуда:
Сообщений: 11
alexeyvg
b_m_d
Есть распределенная система из нескольких БД, в которой работает не-SQL репликация. Одна незадача, клиент видит грязные данные и поменять уровень изоляции непосредственно при выборке данных возможности нет.
Вам же не поможет такая проверка для того, чтобы избежать грязного чтения.


Сейчас эту проблему решили так (нет уверенности, что правильно): в передаваемых таблицах есть поле Счетчик Репликации (RC) на которое ориентируется репликатор, оно обновляется не клиентом, а запуском хранимой процедурой на сервере. Для новых записей RC=0,а также любое изменение данных клиентом начинается с обнуления RC. ХП для обновление счетчика работает следующим образом: делается выборка записей с уровнем изоляции Snapshot, у которых RC=0 и только в них RC заполняется следующим порядковым номером. С такой доработкой работает чище, чем раньше, но не безупречно.
2 ноя 09, 13:19    [7870684]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить