Как узнать текущий уровень транзакций базы данных на SQL Server?
Как узнать текущий уровень транзакции?
Ответы (6)
Запустите это:
SELECT CASE transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncommitted'
WHEN 2 THEN 'ReadCommitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL
FROM sys.dm_exec_sessions
where session_id = @@SPID
справочник по постоянным значениям на docs.microsoft.com.
person
SQLMenace
schedule
24.06.2009
Это неверно, если уровень изоляции равен read_commited_snapshot. В этом случае будет отображаться только Readcommited.
- person GaTechThomas; 28.05.2013
@GaTechThomas,
READ_COMMITTED_SNAPSHOT
не является уровнем изоляции, это опция базы данных, позволяющая изменять поведение ReadDCommitted
уровня изоляции для всей базы данных
- person Gennady Vanin Геннадий Вани&; 11.12.2013
@GaTechThomas, тогда как найти, что READ_COMMITTED_SNAPSHOT или READ_COMMITTED_Locked
- person user960567; 15.12.2013
@ user960567, IIRC, ответ Скотта Айви даст такие результаты.
- person GaTechThomas; 15.12.2013
К сожалению, это не работает для SQL Server 2000.
- person zzzeek; 26.01.2017
@zzzeek - это то, что вы получаете, если используете базу данных, которая устарела двенадцать лет назад.
- person Martin Brown; 01.08.2017
В некоторых случаях это неверно. Если у меня есть, например, уровень изоляции Read Commited Snapshot, приведенный выше код будет писать только ReadCommited.
- person StupidOne; 25.07.2019
@StupidOne Моментальный снимок зафиксированного чтения не является отдельным уровнем изоляции, поэтому показывать зафиксированное чтение является правильным. Это опция базы данных, которая изменяет поведение READ COMMITTED. Чтобы проверить, включен ли READ_COMMITTED_SNAPSHOT, взгляните на это: stackoverflow.com/a/51977/208318
- person Doug; 17.02.2020
просто запустите DBCC useroptions
, и вы получите что-то вроде этого:
Set Option Value
--------------------------- --------------
textsize 2147483647
language us_english
dateformat mdy
datefirst 7
lock_timeout -1
quoted_identifier SET
arithabort SET
ansi_null_dflt_on SET
ansi_warnings SET
ansi_padding SET
ansi_nulls SET
concat_null_yields_null SET
isolation level read committed
person
thiagoh
schedule
30.09.2014
и он указывает на прочитанный зафиксированный снимок, когда он активен (см. Снимок RC против заблокированного), по крайней мере, на SQL Server 2008
- person user1075613; 28.04.2017
Если вы говорите о текущем уровне вложенности транзакции, вы должны использовать @@TRANCOUNT
.
Если вы говорите об уровне изоляции транзакции, используйте DBCC USEROPTIONS
и ищите вариант уровня изоляции. Если он не установлен, он зафиксирован при чтении.
person
Eric Petroelje
schedule
24.06.2009
Также имейте в виду, что DBCC USEROPTIONS - отличный вариант для определения уровня изоляции вашего СЕССИЯ, но это может быть сложно - если ваш код изменяет уровень изоляции для каждой транзакции, те периоды времени, когда уровень изоляции отличается от уровня по умолчанию для сеанса, могут быть сложными. захватить. Например, если вы открываете сеанс с уровнем изоляции x, но изменяете уровень изоляции на y на время выполнения определенной транзакции в сеансе, DBCC USEROPTIONS не даст вам видимости этого, если вызывается вне этой транзакции.
- person DCaugs; 18.10.2013
В SQL Server 2012 уровень изоляции
DBCC USEROPTIONS
установлен на чтение зафиксировано
- person Gennady Vanin Геннадий Вани&; 12.12.2013
person
schedule
Пожалуйста, уточните код, чтобы он был более информативным.
- person lpapp; 23.02.2014
person
schedule
+1, так как он также печатает 'снимок', когда он используется вместе с фиксацией чтения (а не механизм общей блокировки по умолчанию)
- person Shmil The Cat; 26.02.2014
это излишество, просто выполните DBCC USEROPTIONS, как говорит тиагох
- person user1075613; 28.04.2017
person
schedule
Ваш ответ почти не отличается от этого ответа, который был опубликован более 7 лет назад. Вам следует отредактировать свой ответ, включив в него более подробную информацию о своем решении и / или объяснение как этот блок кода отвечает на вопрос. Это помогает обеспечить контекст и делает ваш ответ более полезным для будущих читателей.
- person Hoppeduppeanut; 10.06.2021