第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQL Server:池連接之間的隔離級別泄漏

SQL Server:池連接之間的隔離級別泄漏

大話西游666 2019-10-26 13:15:51
正如先前的堆棧溢出問題(TransactionScope和連接池以及SqlConnection如何管理IsolationLevel?)所證明的那樣,事務(wù)隔離級別在與SQL Server和ADO.NET(以及System.Transactions和EF的池連接)之間泄漏,因為它們建立在ADO.NET)。這意味著在任何應(yīng)用程序中都可能發(fā)生以下危險的事件序列:請求發(fā)生,需要顯式事務(wù)以確保數(shù)據(jù)一致性其他任何不使用顯式事務(wù)的請求都會出現(xiàn),因為它僅在執(zhí)行非關(guān)鍵讀取?,F(xiàn)在,該請求將以可序列化的方式執(zhí)行,從而可能導致危險的阻塞和死鎖問題:預(yù)防這種情況的最佳方法是什么?現(xiàn)在真的需要在任何地方使用顯式事務(wù)嗎?這是一個自包含的副本。您將看到第三個查詢將繼承第二個查詢的可序列化級別。class Program{    static void Main(string[] args)    {        RunTest(null);        RunTest(IsolationLevel.Serializable);        RunTest(null);        Console.ReadKey();    }    static void RunTest(IsolationLevel? isolationLevel)    {        using (var tran = isolationLevel == null ? null : new TransactionScope(0, new TransactionOptions() { IsolationLevel = isolationLevel.Value }))        using (var conn = new SqlConnection("Data Source=(local); Integrated Security=true; Initial Catalog=master;"))        {            conn.Open();            var cmd = new SqlCommand(@"select                 case transaction_isolation_level             WHEN 0 THEN 'Unspecified'             WHEN 1 THEN 'ReadUncommitted'             WHEN 2 THEN 'ReadCommitted'             WHEN 3 THEN 'RepeatableRead'             WHEN 4 THEN 'Serializable'             WHEN 5 THEN 'Snapshot'         end as lvl, @@SPID     from sys.dm_exec_sessions     where session_id = @@SPID", conn);            using (var reader = cmd.ExecuteReader())            {                while (reader.Read())                {                    Console.WriteLine("Isolation Level = " + reader.GetValue(0) + ", SPID = " + reader.GetValue(1));                }            }            if (tran != null) tran.Complete();        }    }}輸出:Isolation Level = ReadCommitted, SPID = 51Isolation Level = Serializable, SPID = 51Isolation Level = Serializable, SPID = 51 //leaked!
查看完整描述

3 回答

?
慕虎7371278

TA貢獻1802條經(jīng)驗 獲得超4個贊

在SQL Server 2014中,此問題似乎已得到解決。如果使用TDS協(xié)議7.3或更高版本。


在SQL Server 12.0.2000.8版上運行,輸出為:


ReadCommitted

Serializable

ReadCommitted

不幸的是,此更改未在任何文檔中提及,例如:


SQL Server 2014中數(shù)據(jù)庫引擎功能的行為更改

SQL Server 2014中數(shù)據(jù)庫引擎功能的重大更改

但是更改已記錄在Microsoft論壇上。


不幸的是,此問題后來在SQL Server 2014 CU6和SQL Server 2014 SP1 CU1中“未修復(fù)”,因為它引入了一個錯誤:


FIX:在SQL Server 2014中發(fā)布SQL Server連接時,錯誤地重置了事務(wù)隔離級別


“假定您在SQL Server客戶端源代碼中使用TransactionScope類,并且沒有在事務(wù)中顯式打開SQL Server連接。釋放SQL Server連接后,將不正確地重置事務(wù)隔離級別?!?/p>


查看完整回答
反對 回復(fù) 2019-10-26
  • 3 回答
  • 0 關(guān)注
  • 618 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號