Должен ли я добавить чтение, зафиксированное после УСТАНОВКИ УРОВНЯ ИЗОЛЯЦИИ SET TRANSACTION?

9

Внутри хранимой процедуры у меня есть следующее: (SQL Server 2008)

 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
 BEGIN TRANSACTION getStuff
 BEGIN TRY 
    /*  some selects, updates, etc, etc. */
    ....
    COMMIT TRANSACTION getStuff
 END TRY
 BEGIN CATCH 
   ...
 END CATCH

Поскольку это основано на транзакциях, я думал, что остальные соединения с базой данных не будут затронуты SERIALIZABLE.

Нужно ли неявно устанавливать уровень изоляции для чтения, зафиксированного после моей фиксации? Повлияет ли это на другие соединения между сервером приложений и сервером базы данных?

CFNinja
источник

Ответы:

6

Команда есть TRANSACTION ISOLATION LEVEL, нет SERVER ISOLATION LEVEL. Это только изменяет уровень изоляции для области транзакции.

Эрик Дарлинг
источник
5

Нет, вам не нужно неявно возвращать уровень изоляции для чтения зафиксированных.

Из книг онлайн .

Если вы используете SET TRANSACTION ISOLATION LEVEL в хранимой процедуре или триггере, когда объект возвращает управление, уровень изоляции сбрасывается до уровня, действующего на момент вызова объекта. Например, если вы установили REPEATABLE READ в пакете, а затем пакет вызывает хранимую процедуру, которая устанавливает уровень изоляции SERIALIZABLE, параметр уровня изоляции возвращается к REPEATABLE READ, когда хранимая процедура возвращает управление пакету.

SqlWorldWide
источник
3

Отправленная вами команда просто запускает транзакцию в SP TRANSACTION ISOLATION LEVEL SERIALIZABLE. Для других соединений по умолчанию используется уровень изоляции по умолчанию - чтение зафиксировано (если явно не указан другой уровень изоляции).

Пол Уайт предлагает отличную серию « Уровни изоляции SQL Server: серия», которая поможет вам глубже понять, что означают различные уровни изоляции и что они делают при их использовании.

Кин Шах
источник
-3

Довольно новый алгоритм, который позволяет избежать большинства недостатков предыдущих подходов. Он использует оптимистический подход, позволяющий проводить транзакции без блокировки. Когда транзакция хочет зафиксировать ее, она проверяется и прерывается, если выполнение не было сериализуемым. Более подробная информация обо всех приложениях доступна по адресу: http://writeulearn.com/relational-database-transactions/

сссс
источник
Это не похоже на ответ на вопрос ....
RDFozz