快速掌握ADO.NET资源管理器原理机制
创始人
2024-06-11 15:41:01
0

ADO.NET还是比较常用的,于是我研究了一下ADO.NET资源管理器,在这里拿出来和大家分享一下,希望对大家有用。事务中使用的每个资源都由资源管理器进行管理,而后者的操作则由事务管理器进行协调。资源管理器与事务管理器协调工作,为应用程序提供了原子性和隔离性的保证。例如,Microsoft SQL Server、持久消息队列、内存中的哈希表都是ADO.NET资源管理器。

#T#ADO.NET资源管理器可管理持久或可变数据。资源管理器的持久性(反之为可变性)是指资源管理器是否支持故障恢复。如果资源管理器支持故障恢复,则它会在第 1 阶段(准备阶段)将数据保存到持久存储区中;这样,一旦资源管理器出现故障,它就可在恢复时在事务中重新登记,并根据从 TM 接收到的通知执行适当的操作。通常,可变资源管理器管理如内存中的数据结构之类的可变资源(如内存中的事务处理哈希表),而持久资源管理器则管理具有更持久的后备存储区的资源(例如,其后备存储区为磁盘的数据库)。

资源若要参与事务,它必须在事务中进行登记。Transaction 类定义了一组提供此功能的方法,这些方法的名称以 Enlist 开头。不同的 Enlist 方法对应于资源管理器可能具有的不同登记类型。具体来说,EnlistVolatile 方法用于登记可变资源,而 EnlistDurable 方法则用于登记持久资源。为了简单起见,在根据资源的持久性支持决定是使用 EnlistDurable 还是 EnlistVolatile 方法后,应为资源管理器实现 IEnlistmentNotification 接口,从而将资源登记为参与两阶段提交 (2PC)。有关 2PC 的更多信息,请参见在单阶段和多阶段中提交事务。

通过登记,资源管理器可确保在事务提交或中止时能够从事务管理器获取回调。每个登记都有一个 IEnlistmentNotification 实例。通常情况下,在每个事务中只执行一次登记,但资源管理器可选择在同一事务中执行多次登记。

登记后,ADO.NET资源管理器会对事务的请求做出响应。持久资源管理器存储了足够的信息,可允许在它所管理的资源上撤消或重做事务的工作。可以使用许多方法来实现此目的;最常采用的两种方法是保存数据版本和保存更改日志。

当应用程序提交事务时,事务管理器会启动两阶段提交协议。事务管理器先向每个已登记的资源管理器询问它是否已准备好提交事务。资源管理器必须准备好提交,即它自身准备好提交或中止事务。

在准备阶段,持久资源管理器会将旧数据和新数据记录到固定存储区中,以便即使系统出现故障,资源管理器也可恢复数据。如果资源管理器准备就绪,就会向事务管理器通知有关它是提交还是中止事务的投票。如果有任何资源管理器报告准备失败,则事务管理器会将回滚命令发送给每个资源管理器,并向应用程序指出提交失败。

在准备就绪后,资源管理器必须等待,直到它在第 2 阶段中从事务管理器获取提交或中止回调为止。通常,整个准备和提交协议不到一秒即可完成。如果发生系统或通信故障,则提交或中止通知可能无法在几分钟或几小时内送达。在此期间,资源管理器将无法确定事务的结果,即不知道事务是已提交还是已中止。当资源管理器不确定事务状态时,它会通过使事务处于锁定状态来保留已修改的数据,从而将这些更改与任何其他事务隔离开。

如果资源管理器发生故障,则除了在发生故障之前已准备或提交的事务之外,其余所有已登记事务都将中止。当持久资源管理器重新启动时,它会通过检索在准备阶段编写的准备信息重新构建资源的已提交状态,并相应地提交或中止这些事务。

总之,两阶段提交协议和资源管理器共同使事务具有了原子性和持久性。

Transaction 类还提供了 EnlistPromotableSinglePhase 方法来登记可提升的单阶段登记 (PSPE)。这使持久资源管理器 (RM) 可承载和“拥有”以后可在需要时升级为由 MSDTC 进行管理的事务。有关此内容的更多信息,请参见使用单阶段提交和可提升的单阶段通知进行优化。

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...