TransactionScope:发生崩溃时,使用分布式事务进行幻影交易是否有风险?

问题描述 投票:1回答:2

我正在SQL Server和PostgreSQL的TransactionScope类中使用分布式事务。

我担心潜在的崩溃,如果在提交整个分布式事务时发生了崩溃,我想知道是否存在关于PostgreSQL或SQL Server的潜在准备事务并被卡住?如果是这种情况,如何避免这种情况?

[编辑1]

我也强烈建议您阅读下面article下面的评论。

我引用:

[...]如果它是在Linux上运行的Oracle数据库?还是在云上运行的RavenDB?在这两种情况下,都必须使用代理。

[...]您必须去手动解决这些问题,因为由于此问题,您已永久锁定了事务。

[编辑2]TransactionScope添加更多信息:TransactionScope

sql-server postgresql .net-core transactionscope distributed-transactions
2个回答
2
投票

我不能代表SQL Server,但是在Postgres中,可以的。

理论上,事务管理器(控制分布式事务的软件)负责清理它们。

[如果交易管理器未正确清理(例如,崩溃后),则需要手动进行清理。

您可以使用系统视图https://www.codeproject.com/Articles/690136/All-About-TransactionScope来监视“准备的交易”。

您可以查询该视图并检查交易的期限。如果该年龄超过某个阈值(适合您的环境),则可以使用pg_prepared_xacts

手动终止它们

2
投票

是的,有可能-但由于公开交易将被回滚,这是极不可能的。

System.Transaction依赖于Windows集成事务代理,该代理实现了3期提交。您的系统必须在非常特定的时间内崩溃以解决问题(这会导致损坏的Transaciotn,可以在tx管理器ui中手动回滚)。并使用多个资源(即2个数据库连接),否则仅包装一个本地资源事务。

某些系统使用5相提交协议的原因(因此有可能出现问题),但是它已经非常可靠了。请注意,除非您只谈论一种事务资源,否则将tx写入永久日志。

© www.soinside.com 2019 - 2024. All rights reserved.