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