Frage zu Sicherung von verknüpften Datensätzen mit "delete cascade" in Oracle

hmeyer

Benutzer
Beiträge
8
Hallo zusammen,

ich stehe vor einer Herausforderung und benötige eure Hilfe. Ich arbeite mit Oracle-Datenbanken und habe Tabellen, die "delete cascade" verwenden, um verknüpfte Datensätze zu löschen. Das bedeutet, dass beim Löschen eines Datensatzes in der Haupttabelle auch alle verknüpften Datensätze in anderen Tabellen gelöscht werden.

Meine Frage ist: Gibt es eine Möglichkeit, nicht nur den ursprünglichen Datensatz, sondern auch automatisch alle verknüpften Datensätze zu sichern? Das Ziel ist es, ein System zu haben, das bei einem versehentlichen Löschen in der Lage ist, alle betroffenen Datensätze wiederherzustellen, ohne jedes Mal eine vollständige Sicherung der gesamten Datenbank durchführen zu müssen. Unsere Datenbank ist sehr groß, und das Sicherungsverfahren dauert Stunden, was unpraktisch ist.

Kennt jemand von euch ein Tool, eine Funktion oder eine bewährte Methode, um dieses Problem anzugehen, ohne dass jedes Mal eine vollständige Sicherung der gesamten Datenbank erforderlich ist? Ich wäre sehr dankbar für eure Hilfe, Ratschläge oder Erfahrungen.

Vielen Dank im Voraus für eure Unterstützung.

Viele Grüße,
Horst
 
Werbung:
Danke für die Rückmeldung. Ich entschuldige mich für das Missverständnis. Das Markieren von Datensätzen als gelöscht ist in meinem Fall keine geeignete Lösung, da dies nicht dazu führt, dass die Datenbank tatsächlich kleiner wird. Da ich beabsichtige, veraltete Datensätze aus dem System zu entfernen und die Tabellen zu verkleinern, muss ich die Datensätze tatsächlich löschen.

Leider ist mir kein spezifisches Tool bekannt, das Datensätze, die durch `delete cascade` gelöscht werden, vorher automatisch sichert.
 
Wenn du diese Daten sichern möchtest wird statt der DB das Backup immer größer und fallen dort bei Zeiten auch heraus.

Wenn die Daten "unbegrenzt" aufgewahrt werden sollten braucht es irgendwo speicher.
Man kann z.B. die Daten, die gelöscht werden, vorher extern loggen.

Oracle kennt Flashback, mit dem die Daten zurückgeholt werden können, was aber auch wieder speicher braucht.

Egal ob per Flashback oder Markieren oder loggen kann man das ganze ja auch Zeitlich versetzt machen. D.h. es wird logisch gelöscht und physisch nach einer gewissen Rentention Zeit endgültig entfernt. Wenn diese Rentention Zeit zu hoch für den Speicherbedarf ist passen die Anforderungen halt nicht.
 
Das versehentlich löschen von Datensätzen ist m.e. das größte Problem von delete cascade.
Der Komfort rechtfertigt kaum das Risiko.
Du könntest dir eine eigene SP oder Package schreiben, um Löschen plus Kopie zu erledigen.
Das könnte sogar genetisch an den constraints entlang funktionieren.
Die Operation könnte zuerst die Daten serialisieren, vlt direkt in Insert Statements oder per dblink in eine andere DB, dann wirklich löschen.
 
Werbung:
Erstmal zum Verständnis: Pflegst du oder ihr die Datenbank selber oder ist das von einer Anwendung vorgegeben?

Ich finde das mit dem Markieren auch erstmal besser. Um die Daten dann wirklich zu entfernen könnte man eine Prozedur schreiben die sie erst in eine Art Archiv-DB schreibt und dann löscht. Auch alle zugehörigen Datensätze können damit ermittelt und weg geschrieben werden. Dann kann DELETE entweder erst in den Untertabellen, und dann in den Haupttabellen statt finden (eventuell aufwendiger, aber überschaubarer Vorgang) oder du machst dann ein DELETE CASCADE.

Die Prozedur muss nicht sehr oft laufen und kann bei weniger Auslastung gefahren werden. Man kann das ganze natürlich auch live machen und einen Trigger schreiben, aber ich sehe wirklich keinen Grund sowas nicht schubweise zu erledigen, wenn der Zweck nur die Reduzierung von Daten ist.

Die Archiv-DB sichert man dann natürlich auch und es fallen eventuell mehr Informationen an, die man behalten möchte. Aber man kann das schön trennen und auch getrennt sichern. Man kann das sogar auf einen günstigen, langsammen Server oder Storage auslagern, ganz nach Bedarf.
 
Zurück
Oben