Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
При UPDATE в рамках DirtyRead транзакции блокируется вся таблица?
|
|||
|---|---|---|---|
|
#18+
Делаю UPDATE TESTTABLE SET K = 10 WHERE TESTTABLE_ID = 10 Потом в другой тарнзакции делаю UPDATE TESTTABLE SET K = 20 WHERE TESTTABLE_ID = 20 И последняя транзакция зависает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2001, 00:24 |
|
||
|
При UPDATE в рамках DirtyRead транзакции блокируется вся таблица?
|
|||
|---|---|---|---|
|
#18+
Ну, а sp_lock что говорит? И какой всё-таки TRANSACTION ISOLATION LEVEL установлен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2001, 01:28 |
|
||
|
При UPDATE в рамках DirtyRead транзакции блокируется вся таблица?
|
|||
|---|---|---|---|
|
#18+
Уровень изоляции 0 (нулевой) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2001, 09:29 |
|
||
|
При UPDATE в рамках DirtyRead транзакции блокируется вся таблица?
|
|||
|---|---|---|---|
|
#18+
Вот что говорит sp_lock: spid dbid ObjId IndId Type Resource mode status 54 7 706101556 0 TAB IX GRANT 54 7 706101556 0 RID 1:979:1 X GRANT 54 7 706101556 0 PAG 1:979 IX GRANT 54 7 706101556 0 RID 1:979:0 X GRANT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2001, 09:46 |
|
||
|
При UPDATE в рамках DirtyRead транзакции блокируется вся таблица?
|
|||
|---|---|---|---|
|
#18+
Я все-таки настоятельно призываю изучать наследие классиков. Из статьи "Microsoft SQL Server 7.0 - контрольная по безопасности": В. К вам пришел продвинутый пользователь Саша, прослышавший про то, что в SQL Server 7.0 есть блокировки уровня записи, и в ультимативной форме потребовал, чтобы ему выдали на них права, потому что когда он на одном соединении делает begin tran update Auth with (rowlock) set au_lname = au_lname where au_id = '172-32-1176', а на другом select * from auth where au_id = '213-46-8915', второй запрос подвисает, пока на первом соединении не сказать commit tran или rollback. Отсюда, по мысли Саши, неопровержимо следует, что SQL Server все равно блокирует не запись, а страницу несмотря на явный хинт. Ваши действия: а) grant rowlock on Auth to [Саша]; б) sp_addrolemember ‘db_lockadmins’, ‘Саша’; в) стартовать SQL Mail под профилем администратора и предложить Саше отправить сообщение c описанием проблемы, начинающееся словами «Дорогой SQL Server...»; г) create index auth_ix on Auth(au_id)? О. г). Задача не имеет отношения к теме безопасности, так как блокировки являются внутренними объектами SQL Server и понятие прав пользователей для них не существует. После того, как проверены права пользователя на операцию, в ходе ее выполнения блокировки накладываются автоматически. В данном случае первый процесс действительно блокировал только одну запись (см. sp_lock), второй же останавливался из-за того, что не мог прочитать из нее поле au_id и проверить условие where для этой записи. После создания индекса он станет брать au_id из индексных страниц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2001, 10:12 |
|
||
|
При UPDATE в рамках DirtyRead транзакции блокируется вся таблица?
|
|||
|---|---|---|---|
|
#18+
Во-первых, не понял при чем здесь права пользователей. Второе, уровень изоляции транзакции - нулевой, а следовательно данные из таблицы должны читаться свободно. Я отличаюсь от Саши тем, что после begin tran я делаю set transaction isolation level read uncommitted ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2001, 12:43 |
|
||
|
При UPDATE в рамках DirtyRead транзакции блокируется вся таблица?
|
|||
|---|---|---|---|
|
#18+
А действительно интересно! Следующая конструкция у меня работает (в соответствущем контексте): SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT * FROM TESTTABLE TESTTABLE_ID=10 А вот эта уже нет (в том же контексте): SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED UPDATE TESTTABLE SET K = 20 WHERE TESTTABLE_ID = 20 Можно так: SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED UPDATE TESTTABLE SET K = 20 FROM TESTTABLE WITH(readpast) WHERE TESTTABLE_ID = 20 но я не уверен, что это хорошо (хотя все работет правильно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2001, 14:45 |
|
||
|
При UPDATE в рамках DirtyRead транзакции блокируется вся таблица?
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, не SELECT * FROM TESTTABLE TESTTABLE_ID=10, a SELECT * FROM TESTTABLE TESTTABLE_ID=20 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2001, 14:47 |
|
||
|
При UPDATE в рамках DirtyRead транзакции блокируется вся таблица?
|
|||
|---|---|---|---|
|
#18+
Тьфу блин!!! Теперь WHERE потерялся. В обшем главное не форма, а смысл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2001, 14:51 |
|
||
|
При UPDATE в рамках DirtyRead транзакции блокируется вся таблица?
|
|||
|---|---|---|---|
|
#18+
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED - естественно, учитывается только при чтении. При упдейтах блокировки должны быть по определению. Другое дело, почему не срабатывает блокировка на запись - но это наверное из-за индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2001, 14:55 |
|
||
|
При UPDATE в рамках DirtyRead транзакции блокируется вся таблица?
|
|||
|---|---|---|---|
|
#18+
"Во-первых, не понял при чем здесь права пользователей" Во-первых, права пользователей здесь при том, что статья д-но была посвящена безоп-ти. А поск. в отл. от авторов толстых книг я не пересказываю BOL, а беру реальные ситуации, то в моей прошлой жизни такой случай реально имел место. Т.е. пришел один перец, типа продвинутый юзер, и пытался продемонстрировать свои познания, полученные после прочтения толстой книги. "Я отличаюсь от Саши тем, что ..." Во-вторых. Не надо искать в моих словах параллели. Статья написана полтора года назад, и я не хотел совпадениями задеть кого-л. из присутствующих здесь сейчас. "Второе, уровень изоляции транзакции - нулевой, а следовательно данные из таблицы должны читаться свободно." В-третьих, не надо быть американским стюдентом. Стоит иногда давать себе труд подумать самому. Напр., почему работает вот так: 1-я сессия: set transaction isolation level read uncommitted begin tran update Auth with (rowlock) set au_lname = au_lname where au_id = '172-32-1176' 2-я сессия: set transaction isolation level read uncommitted select * from auth where au_id = '213-46-8915' и не работает, если на 2-м коннекте вместо select поставить update Auth with (rowlock) set au_lname = au_lname where au_id = '213-46-8915' PS. AlexeyVG прав. Прочтите еще раз опр-е "грязного чтения". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2001, 23:57 |
|
||
|
При UPDATE в рамках DirtyRead транзакции блокируется вся таблица?
|
|||
|---|---|---|---|
|
#18+
PPS. set transaction isolation level в 1-ю сессию попал случайно. Сов.очев., что он там не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2001, 00:04 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32005891&tid=1826745]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 330ms |

| 0 / 0 |
