2016-03-21 15 views
1

Ich wurde kürzlich während eines Interviews eine Frage gestellt. Frage ist:Transaktion Rollback für mehrere Datenbanken

Ich habe zwei verschiedene Datenbanken und ich muss Tabellen auf beiden Datenbanken aktualisieren. Wir wollen Datenkonsistenz. Ich aktualisierte Tabelle in der ersten Datenbank, während zweite Datenbank aktualisierend, bekam ich einen Fehler. Also, was kann ich in dieser Situation tun?

Ich dachte, alles in einer Transaktion zu nehmen, und wenn ich eine Ausnahme bekam, dachte ich, dass ich Rollback konnte. Aber sie sagten, weil sie 2 verschiedene Datenbanken haben, ist es nicht möglich, sie in derselben Transaktion zu nehmen. Ich bin mir nicht sicher, ob ich das richtig verstehe, aber ich konnte keine andere Lösung finden.

Jetzt hier, was ich frage.

1) Ist es möglich, zwei Abfragen für zwei verschiedene Datenbanken in einer einzigen Transaktion durchzuführen? Wie ich in einigen Posts gelesen habe, ist es möglich, aber ich konnte nicht sicher sein, nach was sie sagten.

2) Wenn es nicht möglich ist, sie in einer Transaktion zu verwalten, wie kann ich Änderungen in der ersten Datenbank zurücksetzen.

+0

Es ist ein bisschen von einer Müll Frage meiner Meinung nach. Ich würde wahrscheinlich entlang der Linien von ... gehen. Ich würde keine Sitzung festlegen, bis alle Schritte aufgrund dieser Einschränkung abgeschlossen sind. Aus diesem Grund würde ich dann nur db1 zurücksetzen, da sich db2 aufgrund des Fehlers in der update-Anweisung nicht geändert hätte. –

+0

lesen über Datenbank-Links, XA (verteilte Transaktionen). Es ist ein ziemlich weites Thema. – ibre5041

Antwort

0

Ich denke, man kann einen Quer DB-Betrieb in Verfahren tun und wickelt sowohl die UPDATE Anweisung in einem Transaktionsblock wie

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