跨越数据库中多个模式的事务

时间:2012-08-16 19:12:45

标签: java oracle

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

2 个答案:

答案 0 :(得分:2)

如果要将对两个架构所做的更改一起提交或回滚,则需要使用单个事务。提交第一个事务后,如果第二个事务失败,则无法将其回滚(好吧,可能,您可以使用闪回技术,但它会更多地涉及方式)。但是,如果您在两个模式上使用单个事务进行工作,那么您将获得所需的行为,即所有更改都将以原子方式提交或回滚。

答案 1 :(得分:1)

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

conn.setAutoCommit(false);

然后,您可以针对第一个架构运行DML,并使用相同的连接对象,针对第二个架构运行DML。如果出现问题,请回滚所有内容,例如:

conn.rollback();

否则,如果一切顺利,请提交:

conn.commit();