Làm thế nào để tìm mức giao dịch hiện tại?


Câu trả lời:


252

Chạy cái này:

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

tài liệu tham khảo docs.microsoft.com cho các giá trị không đổi .


8
Điều này là không chính xác nếu mức cô lập là "read_commited_snapshot". Trong trường hợp này, nó sẽ chỉ hiển thị "Đã đọc".
GaTechThomas

8
@GaTechThomas, READ_COMMITTED_SNAPSHOTkhông phải là mức cô lập, đây là tùy chọn của cơ sở dữ liệu cho phép thay đổi hành vi của toàn bộ ReadDCommittedcơ sở dữ liệu ở cấp độ cách ly
Gennady Vanin Геннадий Внаин

@GaTechThomas, sau đó làm thế nào để tìm thấy READ_COMMITTED_SNAPSHOT hoặc READ_COMMITTED_Locked
user960567

1
@ user960567, IIRC, câu trả lời của Scott Ivey sẽ cho những kết quả đó.
GaTechThomas

3
@zzzeek - Đó là những gì bạn nhận được khi sử dụng cơ sở dữ liệu đã lỗi thời trong mười hai năm.
Martin Brown

46

chỉ cần chạy DBCC useroptionsvà bạn sẽ nhận được một cái gì đó như thế này:

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
và nó chỉ ra "đọc ảnh chụp đã cam kết" khi hoạt động (xem ảnh chụp nhanh RC so với khóa), ít nhất là trên SQL Server 2008
user1075613

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
Xin vui lòng xây dựng mã để được giáo dục nhiều hơn.
lpapp

23
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 vì nó cũng in 'snapshot' khi nó được sử dụng cùng với w / read đã cam kết (và không phải là cơ chế khóa chia sẻ mặc định)
Shmil The Cat 26/214

đây là quá mức cần thiết, chỉ cần thực hiện DBCC USEROPTION như thiagoh nói
user1075613

9

Nếu bạn đang nói về mức lồng nhau giao dịch hiện tại , thì bạn sẽ sử dụng @@TRANCOUNT.

Nếu bạn đang nói về mức độ cô lập giao dịch , hãy sử dụng DBCC USEROPTIONSvà tìm kiếm một tùy chọn về mức độ cô lập . Nếu nó không được đặt, nó được đọc cam kết .


5
Ngoài ra, hãy nhớ rằng DBCC USEROPTIONS là một tùy chọn tuyệt vời để tìm mức cô lập SESSION của bạn, nhưng nó có thể khó khăn - nếu mã của bạn thay đổi mức cô lập trên mỗi giao dịch, thì những khoảng thời gian mà mức cách ly khác với mặc định phiên có thể khó khăn để nắm bắt. Ví dụ: nếu bạn mở phiên của mình với mức cô lập x, nhưng thay đổi mức cô lập thành y trong suốt thời gian của một giao dịch cụ thể trong phiên, DBCC USEROPTION sẽ không cung cấp cho bạn khả năng hiển thị nếu được gọi bên ngoài giao dịch đó.
DCauss

1
Trong SQL Server 2012 "cách ly cấp" của DBCC USEROPTIONSđược thiết lập để "đọc cam kết"
Gennady Vanin Геннадий Ванин
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.