Gelöschte Datensätze unter Oracle 8.0

Ich muß gelegentlich mit einem Verwaltungsprogramm arbeiten, daß auf einer Oracle-DB basiert. Wir haben in diesem Programm vor ca. vier Wochen einige Abrechnungen gemacht. Die für diese Abrechnung generierten Datensätze werden in einer Tabelle gespeichert und nach einem bestimmten Zeitraum wieder gelöscht. Nun stellt sich heraus, daß die Abrechnung in anderer Form erstellt werden muss. Ich wollte also die Abrechnungsdaten in eine Excel-Tabelle exportieren um sie von dort weiterbearbeiten zu können - genrell ist das möglich. Weil aber irgend ein „Schlumpf“ den Zeitraum nach dem die Abrechnungssätze gelöscht werden sollen von normalerweise 110 auf 11 Tage reduziert hat, sind die Daten nicht mehr da.

Ich habe unser Softwarehaus gebeten die gelöschten Sätze wieder herzustellen. Mit meinen Datenbanken (SmartWare) ist das kein Problem und auch von anderen Systemen weiss ich, daß als gelöscht gekennzeichnete Datensätze physisch weiterhin vorhanden sind und über eine entsprechende Abfrage wieder aktiviert werden können, solange die DB nicht reorganisiert wurde. Das Softwarehaus behauptet nun das wäre bei Oracle nicht möglich („wenn überhaupt ist das ein Betriebsgeheimnis von denen“).

Nun stellt sich für mich die Frage: Stimmt das oder haben die keine Ahnung? Ich muss gestehen, daß mein Vertrauen in dieses Haus nicht sehr groß ist: Dauernd kriege ich zu hören, daß geht nicht, oder das ist so kompliziert, da müssen wir wieder ein paar tausend Euro berechnen - Mir liegt aktuell ein Angebot von denen vor, wo sie nur für den Austausch von zwei Feldern in einer Liste einen halben Manntag berechnen wollen - bei Smart brauch ich für sowas zwischen 30 Sek. und max. 30 Min. je nach dem wie komplex der Report ist - aber ein halber Tag!. Da fragt man sich schon, kann oracle so viel komplizierter als andere DBs sein oder wollen die uns ver…hintern.

Generell habe ich den Eindruck, daß Oracle furchtbar kompliziert und unflexibel ist, und man für jede Kleinigkeit die man damit machen will, erst mal ein weiteres Programm kaufen muss (hat Oracle z.B. nicht mal einen rudimentären Berichtsgenerator, daß man selbst für simple Listen ein teures Reporting-Tool kaufen muss?) Würde mich mal interessieren was erfahrene DB-Experten dazu zu sagen haben.

So - ist etwas lang geworden aber ihr merkt schon, daß ich mit Oracle sehr unglücklich bin und mich frage, haben wir die falsche DB - oder nur das falsche Softwarehaus.

Vielen Dank für jeden Tipp
Gero

hi!

also zuerst mal: gelöschte daten sind gelöscht; sobald ein commit abgesetzt wurde, kannst du es vergessen … wozu lösche ich daten, wenn ich sie dann wieder benötige? wir helfen uns damit ab, das daten, die zwar lt. kunde „nie wieder“ benötigt werden zumindest in journaltabellen weitergeführt werden, in denen ab der anlage des satzes jede änderung bis zur löschung drinnen steht - braucht zwar platz, rettete aber schon viele „schlümpfe“ … unter oracle gibt’s jetzt auch bereits eine ähnliche funktionalität, die reicht jedoch nur ein paar tage zurück (ich glaube max. 7), um daten zu reproduzieren bzw. um nachzuschauen, wie sahen die daten vor 5 tagen und 8 stunden und 2 minuten aus …

zu deinem softwarehaus:

  • 2 felder im bericht tauschen: hört sich einfach an, nur hab ich schon mal „nur“ zum tausch von 2 feldern in einem bericht beinahe zwei wochen benötigt … es kommt drauf an, ob’s nur ein platztausch ist, ob die felder neu selektiert werden müssen, ob trigger dahinter liegen, ob aufgrund dieses tausches sich das layout des gesamten report ändert, ob es wirklich nur ein bericht ist, oder ob es plötzlich 72 berichte sind (all die sachen waren bei mir der fall) … dazu kommen noch nachträge in der spezifikation, qualitätskontrolle etc. … ich würd’ daumen mal pi 2h verrechnen …

Generell habe ich den Eindruck, daß Oracle furchtbar
kompliziert und unflexibel ist

also, ich find oracle super … :wink:

hat Oracle z.B. nicht mal einen rudimentären
Berichtsgenerator, daß man selbst für simple Listen ein teures
Reporting-Tool kaufen muss?)

oracle discoverer (geschenkt gibt’s natürlich nix) … bzw. kannst auch ein spool machen und die sqls selber zusammenbasteln

noch was: du kannst sogar unter access auf eine oracle-db zugreifen

So - ist etwas lang geworden aber ihr merkt schon, daß ich mit
Oracle sehr unglücklich bin und mich frage, haben wir die
falsche DB - oder nur das falsche Softwarehaus.

es ist _relativ_ einfach: oracle bietet eine datenbank (und natürlich die ganzen produkte rundherum) an, die oracle-produkte sind auf diese datenbank abgestimmt, die datenbank läuft (wenn sie halbwegs professionell aufgesetzt wurde) jahrelang stabil durch, bietet support, zusatzprodukte, education, etc. … und das ganze überaus professionell … das ganze kostet nun mal kohle … puh …

ich würd mal ganz einfach bei anderen softwareanbieter anfragen (machen unsere kunden auch immer, um dann sehr oft auf allen vieren kriechend zurückzukommen, damit wir das verbockte projekt noch umbiegen)

qualität ist nun mal teuer …

eigentlich wollte ich noch weiter ausführen, aber jetzt gönn ich mir erstmal einen guten-morgen-büro-kaffee …

grüße,
tomh

Hi,

Das sollte ein DBA doch wissen (ich bin übrigens keiner)? Die Oracle DB legt meines wissens sogenannte ReDoLogs an mit denen alles rückgängig gemacht werden kann (dazu gibts den Logminer). Wenn allerdings die DB diese nicht archiviert (Datenbank muss im Archivierungsmodus laufen oder so und den muss der DBA eingeschaltet haben) ist nach einiger Zeit (kommt glaub ich auf die eingestellte grösse der ReDoLogs an) wirklich ganz weg.
Davon abgesehen. Die Entscheidung ob Datensätze als gelöscht markiert werden oder physisch gelöscht werden muss die Anwendung und nicht die Datenbank entscheiden. Denn auf der ist beides möglich.
Zum Systemhaus: Entweder es taugt nichts oder was wahrscheinlicher ist (weil oft so ist): Es geht von den falschen Anforderungen aus… Das kann auch am Auftrag liegen (ungenau oder eben an der Qualität gespart)

Gruß
Claudius

hi!

Das sollte ein DBA doch wissen (ich bin übrigens keiner)? Die
Oracle DB legt meines wissens sogenannte ReDoLogs an mit denen
alles rückgängig gemacht werden kann (dazu gibts den
Logminer). Wenn allerdings die DB diese nicht archiviert
(Datenbank muss im Archivierungsmodus laufen oder so und den
muss der DBA eingeschaltet haben) ist nach einiger Zeit (kommt
glaub ich auf die eingestellte grösse der ReDoLogs an)
wirklich ganz weg.

die redo-logs haben aber mit dem wiedereinspielen von gelöschten sätzen eher wenig zu tun (eher mit dem wiederherstellen der datenbank), außer die transaktionen sind noch offen … und wenn - wie beschrieben - nach mehr als 11 tagen die löschung rückgängig gemacht werden soll, würde die größe der redo-logs wohl aus den nähten platzen … (je nachdem, wieviele transaktionen/zeitraum auf der db durchgeführt werden)

Davon abgesehen. Die Entscheidung ob Datensätze als gelöscht
markiert werden oder physisch gelöscht werden muss die
Anwendung und nicht die Datenbank entscheiden. Denn auf der
ist beides möglich.

? es gibt 2 verschiedene delete-befehle unter oracle ?

grüße,
tomh - ebenfalls kein dba

Hi,

die redo-logs haben aber mit dem wiedereinspielen von
gelöschten sätzen eher wenig zu tun (eher mit dem
wiederherstellen der datenbank), außer die transaktionen sind
noch offen …

Du kannst, wenn die Redologs archiviert werden, die Datenbank zu einem beliebigen Zeitpunkt rekonstruieren: man spielt ein Backup ein, z.B. von 1.8., und macht eine Wiederherstellung zum 23.8 um 11:32. Dann exportiert man die betreffenden Tabellen und macht eine vollständige Wiederherstellung (womit der Zustand der restlichen Datenbank aktuell wird, aber die gewünschten Datensätze weg sind). Die Tabellen sind im Dump enthalten, man kann si z.B. in ein anderes Schema importieren und weiternutzen.

und wenn - wie beschrieben - nach mehr als 11
tagen die löschung rückgängig gemacht werden soll, würde die
größe der redo-logs wohl aus den nähten platzen

Nicht, wenn die Redologs archiviert werden.

Gruß

J.
(Halb-DBA :smile:

nochmals hi!

da fällt mir nochwas ein:

gibt’s keine möglichkeit, die abrechnung nochmals zu starten (ab einem bestimmten stichtag z.b.?)? solche anwendungen sollten diese features doch schon enthalten …

grüße,
tomh

hi!

Du kannst, wenn die Redologs archiviert werden, die Datenbank
zu einem beliebigen Zeitpunkt rekonstruieren: man spielt ein
Backup ein, z.B. von 1.8., und macht eine Wiederherstellung
zum 23.8 um 11:32. Dann exportiert man die betreffenden
Tabellen und macht eine vollständige Wiederherstellung (womit
der Zustand der restlichen Datenbank aktuell wird, aber die
gewünschten Datensätze weg sind). Die Tabellen sind im Dump
enthalten, man kann si z.B. in ein anderes Schema importieren
und weiternutzen.

pfff … irgendwie bin ich froh, daß wir journaltabellen verwenden und ich noch nie in die lage kam, eine db rückzusichern … nur, was mir nicht ganz in den kopf will: ich spiel ein backup vom 1.8. ein, und mach eine wiederherstellung zum 23.8. … wo sind die daten, die dazwischen liegen? in den (archivierten) redo-logs? was ist mit den daten, die sich geändert haben bzw. gelöscht wurden (wie in der fragestellung)? mir kommt das in sachen constraint-verletzungen doch etwas spanisch (argentinisch :wink: vor …

grüße,
tomh *immerwenigermitdbazutunhabenwollend-lieberinentwicklungbleibend*

Hi,

und ich noch nie in die lage kam, eine db
rückzusichern

Alles schon mal gehabt - hat die Anwender allerdings ein Kasten Bier gekostet :smile:

… nur, was mir nicht ganz in den kopf will:
ich spiel ein backup vom 1.8. ein, und mach eine
wiederherstellung zum 23.8. … wo sind die daten, die
dazwischen liegen? in den (archivierten) redo-logs?

Genau dort. Die Redologs enthalten binäre Differenzdaten in aufsteigender zeitlicher Reihenfolge, etwa in der Art: Transaktionsnummer 0815: Zeitstempel, DB-Block 4711, Bit 37 wurde von 0 auf 1 geändert, Transaktionsnummer 0816: neuer Zeitstempel, usw. usf.

was ist
mit den daten, die sich geändert haben bzw. gelöscht wurden
(wie in der fragestellung)?

Sie stehen dort drin, und zwar sowohl der alte Wert als auch der neue.

mir kommt das in sachen
constraint-verletzungen doch etwas spanisch (argentinisch :wink:
vor …

Warum? Nur die Dinge, die tatsächlich ausgeführt wurden, landen in die Redologs. Wenn Du von einem konsistenten Zustand ausgehst, kann nur was Konsistentes herauskommen. Ein Commit z.B. steht da auch drin, d.h. Du könntest bis zur Sekunde VOR dem Commit wiederherstellen - oder vor einem Rollback :smile:

Dieses Konzept erst macht Oracle so bombensicher (hmmm, sagen wir stabil - am heutigen Tag sollte man die Wortwahl genau überlegen :smile:. Bei gespiegelten Redologs und Archivierung auf einer anderen Maschine kann eigentlich nichts schiefgehen. Massenspeicherplatz brauchst Du allerdings, aber das ist heute nicht so teuer.

*immerwenigermitdbazutunhabenwollend-lieberinentwicklungbleibend*

Och, die Planung und Durchführung einer geeigneten DB-Administration kann genauso spannend und vielseitig sein - und genau wie bei der Entwicklung ist man damit eigentlich nie fertig.

Gruß

J.

Hi,

? es gibt 2 verschiedene delete-befehle unter oracle ?

Natürlich nicht. Um Daten logisch zu löschen mach ich auch kein delete.

Gruß
Claudius