oracle - AUTONOMOUS_TRANSACTION : pros and cons

标签 oracle transactions

自主交易会危险吗?如果是,在哪些情况下?什么时候需要自主交易?

最佳答案

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

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

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

(2) 只会查询主事务没有更新的数据。这是安全的,但也是多余的。自治事务没有意义。

(3).它将查询已被主事务更新的数据。这有点像设计时考虑不周,因为你已经覆盖了一些东西,然后需要在覆盖之前返回看看它是什么。有时人们认为自治事务仍然会看到主事务未提交的更改,而事实并非如此。它读取数据库的当前提交状态,以及在自治事务中所做的任何更改。有些人(经常尝试自主事务以响应突变的触发器错误)在他们尝试读取数据时并不关心数据处于什么状态,而这些人根本不应该被允许访问数据库。

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

(5).您尝试更新/删除主事务已更新的数据,在这种情况下,它将死锁并最终陷入丑陋的困惑。

关于oracle - AUTONOMOUS_TRANSACTION : pros and cons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3050963/

相关文章:

ruby-on-rails - 当 ruby​​ on rails 中存在多对多关系时如何销毁记录?

sql - 简单的 SQL 命令没有正确结束

sql - 散列连接和合并连接 (Oracle RDBMS) 之间有什么区别?

Oracle 开发人员工具 (ODT) 和 Visual Studio 2017 集成

sql - 通过 SQL%BULK_EXCEPTIONS 传播触发的异常

grails - 为什么我的 GORM 对象没有保存到数据库中?

java - 没有可用于当前线程的实际事务的 EntityManager - 无法可靠地处理 'flush' 调用

python - 应用引擎 : Maintaining DataStore Consistency When Creating Records

Firebase 如何以原子方式防止重复条目

java - Spring Transaction - 当一个数据库更新失败时自动回滚以前的数据库更新