3

我有一个连接,它对 Oracle 数据库的两个不同模式中的对象执行 DML。我完成了一个涉及 in 对象的事务schema A,然后开始第二个事务来处理schema B. 如果在处理第二个事务时发生任何错误,我想回滚两个事务的更改。那可能吗?

4

2 回答 2

2

如果您希望同时提交或回滚对两个模式所做的更改,则需要使用单个事务。一旦提交了第一个事务,如果第二个事务失败,则无法将其回滚(当然,您可以使用闪回技术,但涉及更多)。但是,如果您对在两个模式上所做的工作使用单个事务,您将获得您希望所有更改都以原子方式提交或回滚的行为。

于 2012-08-16T19:28:31.620 回答
1

设置您的Connection,使其不会自动提交(默认情况下),例如:

conn.setAutoCommit(false);

然后您可以针对第一个模式运行 DML,并使用相同的连接对象针对第二个模式运行您的 DML。如果出现故障,则将所有内容回滚,例如:

conn.rollback();

否则,如果一切成功,则提交:

conn.commit(); 
于 2012-08-16T20:26:02.207 回答