2

我正在通过实现来创建资源管理器IEnlistmentNotification。我正在尝试创建一个耐用的 RM,这给我带来了一些问题。

  1. 每个事务应该有一个IEnlistmentNotification对象还是应该由一个IEnlistmentNotification对象处理所有事务?

    我认为每个事务都需要它自己的,因此它可以为每个事务执行准备/提交/回滚。

  2. 恢复文件如何处理?

    我的假设是事务中发生的一切都将在准备期间写入恢复文件。

    如何区分每笔交易的信息?我认为每个事务都有一个单独的文件,或者单个文件对于每个恢复操作都有某种事务 id。

    当恢复发生时,是否Transaction.Current.TransactionInformation.DistributedIdentifier/LocalIdentifier与崩溃前一样?那么,这些 ID 之一能否用于在恢复期间识别事务。

  3. 恢复如何发生?

    如果我在其中TransactionScope使用了我的资源管理器,并且系统在范围中间崩溃(拔出插头或其他),那么当系统启动备份时如何进行恢复?我假设一些正在运行代码的进程在它的范围内知道系统​​崩溃或什么?在这种情况下,设置了哪些系统/程序/服务来实际处理恢复?

4

1 回答 1

1

我相信我在RavenDB Source Code中找到了所有答案。

  1. 是的,每笔交易都应该有自己的 IEnlistmentNotification。
  2. 是的,您使用“Transaction.TransactionInformation.DistributedIdentifier/LocalIdentifier”来跟踪恢复文件中的事务。
  3. 运行代码的应用程序将检查是否需要恢复,并重新登记拔出插头时未完成的事务。
于 2011-11-09T19:27:04.063 回答