Mevcut işlem seviyesi nasıl bulunur?


Yanıtlar:


253

Bunu çalıştırın:

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

Sabit değerler için docs.microsoft.com referansı .


8
Yalıtım seviyesi "read_commited_snapshot" ise bu doğru değildir. Bu durumda, yalnızca "Okuma tamamlandı" gösterilir.
GaTechThomas

8
@GaTechThomas, READ_COMMITTED_SNAPSHOTbu davranışını değiştirmek için izin veren bir veritabanının seçenek yalıtım düzeyi değildir ReadDCommittedveritabanı çapında yalıtım düzeyi
Gennady Vanin Геннадий Ванин

@GaTechThomas, o zaman nasıl bulmak o kadar READ_COMMITTED_SNAPSHOT veya READ_COMMITTED_Locked
user960567

1
@ user960567, IIRC, Scott Ivey'in cevabı bu sonuçları verecektir.
GaTechThomas

3
@zzzeek - On iki yıldır kullanılmayan bir veritabanını kullanmak için elde ettiğiniz budur.
Martin Brown

47

sadece koş DBCC useroptionsve böyle bir şey alacaksın:

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

1
ve etkin olduğunda "kaydedilen anlık görüntüyü oku"
yı gösterir (

25
SELECT CASE  
          WHEN transaction_isolation_level = 1 
             THEN 'READ UNCOMMITTED' 
          WHEN transaction_isolation_level = 2 
               AND is_read_committed_snapshot_on = 1 
             THEN 'READ COMMITTED SNAPSHOT' 
          WHEN transaction_isolation_level = 2 
               AND is_read_committed_snapshot_on = 0 THEN 'READ COMMITTED' 
          WHEN transaction_isolation_level = 3 
             THEN 'REPEATABLE READ' 
          WHEN transaction_isolation_level = 4 
             THEN 'SERIALIZABLE' 
          WHEN transaction_isolation_level = 5 
             THEN 'SNAPSHOT' 
          ELSE NULL
       END AS TRANSACTION_ISOLATION_LEVEL 
FROM   sys.dm_exec_sessions AS s
       CROSS JOIN sys.databases AS d
WHERE  session_id = @@SPID
  AND  d.database_id = DB_ID();

6
Lütfen daha eğitici olmak için kodun üzerinde de durun.
lpapp

24
DECLARE   @UserOptions TABLE(SetOption varchar(100), Value varchar(100))
DECLARE   @IsolationLevel varchar(100)

INSERT    @UserOptions
EXEC('DBCC USEROPTIONS WITH NO_INFOMSGS')

SELECT    @IsolationLevel = Value
FROM      @UserOptions
WHERE     SetOption = 'isolation level'

-- Do whatever you want with the variable here...  
PRINT     @IsolationLevel

+1, çünkü ayrıca okuma / okuma (ve varsayılan paylaşılan kilit mekanizması değil) boyunca kullanıldığında 'anlık görüntü' yazdırır
Shmil The Cat

bu overkill, sadece tiagoh diyor gibi DBCC KULLANIM İŞLEMLERİ yapmak
user1075613

9

Geçerli işlem iç içe geçme düzeyi hakkında konuşuyorsanız , o zaman kullanırsınız @@TRANCOUNT.

İşlem yalıtım düzeyinden bahsediyorsanız DBCC USEROPTIONS, yalıtım düzeyi seçeneğini kullanın ve arayın . Ayarlanmadıysa, kararlı olarak okunur .


5
Ayrıca unutmayın, DBCC KULLANIM SEÇENEKLERİ, OTURUMUNUZUN yalıtım düzeyini bulmak için harika bir seçenektir, ancak zor olabilir - kodunuz işlem başına yalıtım düzeyini değiştirirse, yalıtım düzeyinin oturum varsayılanından farklı olduğu zaman dilimleri zor olabilir yakalamak. Örneğin, oturumunuzu yalıtım düzeyi x ile açar ancak oturum içindeki belirli bir işlem süresince yalıtım düzeyini y olarak değiştirirseniz, DBCC USEROPTIONS bu işlemin dışında çağrıldığında size görünürlük sağlamaz.
DCaugs

1
SQL Server 2012'de "izolasyon seviyesi", DBCC USEROPTIONS"okundu taahhüdü" olarak ayarlanmıştır
Gennady Vanin Геннадий Ванин
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.