2010-06-16 178 views

回答

15

是的,自主交易可能是危险的。

考虑你有你的主要交易的情况。它已插入/更新/删除行。如果你在那之后建立一个自治的交易,那么要么

(1)它根本不会查询任何数据。这是'安全'的情况。独立于主事务记录信息可以很有用,以便在不影响主事务的情况下提交它(当您期望主事务回滚时记录错误信息可能很有用)。

(2)它只会查询尚未被主事务更新的数据。这是安全的,但是多余的。自主交易没有意义。

(3)。它将查询由主事务更新的数据。由于你重写了某些东西,然后需要回头看看它是否覆盖它之前的情况,这种设计思路很糟糕。有时候人们认为自主交易仍然会看到主要交易的未经承诺的变化,而不会。它读取数据库的当前已提交状态,以及自治事务中所做的任何更改。有些人(通常尝试自主事务以响应突变的触发错误)不关心数据在尝试读取时的状态,而且这些人根本不应该被允许访问数据库。

(4)。它会尝试更新/删除主事务未更新的数据。再次,这是糟糕的设计。无论主事务是成功还是失败,这些更改都将被提交(或回滚)。更糟糕的是,您有风险问题(5),因为在自主交易中很难确定数据是否由主要交易更新。

(5)。您尝试更新/删除已经由主事务更新的数据,在这种情况下,它会死锁并最终陷入丑陋的混乱中。

+2

+1 Autonmous Transactions的唯一铸铁用例是日志记录/审计。其他一切都是危险的或彻头彻尾的危险。 – APC 2010-06-16 11:10:31

10

可以自主交易危险吗?

是的。

如果是,在哪种情况下?

当他们被滥用。例如,用于更改在回滚父事务的其余部分时应该回滚的数据。滥用它们可能会导致数据损坏,因为更改的某些部分已提交,而其他部分则不会。

何时需要自主交易?

无论父事务是提交还是回滚,它们在一个事务的影响必须存活时都是必需的。一个很好的例子是将进程和进程的活动记录到数据库表的过程。