【问题标题】:transaction rollback for multiple databases多个数据库的事务回滚
【发布时间】:2016-03-21 12:46:57
【问题描述】:

我最近在一次采访中被问到一个问题。问题是:

我有两个不同的数据库,我需要更新两个数据库上的表。我们 想要数据一致性。我更新了第一个数据库中的表,然后在 更新第二个数据库出现错误。那么我能在这做什么 情况?

我想把所有的东西都放在一个事务中,如果我遇到异常,我坚持我可以回滚。但他们说,由于有 2 个不同的数据库,不可能将它们放在同一个事务中。我不确定我是否理解正确,但我找不到其他解决方案。

现在我要问的是什么。

1) 是否可以在一个事务中对两个不同的数据库进行两次查询?正如我在一些帖子中所读到的那样,这是可能的,但在他们所说的之后我无法确定。

2) 如果无法在事务中管理它们,我该如何回滚第一个数据库中的更改。

【问题讨论】:

  • 在我看来,这是一个有点垃圾的问题。我可能会遵循......由于这个限制,在所有步骤都完成之前,我不会提交任何一个会话。出于这个原因,我将回滚 db1,因为 db2 不会由于更新语句中的失败而改变。
  • 了解数据库链接、XA(分布式事务)。这是一个相当广泛的话题。

标签: database oracle distributed-database data-consistency


【解决方案1】:

我认为您可以在过程中执行跨数据库操作,并将UPDATE 语句包装在一个事务块中,例如

create procedure usp_update
as
begin
begin trans
update table1 set col1=value where col2=value;
update db2..table1 set col1=value where col2=value; //cross DB update
commit;
if(error)
rollback;
end

【讨论】:

  • 如何处理数据库连接?
猜你喜欢
  • 1970-01-01
  • 2015-08-27
  • 2020-06-05
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 2012-09-03
  • 2022-01-23
  • 2016-08-10
相关资源
最近更新 更多