我有一个连接,它在Oracle数据库的两个不同模式中的对象上执行DML。我完成了涉及schema A
中对象的事务,然后启动第二个事务来处理schema B
中的对象。如果我在第二个事务中工作时发生任何错误,我想回滚两个事务的更改。这可能吗?
答案 0 :(得分:2)
如果要将对两个架构所做的更改一起提交或回滚,则需要使用单个事务。提交第一个事务后,如果第二个事务失败,则无法将其回滚(好吧,可能,您可以使用闪回技术,但它会更多地涉及方式)。但是,如果您在两个模式上使用单个事务进行工作,那么您将获得所需的行为,即所有更改都将以原子方式提交或回滚。
答案 1 :(得分:1)
设置Connection
,使其不会自动提交(默认情况下会自动提交),例如:
conn.setAutoCommit(false);
然后,您可以针对第一个架构运行DML,并使用相同的连接对象,针对第二个架构运行DML。如果出现问题,请回滚所有内容,例如:
conn.rollback();
否则,如果一切顺利,请提交:
conn.commit();