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

Откуда:
Сообщений: 4
Всем привет.
У меня приложение WCF, в котором открывается транзакция на базу данных sql. На базе данных ms sql 2016 (SP1) я устанавливаю параметр SET TRANSACTION ISOLATION LEVEL
в READ UNCOMMITTED, но на выполнение транзакций и на доступ к данным по select это никак не влияет (транзакция блокирует таблицу и данные невозможно прочитать). Так же я пробовал устанавливать параметр IsolationLevel.ReadUncommitted в BeginTransaction, но это тоже не помогает. Однако, если установить with (READUNCOMMITTED) для отдельных Select запросов, то все работает как надо и данные запрашиваются. По какой причине может не работать установка общего параметра IsolationLevel ни на базе данных, ни через код?
28 апр 18, 10:37    [21376371]     Ответить | Цитировать Сообщить модератору
 Re: Нет результата от установки SET TRANSACTION ISOLATION LEVEL на базе данных  [new]
aleksrov
Member

Откуда:
Сообщений: 948
Antw,

На базе данных вы не можете поменять уровень по умолчанию (если не брать snapshot).
Также не понятно что, где и как вы устанавливатет, у уровня изоляции тоже есть свой scope.
If you issue SET TRANSACTION ISOLATION LEVEL in a stored procedure or trigger, when the object returns control the isolation level is reset to the level in effect when the object was invoked. For example, if you set REPEATABLE READ in a batch, and the batch then calls a stored procedure that sets the isolation level to SERIALIZABLE, the isolation level setting reverts to REPEATABLE READ when the stored procedure returns control to the batch
28 апр 18, 10:59    [21376460]     Ответить | Цитировать Сообщить модератору
 Re: Нет результата от установки SET TRANSACTION ISOLATION LEVEL на базе данных  [new]
ЛиП
Member

Откуда:
Сообщений: 348
SqlConnection.BeginTransaction Method (IsolationLevel) ?
28 апр 18, 11:04    [21376478]     Ответить | Цитировать Сообщить модератору
 Re: Нет результата от установки SET TRANSACTION ISOLATION LEVEL на базе данных  [new]
Antw
Member

Откуда:
Сообщений: 4
aleksrov,

Первым способом на базе данных я указываю команду SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED, после чего проверяю командой dbcc useroptions настройки и вижу установку read uncommitted в параметре isolation level в настройках БД.

Вторым способом с кода c# при открытии транзакции:
connection.BeginTransaction(IsolationLevel.ReadUncommitted);
я проставляю IsolationLevel.

Запросы я вызываю с сервера через ExecuteReader и ExecuteNonQuery.

По msdn этого должно быть достаточно, чтобы поменять IsolationLevel на БД. Или я ошибаюсь?
28 апр 18, 11:10    [21376496]     Ответить | Цитировать Сообщить модератору
 Re: Нет результата от установки SET TRANSACTION ISOLATION LEVEL на базе данных  [new]
Antw
Member

Откуда:
Сообщений: 4
aleksrov,

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED на БД устанавливается только для текущего конекшена. Понял, спасибо.
НО уставновка с кода c# connection.BeginTransaction(IsolationLevel.ReadUncommitted); все равно не работает.
28 апр 18, 11:19    [21376523]     Ответить | Цитировать Сообщить модератору
 Re: Нет результата от установки SET TRANSACTION ISOLATION LEVEL на базе данных  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36900
SET TRANSACTION ISOLATION LEVEL устанавливает уровень изоляции для текущей сессии. dbcc useroptions так же показывает настройки текущей сессии.
28 апр 18, 11:20    [21376524]     Ответить | Цитировать Сообщить модератору
 Re: Нет результата от установки SET TRANSACTION ISOLATION LEVEL на базе данных  [new]
aleks222
Member

Откуда:
Сообщений: 920
Antw
Всем привет.
У меня приложение WCF, в котором открывается транзакция на базу данных sql. На базе данных ms sql 2016 (SP1) я устанавливаю параметр SET TRANSACTION ISOLATION LEVEL
в READ UNCOMMITTED, но на выполнение транзакций и на доступ к данным по select это никак не влияет (транзакция блокирует таблицу и данные невозможно прочитать). Так же я пробовал устанавливать параметр IsolationLevel.ReadUncommitted в BeginTransaction, но это тоже не помогает. Однако, если установить with (READUNCOMMITTED) для отдельных Select запросов, то все работает как надо и данные запрашиваются. По какой причине может не работать установка общего параметра IsolationLevel ни на базе данных, ни через код?


Т.е. религиозные убеждения не дозволяют использовать Profiler?
28 апр 18, 11:23    [21376532]     Ответить | Цитировать Сообщить модератору
 Re: Нет результата от установки SET TRANSACTION ISOLATION LEVEL на базе данных  [new]
Antw
Member

Откуда:
Сообщений: 4
Гавриленко Сергей Алексеевич,

это я понял, спасибо
28 апр 18, 11:24    [21376533]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить