Flashback Data Archives: Das perfekte Gedächtnis der Datenbank
von Heinz-Wilhelm Fabry, ORACLE Deutschland GmbH
Daten werden gespeichert und zum Teil lange aufbewahrt. Mitunter werden die Daten nach ihrer ersten Speicherung geändert, vielleicht sogar mehrfach. Je nach gesetzlicher oder betrieblicher Vorgabe müssen die Veränderungen nachverfolgbar sein. Damit sind zugleich Mechanismen gefordert, die sicherstellen, dass die Folge der Versionen lückenlos ist. Und implizit bedeutet das zusätzlich, dass die Versionen auch vor Löschen und Verändern geschützt sein müssen.
Häufig erfolgt das Versionieren über die Anwendung, mit der die Daten auch erfasst werden, und ist damit durch Umgehen der Anwendung zu unterlaufen. Die Versionierung kann auch durch Trigger erfolgen, was eventuell auf Kosten der Performance geht, weil die Transaktionslast des Systems durch das Abarbeiten der Trigger steigt. Oder die Versionierung erfolgt durch besondere Werkzeuge und ist deshalb mit höheren Kosten und / oder höherer Komplexität verbunden. Neben den genannten Schwächen der jeweiligen Lösung, bleibt bei allen drei Lösungsansätzen zusätzlich die Frage nach dem Schutz vor unerlaubtem Löschen oder Ändern versionierter Daten offen.
Flashback Data Archives lösen diese Frage, denn sie bieten nicht nur einen wirksamen Mechanismus zum Versionieren von Datensätzen, sondern sie schützen diese Versionen auch vor Veränderung und löschen sie schließlich sogar automatisch nach Ablauf ihrer Aufbewahrungsfrist. Dieser letzte Punkt mag auf den ersten Blick weniger wichtig erscheinen, aber Gesetze und Vorschriften beinhalten in der Regel nicht nur strenge Fristen zur Aufbewahrung von Daten, sondern ebenso strenge Fristen zu ihrer Löschung.
In der Oracle-Preisliste finden Sie die Archives als neue Option zur Enterprise Edition der Oracle Database 11g unter dem Namen Total Recall - was übersetzt so viel heißt wie 'das perfekte Gedächtnis'.
Archive anlegen und verwalten
Das Anlegen von Archiven in einer Datenbank setzt voraus, dass das Undo Management dieser Datenbank auf AUTO steht. Zudem müssen Archive immer mindestens einem Tablespace zugeordnet werden. Sie können sich jedoch auch über mehrere Tablespaces erstrecken. Egal ob ein Tablespace oder mehrere Tablespaces: Jedes Tablespace, das Archivdaten aufnehmen soll, muss über Automatic Segment Space Management verwaltet werden. Natürlich sollten die für ein Archiv vorgesehenen Tablespaces auch über ausreichend Speicherplatz verfügen. Ist das nicht der Fall, erhält der Anwender beim Arbeiten auf einer Tabelle, für die das Archivieren eingeschaltet ist, unter Umständen die Fehlermeldung "ORA-55617: Flashback Archive NAME runs out of space and tracking on NAME is suspended", und weitere Änderungsaktionen auf dieser Tabelle werden verhindert.
Archive sind Objekte, die nur mit dem in Oracle Database 11g neuen Privileg FLASHBACK ARCHIVE ADMINISTER anzulegen, zu ändern oder zu löschen sind. Standardmäßig enthält die Rolle DBA dieses Privileg.
Mit folgendem Befehl legen Sie ein Archiv an
Erläuterungsbedürftig ist an dieser Stelle wohl lediglich die RETENTION-Klausel. In ihr wird festgelegt, wie lange die Daten in dem Archiv nicht verändert oder gelöscht werden dürfen. Die Frist kann nicht nur in Jahren (YEAR) angegeben werden, sondern auch in Tagen (DAY) und Monaten (MONTH). Nach Ablauf der angegebenen Frist löscht die Datenbank die Daten in dem Archiv automatisch. Das Löschen erfolgt dabei zeiteffizient durch ein DROP der Partition, in der die archivierten Daten gespeichert sind.
Informationen über angelegte Archive sind zugänglich über die Views DBA_/USER_FLASHBACK_ARCHIVE und DBA_/USER_FLASHBACK_ARCHIVE_TS.
Die Verbindung zwischen einem angelegten Archiv und einer Tabelle oder mehreren Tabellen wird im Rahmen eines CREATE oder ALTER TABLE-Befehls über die Klausel FLASHBACK ARCHIVE hergestellt. Kriterium für die Ablage von Archivdaten unterschiedlicher Tabellen in einem gemeinsamen Archiv ist eine gleiche Aufbewahrungszeit.
Der Anwender, der eine Tabelle mit Archivierung anlegt oder ändert, benötigt für das Archiv, in das geschrieben werden soll, das Privileg FLASHBACK ARCHIVE. Außerdem muß das Archiv bereits existieren.
bzw.
Informationen zu den Tabellen, für die das Archivieren aktiviert ist, sind über die Views DBA/USER_FLASHBACK_ARCHIVE_TABLES zugänglich.
Wird bei den gerade beschriebenen CREATE oder ALTER TABLE-Befehlen der Name des Archivs nicht angegeben, wird in ein sogenanntes Default Flashback Archive archiviert. Dieses muß bereits existieren und kann nur als SYSDBA angelegt, geändert oder gelöscht werden.
Angelegt wird ein Default Flashback Archive mit folgendem Befehl
oder, sofern ein bestehendes Archiv zum Default-Archiv werden soll
Gibt es bereits ein Default-Archiv, verliert dieses automatisch seinen Default-Status, und an seine Stelle tritt das neue Default-Archiv.
Mit ALTER FLASHBACK ARCHIVE-Befehlen können im übrigen einem Archiv weitere Tablespaces hinzugefügt, Quoten und Aufbewahrungszeiten verändert und der Inhalt von Archiven komplett oder teilweise gelöscht werden.
Der Befehl
löscht nicht nur die archivierten Daten, sondern auch die gesamte Struktur des Archivs. Im Zusammenhang mit dem Löschen von Archiv-Daten muß ebenfalls darauf hingewiesen werden, dass das zeitweilige Ausschalten des Archivierens durch den Befehl
nicht nur dazu führt, dass das Archivieren für die genannte Tabelle eingestellt wird, sondern auch dazu, dass sämtliche bis zu diesem Zeitpunkt für die Tabelle archivierten Daten gelöscht werden. Voraussetzung für das erfolgreiche Durchführen dieses ALTER TABLE-Befehls ist deshalb das Privileg FLASHBACK ARCHIVE ADMINISTER. Das bedeutet also, dass mit dem Privileg FLASHBACK ARCHIVE zwar das Archivieren angestoßen werden kann, aber für das Stoppen des Archivierens aus Sicherheitsgründen das weitergehende FLASHBACK ARCHIVE ADMINISTER benötigt wird!
Zugriff auf archivierte Daten
Natürlich können Archive gelesen werden, um auf den Zustand eines Datensatzes zu einem Zeitpunkt in der Vergangenheit zuzugreifen. Allerdings kann dazu nicht jede im Rahmen des Flashback bekannte Abfragevariante verwendet werden, sondern zur Zeit ausschließlich die Abfrage mit der AS OF-Klausel
An dieser Stelle sei darauf hingewiesen, dass eine derartige Abfrage auch zum Recovery versehentlich gelöschter oder geänderter Datensätze einer Tabelle im Rahmen eines INSERT- oder Update-Befehls angewendet werden könnte. Damit wird hier ein Nebeneffekt aus dem Bereich der Hochverfügbarkeit sichtbar, der Archive auszeichnet. Denn im Vergleich zu den bisher bekannten Flashback-Möglichkeiten, die auf noch vorhandene Undo-Informationen angewiesenen sind, stehen Archive durch ihre häufig jahrelange Aufbewahrungszeit deutlich länger für ein Recovery zur Verfügung.
Mechanismen und Strukturen
Beim Anlegen eines Archivs wird im angegebenen Tablespace eine Reihe von Objekten angelegt. Diese Objekte können ausschließlich mit den oben beschriebenen Varianten der Befehle CREATE / ALTER FLASHBACK ARCHIVE bzw. CREATE / ALTER TABLE bearbeitet werden. Der Versuch, mit den bekannten DML-Befehlen (INSERT, UPDATE, DELETE, SELECT) auf die Objekte zuzugreifen, führt zur Fehlermeldung "ORA-55622: DML, ALTER and CREATE UNIQUE INDEX operations are not allowed on table SCHEMANAME.TABELLENNAME".
Das entscheidende Objekt des Archivs ist eine partitionierte und komprimierte Historien-Tabelle mit dem Namen TABELLENBESITZER.SYS_FBA_HIST_n. Sie enthält alle Spalten der Tabelle, für die archiviert wird, sowie weitere Spalten zum Administrieren des Archivs.
Die Historien-Tabelle wird gefüllt mit Daten, die ein eigener Hintergrundprozess namens FBDA (neu in Oracle Database 11g und unschwer als FlashBack Data Archiver zu identifizieren) aus den Undo-Informationen erzeugt, die bei UPDATE- und DELETE-Aktionen entstehen. Ein INSERT erzeugt im übrigen keine Archivdaten, denn der aktuelle Zustand ist hier die einzig existierende Version.
Der FBDA-Prozess arbeitet nicht permanent, sondern asynchron alle 5 Minuten. Sollte dieses Intervall nicht ausreichen, startet er selbständig öfter. Steigt die Last des FBDA so weit, dass er trotz häufigerer Starts die anstehenden Informationen nicht mehr verarbeiten kann, unterstützen ihn Benutzerprozesse bei der Arbeit. Natürlich ist gewährleistet, dass Undo-Informationen so lange nicht überschrieben werden, bis sie für ein eventuell stattfindendes Archivieren verarbeitet sind.
Abschließend sei an dieser Stelle ausdrücklich nochmals auf einen wesentlichen Unterschied zwischen den Möglichkeiten der bekannten UNDO-Mechanismen und denen der Archive hingewiesen: Der normale UNDO-Mechanismus der Datenbank sammelt für alle Veränderungen in der Datenbank UNDO-Informationen und dürfte wegen der Datenmenge, die in einer produktiven Datenbank anfält, in der Regel auf einige Stunden oder maximal Tage begrenzt sein. Durch die Verbindung mit einzelnen Tabellen sind Archive natürlich viel effizienter und können so unbegrenzt, aber eben selektiv Daten vorhalten.
Hinweise
Nicht jede Tabelle kann mit Flashback Data Archives archiviert werden. So ist es beispielsweise nicht möglich, Tabellen mit nested table- oder LONG-Spalten zu archivieren. Auch für external, clustered und - sicherlich logischerweise - temporary tables steht die Funktionalität nicht zur Verfügung.
Eine Tabelle, deren geänderte Sätze archiviert werden, kann nicht mit den Befehlen DROP oder TRUNCATE gelöscht werden. Der Versuch führt zur Fehlermeldung "ORA-55610: Invalid DDL statement on history-tracked table".
Die einzige erlaubte Änderung an der Struktur einer Tabelle, deren geänderte Sätze archiviert werden, ist das Hinzufügen von Spalten im Rahmen des Befehls ALTER TABLE.
Da die Flashback Data Archives neu in Oracle Database 11g sind, ist davon auszugehen, dass ihre Funktionalität in den kommenden Versionen der Datenbank weiter ausgebaut wird.
Zurück zur Community-Seite
|