Wir stehen immer wieder vor der Aufgabe, Datenbanken zu synchronisieren.
Dabei haben wir immer wieder das Problem, dass, wenn wir z.B. an eine Tabelle eine neue Spalte anhängen wollen, dies nicht geht, da verschiedene User diese Tabelle mit einem “IDLE in transaction” (nach einem Select-Statement) blockieren.
Ich kann zwar die ProcID’s ermitteln und könnte diese Prozesse abschiessen, allerdings rufen danach die Anwender an, dass unsere Software “spinnt” (Ich vermute, dass das killen und das connection-pooling zu diesem problem führen).
Wie kann ich also, unter angabe der ProcID, auf den entsprechenden Cursor ein Rollback/Commit ausführen? Geht das überhaupt?
Nein, das geht nicht. Wäre ja auch noch schöner, wenn der Admin mir meine Verbindung einfach committen kann, obwohl ich bloß die Hälfte der geplanten Änderungen durchgeführt habe.
Also, der Grundgedanke sollte klar sein, oder? Das committen oder zurückrollen von außerhalb ist in der Regel eine schlechte Idee.
Die Anwendung auf so etwas vorzubereiten ist wahrscheinlich (kosten- und programmiertechnisch) intensiver als das Beseitigen des grundsätzlichen Problems.
Ich würde bezüglich der offenen Transaktionen mal in Richtung AutoCommit schauen …