Transactions, was wenn diese nicht beendet wird?



  • Hallo zusammen,

    eine Frage. Ich habe gerade ein Programm geschrieben welches rekursiv meine Datenbank aufräumt. Dazu benutze ich Transactions um im Falle eines Problems zum Beispiel ein Rollback zu senden, ihr kennt das.

    Was ich mich frage ist, zur Zeit habe ich ein kleines Problem und zwar wenn meine Funktion einen bestimmten, ich nenne es mal "umweg" macht, wird die bereits geöffnete Transaction nicht angefasst und das Programm wird beendet.

    Also die Transaction ist offen (BeginTrans()) das Programm beendet sich ohne das ein Commit oder Rollback gesendet wurde. Ist vll. kein guter Stil aber momentan für mich der einzige Weg. Wird die Transaction beim Programmende automatisch beendet? Wenn ja, geschieht dies als Commit oder Rollback, bzw. wie wird diese Transaction beendet?

    LG,
    Julian.



  • Normalerweise wird automatisch ein Rollback gemacht. Je nach verwendeter Datenbank und Connection-Art könnte es bloss sein dass es etwas dauert bis die DB mitbekommt dass der Client-Prozess gestorben ist. D.h. wenn die Transaktion irgendwelche Locks hält *könnte* es u.U. ... schlecht sein.

    Mag auch sein dass es DB Server gibt die die Transaktion 1:1 so stehen lassen wie sie war ("long lived transactions"). Dann müsste es aber Mittel und Wege geben sich auf so eine Transaktion nachträglich wieder draufzuhängen - per Cookie/Namen/ID/sonstwas. Commit darf nicht automatisch gemacht werden, das wäre ja sehr schlimm.


Anmelden zum Antworten