я создал базу данных под названием «test_isolation» и создал таблицу «человек» с даннымиSQL SERVER 2008 Уровень изоляции R2 транзакции Snapshot не работает должным образом
name age
---- ---
test1 1
test2 2
test3 3
test4 4
test5 5
test6 6
Теперь база данных изменена, чтобы разрешить изоляцию снимков в сессии1
ALTER DATABASE test_isolation
SET ALLOW_SNAPSHOT_ISOLATION ON
GO
Теперь я создаю транзакцию в сессии 2
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
GO
BEGIN TRAN
SELECT * FROM PERSON
GO
DELETE FROM PERSON WHERE name = 'test6'
GO
SELECT * FROM PERSON
GO
Результаты ожидаются. (Обратите внимание, мы не совершили эту сделку еще!)
Теперь я выполняю следующий запрос в сессии 3
SELECT * FROM PERSON
запроса в сессии 3 продолжает работать бесконечно, который означает, что таблица заблокирована.
Если я вернусь к сеансу 2 и совершу транзакцию. Я могу запустить запрос в сеансе 3, и результаты будут такими, как ожидалось.
Уровень изоляции транзакций SNAPSHOT не предполагается блокировка стола вправо? Я делаю что-то неправильно или мое понимание транзакции SNAPSHOT Неверная изоляция?
Пожалуйста, помогите ..
+1 от http://msdn.microsoft.com/en-us/library/tcbchxcb(v=vs.80).aspx: 'Установка опции READ_COMMITTED_SNAPSHOT ON позволяет получить доступ к версионированным строкам по умолчанию READ COMMITTED уровень изоляции. Если для параметра READ_COMMITTED_SNAPSHOT установлено значение OFF, вы должны явно установить уровень изоляции моментального снимка для каждого сеанса, чтобы получить доступ к версиям rows.' –