数据库镜像和跨数据库事务

网友投稿 414 2023-11-26

跨数据库事务和分布式事务均不支持数据库镜像。这是因为以下原因无法保证事务的原子性/完整性:

数据库镜像和跨数据库事务

对于跨数据库事务:故障转移后,镜像数据库位于其他服务器实例中,并且通常会位于独立于非镜像数据库的数据库中。即使是在相同的两个伙伴之间镜像两个数据库,仍不能保证这两个数据库会同时进行故障转移。

对于分布式事务:故障转移后,新主体服务器无法连接到前一个使用相同资源 ID 的主体服务器的分布式事务处理协调器。因此,新主体服务器无法获取事务状态。

以下示例说明了如何出现逻辑上的不一致。在此示例中,应用程序使用跨数据库事务插入两行数据:将其中一行插入镜像数据库 A 中的表,将另一行插入另一个数据库 B 中的表。数据库 A 在具有自动故障转移功能的高安全性模式下进行镜像。提交事务时,数据库 A 不可用,镜像会话将故障自动转移到数据库 A 的镜像数据库。

故障转移之后,跨数据库事务可能会在数据库 B 上成功提交,但不可能会在故障转移的数据库中成功提交。如果在发生故障之前,数据库 A 的原始主体服务器未能将跨数据库事务的日志发送到镜像服务器,则可能会出现这种情况。故障转移之后,该事务将不存在于新的主体服务器上。数据库 A 和数据库 B 出现不一致,因为在数据库 B 中插入的数据保持完好无损,而在数据库 A 中插入的数据已经丢失。

使用 MS DTC 事务时可能会出现类似的情况。例如,故障转移后,新主体将访问 MS DTC。但是 MS DTC 不能识别新的主体服务器,因而会终止被认为已在其他数据库中提交了的、所有“准备提交”的事务。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub-/16436858/viewspace-494024/,如需转载,请注明出处,否则将追究法律责任。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SQL中UNION关键字怎么用
下一篇:MySQL数据库基础知识点有哪些
相关文章

 发表评论

暂时没有评论,来抢沙发吧~