Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Hilfe bei der Fehlerbehebung: Implizites Löschen von Childdatensätzen in Oracle (https://www.delphipraxis.net/214873-hilfe-bei-der-fehlerbehebung-implizites-loeschen-von-childdatensaetzen-oracle.html)

horstmeyer 27. Mär 2024 07:32

Datenbank: Oracle • Version: 11g • Zugriff über: DevartOracleDirect

Hilfe bei der Fehlerbehebung: Implizites Löschen von Childdatensätzen in Oracle
 
Liebe Forenmitglieder,

ich stehe vor einem Problem, bei dem in meiner Oracle-Datenbank anscheinend Childdatensätze implizit gelöscht werden, während die Transaktionen nicht ordnungsgemäß abgeschlossen werden. Der Parentdatensatz bleibt intakt, aber die zugehörigen Childdatensätze verschwinden möglicherweise aufgrund eines Rollbacks oder ähnlicher Probleme.

Ich habe bereits verschiedene Ansätze ausprobiert, um den Fehler zu finden und zu beheben, aber bisher ohne Erfolg. Daher wende ich mich an die Community, um Rat und mögliche Lösungsansätze zu erhalten.

Hier sind einige Details zum Problem:

- Die Childdatensätze werden anscheinend irgendwo zwischen dem Beginn und dem Abschluss einer Transaktion gelöscht.
- Die Integritätsbeziehungen zwischen den Parent- und Childdatensätzen scheinen korrekt eingerichtet zu sein.
- Es gibt keine expliziten Löschbefehle in meinem Anwendungscode, die das Löschen der Childdatensätze erklären könnten.
- Ich vermute, dass ein Rollback oder ein ähnliches Ereignis dazu führt, dass die Änderungen an den Childdatensätzen rückgängig gemacht werden.

Meine Frage an die Community lautet daher: Habt ihr Ideen oder Vorschläge, wie ich diesen Fehler finden und beheben kann? Gibt es bestimmte Tools, Techniken oder Überwachungsmethoden in Oracle, die mir dabei helfen könnten?

Ich wäre sehr dankbar für jede Hilfe oder Anregung, die ihr mir geben könntet.

Vielen Dank im Voraus!

Horst

peterbelow 27. Mär 2024 13:20

AW: Hilfe bei der Fehlerbehebung: Implizites Löschen von Childdatensätzen in Oracle
 
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ß...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz