2016-03-21 21 views
1

最近インタビューで質問されました。質問は:複数のデータベースのトランザクションロールバック

2つの異なるデータベースがあり、両方のデータベースのテーブルを更新する必要があります。我々は データ一貫性が欲しいです。最初のデータベースのテーブルを更新しましたが、 2番目のデータベースを更新中にエラーが発生しました。だから私はこの 状況で何ができますか?

私はトランザクションですべてを取ると思っていましたが、例外があればロールバックすることができました。しかし、彼らは2つの異なるデータベースを持っているため、同じトランザクションでそれらを取ることはできません。私は正しく理解しているかどうかはわかりませんが、他の解決策を見つけることができませんでした。

ここで私は何を求めているのですか?

1)単一のトランザクションで2つの異なるデータベースに対して2つのクエリを実行することは可能ですか?私はいくつかの記事で読むことが可能ですが、私は彼らが言った後に確信することができませんでした。

2)トランザクションでそれらを管理できない場合、どのようにして最初のデータベースの変更をロールバックできますか?

+0

のようなトランザクションブロックにUPDATE文の両方をラップすることができると思います。私はおそらく行に沿って行くだろう...私はすべての手順がこの制限のために完了するまで、どちらのセッションもコミットしないだろう。このため、私は、db2が更新ステートメントの失敗のために変更されていないので、db1をロールバックするだけです。 –

+0

データベースリンク、XA(分散トランザクション)について読んでください。それはかなり広い話題です。 – ibre5041

答えて

0

は、私はあなたの手順でクロスDBの操作を行うと、それは私の意見ではごみ問題のビットです

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 
関連する問題