您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么掌握ADO.NET資源管理器原理機制”,在日常操作中,相信很多人在怎么掌握ADO.NET資源管理器原理機制問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么掌握ADO.NET資源管理器原理機制”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
事務中使用的每個資源都由資源管理器進行管理,而后者的操作則由事務管理器進行協調。資源管理器與事務管理器協調工作,為應用程序提供了原子性和隔離性的保證。例如,Microsoft SQL Server、持久消息隊列、內存中的哈希表都是ADO.NET資源管理器。
ADO.NET資源管理器可管理持久或可變數據。資源管理器的持久性(反之為可變性)是指資源管理器是否支持故障恢復。如果資源管理器支持故障恢復,則它會在第 1 階段(準備階段)將數據保存到持久存儲區中;這樣,一旦資源管理器出現故障,它就可在恢復時在事務中重新登記,并根據從 TM 接收到的通知執行適當的操作。通常,可變資源管理器管理如內存中的數據結構之類的可變資源(如內存中的事務處理哈希表),而持久資源管理器則管理具有更持久的后備存儲區的資源(例如,其后備存儲區為磁盤的數據庫)。
資源若要參與事務,它必須在事務中進行登記。Transaction 類定義了一組提供此功能的方法,這些方法的名稱以 Enlist 開頭。不同的 Enlist 方法對應于資源管理器可能具有的不同登記類型。具體來說,EnlistVolatile 方法用于登記可變資源,而 EnlistDurable 方法則用于登記持久資源。為了簡單起見,在根據資源的持久性支持決定是使用 EnlistDurable 還是 EnlistVolatile 方法后,應為資源管理器實現 IEnlistmentNotification 接口,從而將資源登記為參與兩階段提交 (2PC)。有關 2PC 的更多信息,請參見在單階段和多階段中提交事務。
通過登記,資源管理器可確保在事務提交或中止時能夠從事務管理器獲取回調。每個登記都有一個 IEnlistmentNotification 實例。通常情況下,在每個事務中只執行一次登記,但資源管理器可選擇在同一事務中執行多次登記。
登記后,ADO.NET資源管理器會對事務的請求做出響應。持久資源管理器存儲了足夠的信息,可允許在它所管理的資源上撤消或重做事務的工作。可以使用許多方法來實現此目的;最常采用的兩種方法是保存數據版本和保存更改日志。
當應用程序提交事務時,事務管理器會啟動兩階段提交協議。事務管理器先向每個已登記的資源管理器詢問它是否已準備好提交事務。資源管理器必須準備好提交,即它自身準備好提交或中止事務。
在準備階段,持久資源管理器會將舊數據和新數據記錄到固定存儲區中,以便即使系統出現故障,資源管理器也可恢復數據。如果資源管理器準備就緒,就會向事務管理器通知有關它是提交還是中止事務的投票。如果有任何資源管理器報告準備失敗,則事務管理器會將回滾命令發送給每個資源管理器,并向應用程序指出提交失敗。
在準備就緒后,資源管理器必須等待,直到它在第 2 階段中從事務管理器獲取提交或中止回調為止。通常,整個準備和提交協議不到一秒即可完成。如果發生系統或通信故障,則提交或中止通知可能無法在幾分鐘或幾小時內送達。在此期間,資源管理器將無法確定事務的結果,即不知道事務是已提交還是已中止。當資源管理器不確定事務狀態時,它會通過使事務處于鎖定狀態來保留已修改的數據,從而將這些更改與任何其他事務隔離開。
如果資源管理器發生故障,則除了在發生故障之前已準備或提交的事務之外,其余所有已登記事務都將中止。當持久資源管理器重新啟動時,它會通過檢索在準備階段編寫的準備信息重新構建資源的已提交狀態,并相應地提交或中止這些事務。
總之,兩階段提交協議和資源管理器共同使事務具有了原子性和持久性。
Transaction 類還提供了 EnlistPromotableSinglePhase 方法來登記可提升的單階段登記 (PSPE)。這使持久資源管理器 (RM) 可承載和“擁有”以后可在需要時升級為由 MSDTC 進行管理的事務。
到此,關于“怎么掌握ADO.NET資源管理器原理機制”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。