AW: Hilfe bei der Fehlerbehebung: Implizites Löschen von Childdatensätzen in Oracle
27. Mär 2024, 14:20
Wie manifestiert sich das Problem, wie erkennst Du es? Wenn Programm A sich innerhalb einer offenen Transaktion befindet, die Datensätze angelegt hat, kann Program B, welches eine andere Session verwendet, diese nicht sehen, da zwischen sessions nur datensätze sichtbar sind, die committed wurden (Stichwort transaction isolation). Das gilt normalerweise auch zwischen verschiedenen Transaktions innerhalb einer Session, da kann man das aber anpassen. Die Komponente der verwendeten client library, die eine Session (oder connection) repräsentiert hat dazu normalerweise eine Eigenschaft (TransactionIsolation o. Ä.).
Wenn eine Session abgebrochen oder anderweitig geschlossen wird werden offene Transaktions normalerweise automatisch geschlossen, entweder durch die client library (da kann man dann normalerweise wählen ob per commit oder rollback), oder durch den Server (immer rollback). Das bei einem rollback innerhalb der Transaktion angelegte Datensätze verschwinden ist normal und erwartet, wenn aber Datensätze verschwinden, die schon vor der Transaktion existierten, ist das definitiv nicht normal.
Hast Du Zugriff auf den Datenbank-Server? Oracle produziert für praktisch jede Aktivität Einträge in Logdateien, auf die aber meist nur Admins Zugriff haben. Die Logs sind normalerweise die beste Quelle für die Suche nach obskuren Fehlern. Vielleicht bietet aber auch die client library, die Du verwendest, eine Option, den Datenverkehr deiner Anwendung mit dem Server zu protokollieren. Das wäre wesentlich einfacher zu durchsuchen; die Server Logs sind oft monströs groß...
Peter Below
|