我以一种模糊的方式了解常规 ACID 事务是如何工作的。您在数据库上执行一些工作,直到设置了某种提交标志才确认工作。提交部分基于一些基本假设(例如单个磁盘块写入是原子的)。如果发生灾难性错误,您可以在恢复阶段清除未提交的数据。
分布式事务如何工作?在我读过的一些 MS 文档中,您可以以某种方式跨数据库和文件系统(除其他外)执行事务。
这项技术可以(并且可能)用于安装程序,您希望程序完全安装或完全不存在。您只需在安装程序启动时开始事务。接下来,您可以连接到注册表和文件系统,进行定义安装的更改。工作完成后,只需提交,如果由于某种原因安装失败,则回滚。这个神奇的分布式事务协调器会自动为您清理注册表和文件系统。
两个不同的系统怎么可能以这种方式进行交易?在我看来,总是有可能使系统处于不一致的状态,即文件系统已提交其更改而注册表没有。我认为在 MSDTC 中甚至可以通过网络执行事务。
我已经阅读了http://blogs.msdn.com/florinlazar/archive/2004/03/04/84199.aspx,但感觉这只是解释的开始,应该大大扩展第 4 步。
编辑:根据我在http://en.wikipedia.org/wiki/Distributed_transaction上收集的信息,可以通过两阶段提交(http://en.wikipedia.org/wiki/Two-phase_commit)来完成。读完后,我仍然没有 100% 理解方法,步骤之间似乎有很大的错误空间。