Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MS SQL Server. Блокировки и уровни изоляции.

Аноним
Народ может кто-нибудь сможет проконсультировать на тему работы блокировок в MS SQL Server.
Суть вопроса в следующем: в своей первой сессии начинаю транзакцию, изменяю
записи в таблице. В это же время во второй сессии пытаюсь считывать данные из
той же таблици. В результате экспериментов с разными уровнями изоляции
транзакций и вспомогательными хинтами на запросы: я либо вижу уже измененные,
но не закомиченные записи (read uncommited), либо я вообще не вижу изменяемых
записей (read past). Или же запрос находиться в режиме ожидания завершения
транзакции (при read commited).
Есть ли какая-то возможность увидеть из второй сессии данные таблицы на
момент начала транзакции первой сессии, когда транзакция первой сессии еще не
закомичена? Т.е. чтобы результат селекта возвращал не измененнные данные пока
они не будут закомичены.
В Oracle селект выбирает эти данные по умолчанию, т.к. все изменения
хранятся в Rollack сегментах, а select выбирает непосредственно из таблиц в
которых до коммита хранятся данные на момент начала транзакции.
Неужели в SQL Server такой вид выборки посчитали ненужным?
Помогите пожалуйста разобраться или подскажите где можно про это все почитать.
Аноним
Да, я вот взглянул (даже более того занимаюсь сейчас по мере работы) на этот гемморой... и удивляюсь как так можно было написать сервер и как им народ вообще пользуется, да еще и деньги за это платит!... Суть в том, что при селекте (при Read Commited) у тебя MSSQL пытается выбрать все что есть и натыкается на блокировку (транзакция незавершенная, которая пытается что то поменять) Выход в этой ситуации есть такой, чтоб этот запрос на выборку выбирал исключительно записи, которые не содержат блокировок, т.е. с обязательным where в котором исключается ситуация по выборке "обрабатываемых" записей. Я так подозреваю, что есть такой выход, как в табличку добавить полле Locked в которое ты будешь заносить значение означающее, что запись в обработке и тогда в выборке указываешь что where Locked=0 При этом на Locked должен существовать индекс, а то при переборе опять же записей, MSSQL наткнется на блокировку...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог