|
|
su.dbms.sql- SU.DBMS.SQL ------------------------------------------------------------------ From : Alexander Sakhatovskiy 2:5020/400 21 Feb 2001 14:02:15 To : All Subject : Блокировки -------------------------------------------------------------------------------- Dmitry Kuzmenko <dima@demo.ru> пишет в > > > Ok, тогда так: > > > стартует транзакция 1 в RC > > > стартует транзакция 2 в RC > > > транзакция 1 читает запись X таблицы Y > > > транзакция 2 обновляет запись X таблицы Y. > > > > > > что будет вот в этом месте в MS SQL? > > > транзакция 2 успешно обновит запись? И что тогда прочитает > > > транзакция 1, если попытается ПЕРЕЧИТАТЬ запись X? > > > > Если Т2 уже сказала COMMIT - то новое значение (на то оно и RC) > > Если еще нет - то остановится и будет ждать, когда T2 завершится, а потом - > > прочтет новое значение > > об этом я и говорю. Да нет, вот что ты говорил: == Определить точно термин "блокировщик" трудно. Как минимум это сервер, где при чтении записи (или страницы) на нее ставится lock до закрытия курсора (выборки) или завершения транзакции. Классический пример разного подхода к обеспечению режима Read Committed: 1. блокировщик при чтении блокирует запись, чтобы ее никто не смог изменить, т.к. в этом случае режим RC будет нарушен. (нет версий, т.е. нет способа оставить видимой "старую" запись до тех пор пока новая запись не будет committed) 2. версионник при чтении ничего не блокирует. Hовую версию записи никто кроме создателя до commit не увидит. == То есть, что T2 не сможет обновить запись X в таблице Y. А она сможет :) И еще попровочка, T1 может и не останавливаться, если T2 изменила, и не закомитела, а сразу обругаться (от настроек зависит). -- Alexander Sakhatovskiy, ICQ#: 22872438 (AlexanderS@au.ru) --- ifmail v.2.15dev5 * Origin: Marka ISP (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms.sql/1423458915b49.html, оценка из 5, голосов 10
|