कैसे करें लेन-देन का वर्तमान स्तर?


जवाबों:


253

इसे चलाओ:

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 संदर्भ


8
यदि आइसोलेशन स्तर "read_commited_snapshot" है तो यह सही नहीं है। इस मामले में, यह केवल "Readcommited" दिखाएगा।
GaTechThomas

8
@GaTechThomas, READ_COMMITTED_SNAPSHOTआइसोलेशन स्तर नहीं है, यह एक डेटाबेस का विकल्प है जो ReadDCommittedआइसोलेशन लेवल डेटाबेस-वाइड के व्यवहार को बदलने की अनुमति देता है
Gennady Vanin Геннадий Ванин

@GaTechThomas, फिर कैसे खोजें कि READ_COMMITTED_SNAPSHOT या READ_COMMITTED_Locked
user960567

1
@ user960567, IIRC, स्कॉट Ivey का जवाब उन परिणामों को देगा।
GaTechThomas

3
@zzzeek - यह है कि आप एक डेटाबेस है कि बारह साल के लिए अप्रचलित है का उपयोग करने के लिए मिलता है।
मार्टिन ब्राउन

46

बस दौड़ें 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

1
और यह सक्रिय होने पर "पढ़े गए स्नैपशॉट" को इंगित करता है (देखें आरसी स्नैपशॉट बनाम लॉक), कम से कम 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
कृपया अधिक शिक्षाप्रद होने के लिए कोड पर भी विस्तार से बताएं।
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 के बाद से इसके 'स्नैपशॉट' को तब प्रिंट करता है जब इसे w / read प्रतिबद्ध के साथ प्रयोग किया जाता है (और डिफ़ॉल्ट साझा लॉक तंत्र नहीं)
Shmil The Cat

यह ओवरकिल है, बस DBCC USEROPTIONS को थियागोह कहते हैं
उपयोगकर्ता 1075613

9

यदि आप वर्तमान लेनदेन के घोंसले के स्तर के बारे में बात कर रहे हैं , तो आप उपयोग करेंगे @@TRANCOUNT

आप लेन-देन के बारे में बात कर रहे हैं अलगाव स्तर, उपयोग DBCC USEROPTIONSऔर का एक विकल्प के लिए देखो अलगाव स्तर । यदि यह सेट नहीं है, तो यह प्रतिबद्ध है


5
यह भी ध्यान रखें कि DBCC USEROPTIONS आपके SESSION'S अलगाव स्तर को खोजने के लिए एक भयानक विकल्प है, लेकिन यह मुश्किल हो सकता है - यदि आपका कोड प्रति लेन-देन के अलगाव स्तर को बदलता है, तो उन समय की अवधि जहां अलगाव का स्तर सत्र डिफ़ॉल्ट से अलग है, कठिन हो सकता है कब्जा करना। उदाहरण के लिए, यदि आप अपना सत्र अलगाव स्तर x के साथ खोलते हैं, लेकिन सत्र के भीतर किसी विशिष्ट लेन-देन की अवधि के लिए आइसोलेशन स्तर को y में बदल देते हैं, तो DBCC USEROPTIONS आपको दृश्यता नहीं देगा यदि उस लेनदेन के बाहर बुलाया जाता है।
DCAugs

1
SQL Server 2012 में "आइसोलेशन लेवल" DBCC USEROPTIONSको "
कमिटेड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.