最近インタビューで質問されました。質問は:複数のデータベースのトランザクションロールバック
2つの異なるデータベースがあり、両方のデータベースのテーブルを更新する必要があります。我々は データ一貫性が欲しいです。最初のデータベースのテーブルを更新しましたが、 2番目のデータベースを更新中にエラーが発生しました。だから私はこの 状況で何ができますか?
私はトランザクションですべてを取ると思っていましたが、例外があればロールバックすることができました。しかし、彼らは2つの異なるデータベースを持っているため、同じトランザクションでそれらを取ることはできません。私は正しく理解しているかどうかはわかりませんが、他の解決策を見つけることができませんでした。
ここで私は何を求めているのですか?
1)単一のトランザクションで2つの異なるデータベースに対して2つのクエリを実行することは可能ですか?私はいくつかの記事で読むことが可能ですが、私は彼らが言った後に確信することができませんでした。
2)トランザクションでそれらを管理できない場合、どのようにして最初のデータベースの変更をロールバックできますか?
のようなトランザクションブロックに
UPDATE
文の両方をラップすることができると思います。私はおそらく行に沿って行くだろう...私はすべての手順がこの制限のために完了するまで、どちらのセッションもコミットしないだろう。このため、私は、db2が更新ステートメントの失敗のために変更されていないので、db1をロールバックするだけです。 –データベースリンク、XA(分散トランザクション)について読んでください。それはかなり広い話題です。 – ibre5041