News
DBA-Tipp: Langzeitarchivierung mit der Standard Edition (One)

Die Information ist ein schnelllebiges Gut. Jeden Tag werden wir mit hunderten Informationen zugemüllt. Deshalb sind wir bestrebt uns auf das Wesentliche zu konzentrieren und nur substantiell nachhaltige Informationen bereitzustellen.

Icon Unternehmen

Mit der Veröffentlichung der Version 11.2.0.4 seiner Datenbank hat Oracle die Lizenzbestimmungen ein weiteres Mal angepasst und das Feature Flashback Data Archive, auch bekannt als Total Recall, für alle Editionen freigegeben. Damit steht nunmehr auch in der Standard Edition (One) ein Werkzeug zur Langzeitarchivierung innerhalb der Datenbank zur Verfügung.

Flashback Data Archive ermöglicht es, Daten ausgesuchter Tabellen einer Datenbank für eine bestimmte Zeit zu archivieren und erlaubt damit den Zugriff auf Tabelleninhalte in der Vergangenheit.

Im Gegensatz zu den klassischen Flashback Technologien werden dabei keine Flashback Logdateien im Dateisystem bzw. der ASM angelegt, sondern spezielle Objekte in der Datenbank, die die Historie der zu archivierenden Tabellen beinhalten. Für das Anlegen und Verwalten dieser sogenannten Flashback Archives sind die Systemprivilegien FLASHBACK ARCHIVE ADMINISTER und CREATE TABLESPACE erforderlich.

Flashback Data Archive kurz und knapp

Zunächst muss mindestens ein Flashback Archive angelegt werden. Dabei muss angegebenen werden, in welchem primären Tablespace die Archiv-Daten gespeichert werden sollen und welche Vorhaltezeit garantiert werden soll. Die Vorhaltezeit kann in Tagen, Monaten oder Jahren angegeben werden. Im Folgenden wird ein default Flashback Archive mit einer Vorhaltezeit von einem Jahr im Tablespace USERS angelegt. Da keine Quota definiert wird, steht der gesamte freie Platz im Tablespace USERS für das Flashback Archive zur Verfügung:

create flashback archive default "1YEAR"
       tablespace users retention 1 year;

Die Archivierung muss für jede Tabelle einzeln aktiviert werden. Soll nicht das default Archive genutzt werden, muss dieses extra angegeben werden:

alter table stuff flashback archive "1MONTH";

Tabellen, für welche die Archivierung aktiviert wurde, können fortan analog zu Flashback Query mit der Klausel AS OF abgefragt werden:

select * from stuff as of timestamp('2015-06-29 11:00:00');

Vorhandene Indizes kommen bei Abfragen auf archivierte Daten einer Tabelle wie gehabt zum Einsatz.

Die Vorhaltezeit eines Flashback Archive kann auch nachträglich modifiziert werden:

alter flashback archive LASTWEEK modify retention 7 day;

Unabhängig von der definierten Vorhaltezeit kann das Entfernen der Archiv-Daten auch manuell mit oder ohne angepasster Vorhaltezeit erfolgen:

alter flashback archive LASTWEEK purge all;

alter flashback archive LASTWEEK purge
      before timestamp(sysdate - 5);

Darüber hinaus können weitere sekundäre Tablespaces für ein Flashback Archive zur Nutzung hinzugefügt oder entfernt sowie eine Quota pro Tablespace (primär oder sekundär) definiert werden:

alter flashback archive "1YEAR" add tablespace fibu;
alter flashback archive "1YEAR" remove tablespace users;
alter flashback archive "1YEAR" modify tablespace fibu
      quota 1P;

Das Deaktivieren der Archivierung ist auch ohne weiteres möglich:

alter table stuff no flashback archive;

Dabei ist zu beachten, dass sowohl die Archivierung deaktiviert wird als auch sämtliche Archiv-Daten entfernt werden.

Natürlich ist bei der Aktivierung der Archivierung einer Tabelle zu beachten, dass keine DML-Operationen mehr durchgeführt werden können, sobald das zugeordnete Flashback Archive voll ist:

SQL> insert into stuff(id, name) values(42,'The answer.');
insert into stuff(id, name) values(42,'The answer')
            *
ERROR at line 1:
ORA-55617: Flashback Archive "1DAY" runs out of space and tracking on "STUFF" is suspended

SQL>

Das Entfernen einer zu archivierenden Tabelle ist nicht möglich:

SQL> drop table stuff;
drop table stuff
           *
ERROR at line 1:
ORA-55610: Invalid DDL statement on history-tracked table

SQL>

Beim Versuch den Besitzer einer zu archivierenden Tabelle mit DROP USER CASCADE zu entfernen, bricht die Operation mit einem Fehler ab. Von der Archivierung nicht betroffene Objekte werden allerdings gelöscht. In diesen Fällen muss Flashback Archive explizit für jede einzelne zu löschende Tabelle deaktiviert werden.

Schema Evolution

Will man anhand der Archiv-Daten auch DDL-Operationen der betroffenen Tabellen nachvollziehen, muss man sich mit den Archiv-Tabellen auseinandersetzen. Diese werden im Schema des Tabellenbesitzers angelegt und erhalten einen vom System generierten Namen. Die View USER_FLASHBACK_ARCHIVE_TABLES verweist jedoch nur auf die Tabelle, welche die DML-Operationen protokolliert. Mit der in dem Namen enthaltenen Objekt-ID 86755 lassen sich die weiteren Tabellen jedoch einfach ermitteln.

SQL> select owner_name, table_name, flashback_archive_name,
     archive_table_name from dba_flashback_archive_tables;

OWNER  TABLE  FLASHBACK_ARCHIVE  ARCHIVE_TABLE_NAME
-----  -----  -----------------  ------------------
FOO    STUFF  1YEAR              SYS_FBA_HIST_86755

SQL> select table_name from user_tables
     where table_name like 'SYS_FBA_%86755';

TABLE_NAME
------------------------------
SYS_FBA_TCRV_86755
SYS_FBA_DDL_COLMAP_86755
SYS_FBA_HIST_86755

SQL>

Von Interesse ist hier die Tabelle SYS_FBA_DDL_COLMAP_86755. Diese protokolliert sämtliche DDL-Operationen, die auf der Tabelle STUFF ausgeführt werden. Mit Hilfe der Attribute STARTSCN und ENDSCN lassen sich die DDL-Operationen zeitlich einordnen:

SQL> select STARTSCN, ENDSCN, HISTORICAL_COLUMN_NAME,
     TYPE from FOO.SYS_FBA_DDL_COLMAP_86755;

STARTSCN  ENDSCN  HISTORICAL_COLUMN_NAME TYPE
-------- -------- ---------------------- --------------
 3550775  3550850 COLOR                  VARCHAR2(100)
 3546610          ID                     NUMBER
 3546610          NAME                   VARCHAR2(4000)

SQL>

In diesem Beispiel sieht man, dass die Spalte COLOR zum Zeitpunkt der SCN 3550775 zu der Tabelle STUFF hinzugefügt und zum Zeitpunkt der SCN 3550850 wieder entfernt wurde. Damit lassen sich Abfragen der Archiv-Daten unter Einbezug der zwischenzeitlich entfernten Spalte formulieren.

Kritik

Leider weist Flashback Data Archive auch einige Einschränkungen auf:

  • Das Flashback Archive einer Tabelle kann im Nachhinein nicht geändert werden. Dazu muss die Archivierung für die Tabelle deaktiviert und reaktiviert werden, was in Folge zum Verlust der alten Archiv-Daten führt.
  • Der primäre Tablespace für ein Flashback Archive kann nicht entfernt werden.
  • Eine Tabelle mit aktiver Archivierung kann nicht in einen anderen Tablespace verschoben werden.
  • Flashback Archives können nicht in einen anderen Tablespace verschoben werden. Das Entfernen eines Tablespace für ein Flashback Archive hat natürlich auch den Verlust der enthaltenen Archiv-Daten zur Folge.
  • Der Data Pump Export einer zu archivierenden Tabelle enthält nicht die Archiv-Daten, diese müssen also separiert behandelt werden.
  • Flashback Data Archive muss für jede Tabelle einzeln de-/aktiviert werden. Globale Einstellungen für ganze Schemata und neue Tabellen können nicht vorgenommen werden.
  • Das Entfernen eines Flashback Archive erfolgt kommentarlos inklusive Deaktivierung der Archivierung aller betroffenen Tabellen, dies birgt das Risiko versehentlich Archiv-Daten zu löschen.
  • Oracle bietet keine Möglichkeit, die Auslastung der Flashback Archives mit Hilfe entsprechender Views zu überwachen.
  • Es gibt zuweilen Probleme beim Umbenennen von Tabellen-Spalten zu archivierender Tabellen (z.B. Bug 18512658).

Eine weitere Einschränkung weist die Nutzung von Flashback Data Archive mit der Standard Edition (One) auf: Die mit der Version 11.2.0.4 eingeführte Optimierung der Flashback Archives, bei welcher unterschiedliche Kompressions- und Deduplikationstechnologien zum Einsatz kommen, steht nur in der Enterprise Edition mit der Advanced Compression Option zur Verfügung.

Fazit

Oracle hat mit Flashback Data Archive ein interessantes Feature für die Langzeitarchivierung entwickelt und stellt dieses ab Version 11.2.0.4 auch für die Standard Edition (One) zur Verfügung. Allerdings bleibt angesichts der zum Teil gravierenden Einschränkungen noch viel Spielraum für Verbesserungen der Technologie, um seine Flexibilität und damit die Anzahl möglicher Einsatzszenarien zu erhöhen.