Logo Oracle Deutschland   DBA Community  -  Oktober 2012
Die Fast / Flashback Recovery Area (FRA)
von Sebastian Solbach, ORACLE Deutschland B.V. & Co. KG

In der Vergangenheit waren Informationen zur Fast Recovery Area (kurz FRA) bzw. Flashback Recovery Area, wie die FRA for 11gR2 benannt wurde, immer mal wieder in den einzelnen DBA Community Tipps enthalten, wenn dies gerade zum Thema passte oder für den Tipp relevant waren. Aus aktuellem Anlass habe ich mich deswegen entschlossen, die Informationen zur FRA einmal in einem Artikel zu bündeln, damit man sofort eine Übersicht erhält und die automatischen Mechanismen innerhalb der FRA versteht.

Wann verwendet eine Datenbank die FRA?

Ob eine Datenbank die FRA für archivierte Redo- und Flashback-Logs verwendet (falls Archivierung und Flashback der Datenbank aktiviert wurde) ist an folgenden Initialisierungsparametern der Datenbank zu erkennen:
SQL> show parameter db_recovery

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +FRA
db_recovery_file_dest_size           big integer 12G
Der Parameter DB_RECOVERY_FILE_DEST gibt dabei den Ort für die Speicherung der Archive-Logs und Flashback-Logs an, während DB_RECOVERY_FILE_DEST_SIZE die Größe definiert, die die Datenbank für die Speicherung aller Dateien in der FRA vorsieht. Der hier angegebene Wert muss nicht dem zu Verfügung stehenden Storage entsprechen und ist im Normalfall, wenn der Speicherort der FRA nur für eine Datenbank verwendet wird, ca. 90% des zur Verfügung stehenden physikalischen Speicherplatzes. Näheres zum benötigten Speicherplatz finden Sie weiter unten. Setzt man diese Parameter nachträglich, muss DB_RECOVERY_FILE_DEST_SIZE vor DB_RECOVERY_FILE_DEST spezifiziert werden, da es ansonsten zu einem Fehler kommen kann.

Lässt man alle anderen Parameter auf dem Default Wert (insbesondere LOG_ARCHIVE_DEST_N), verwendet die Datenbank die FRA. Dies geschieht implizit dadurch, dass der LOG_ARCHIVE_DEST_10 Parameter auf "location=USE_DB_RECOVERY_FILE_DEST" gesetzt ist, auch wenn dieses nicht mit dem Befehl "show parameter" ersichtlich ist. Möchte man diesen explizit setzen oder die FRA in einer anderen LOG_ARCHIVE_DEST_N verwenden, muss mit dem "location=USE_DB_RECOVERY_FILE_DEST" gearbeitet werden. Gibt man hingegen die Diskgruppe bzw. das Verzeichnis der FRA Lokation an, greifen die automatischen Mechanismen der FRA nicht!

Wie die FRA z.B. mit der LOG_ARCHIVE_DEST_1 Lokation verwendet wird, sieht man bei der Konfiguration des Data Guard Brokers, da dieser die FRA explizit setzt:
SQL> show parameter log_archive

NAME                       TYPE        VALUE
-------------------------- ----------- ------------------------------
...
log_archive_dest_1         string      location=USE_DB_RECOVERY_FILE_DEST, valid_for=(ALL_LOGFILES,ALL_ROLES)
...
Die Verwendung der FRA für Backup Dateien ist im Controlfile der Datenbank hinterlegt. Über die Einstellungen im Recovery Manager (RMAN) können diese angepasst werden. Die rot markierten Befehle haben dabei direkt oder indirekt einen Einfluss auf die FRA:
RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name BUVMRAC are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO COMPRESSED BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK MAXOPENFILES 1;
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+INFRA/snapcf_buvmrac.f';
Steht "DEFAULT DEVICE TYPE" einfach nur auf "DISK" (der Default), verwendet RMAN bei einem "backup database" ohne Angaben automatisch die FRA als Ziel für die Backup Dateien. "RETENTION POLICY" und "ARCHIVELOG DELETION POLICY" haben Einfluss auf das automatische Housekeeping innerhalb der FRA. (Siehe auch
"Wie löscht die Datenbank in der FRA?").

Was speichert die Datenbank in der FRA?

Wurde die FRA bereits beim Anlegen der Datenbank angegeben, legt die Datenbank 2 Arten von Dateien in der FRA ab:
  1. Permanente Dateien
  2. Hierzu zählen eine Kopie des Controlfiles und jeweils ein Member der Redo-Log Gruppen.
  3. Kurzlebige Dateien
  4. Dies beinhaltet die Backup Dateien, Image Kopien, Flashback- und Redo-Logs der Datenbank (falls aktiviert).
Das Ganze passiert mit dem Hintergedanken, dass in der FRA alle relevanten Datenbank Dateien vorhanden sein sollen, die für ein vollständiges Recovery benötigt werden.

Wie groß sollte die FRA sein?

Je größer die FRA ist, desto mehr Möglichkeiten bieten sich für die Datenbank. Nicht nur, dass über größere Zeiten ein Flashback der Datenbank möglich ist, auch Recovery Szenarien gestalten sich dadurch einfacher und schneller (es muss nicht separat auf z.B. Tape zugegriffen werden). Letztendlich gibt es aber 3 Größen, die berücksichtigt werden sollten, wenn man über die Größe der FRA spricht:
  1. DB_RECOVERY_FILE_DEST
  2. Größe des physikalischen Speicherplatzes für die FRA
  3. Anzahl der Datenbanken, die in die FRA sichern
Für die Berechnung der Größe der FRA (also DB_RECOVERY_FILE_DEST) gibt es in
"What is a Flash Recovery Area and how to configure it ? (Doc ID 305648.1)" eine ziemlich genaue Angabe:
Disk Quota =
Size of a copy of database +
Size of an incremental backup +
Size of (n+1) days of archived redo logs +
Size of (y+1) days of foreign archived redo logs (for logical standby) +
Size of control file +
Size of an online redo log member * number of log groups +
Size of flashback logs (based on DB_FLASHBACK_RETENTION_TARGET value)

Where n is the interval in days between incremental updates and y is the delay in applying 
the foreign archived redo logs on a logical standby database.
Allerdings geht diese Berechnungsformel von der empfohlenen Backup Strategie von Oracle aus. Diese Strategie sieht eine Image Kopie der Datenbank für ein möglichst schnelles Recovery vor. Hat man eine andere Vorstellung über das Backup und das Recovery, wie z.B. die Möglichkeit, innerhalb eines gewissen Recovery Window (z.B. innerhalb von 7 Tagen) jeden möglichen Zeitpunkt aus einem Backup wiederherstellen zu können, so können sich die Anforderungen an die FRA schnell von den oben genannten Vorgaben unterscheiden. In diesem Fall müssten nämlich alleine für das Backup zwei Full Backups (eines von vor 7 Tagen und gegebenenfalls ein aktuelles) plus mehrere Inkrementelle Backups gespeichert werden. Verwendet man komprimierte Backups, sieht es noch einmal anders aus. Deswegen kann Oracle nur eine Empfehlung für die Oracle Recommended Backup Strategie geben, alle anderen Szenarien müssen Sie selber durchrechnen. Sie bekommen aber durch diese Berechnungsformel zumindest ein Gespür dafür, wie groß die FRA sein sollte. Einen guten Hinweis auf die FRA Größe geben auch die Engineered Systems von Oracle, wie die Oracle Database Appliance, in der die komplette Größe der FRA dem 1,5fachen des vorhergesehen Platzes für Datenbanken entspricht.

Wie oben schon erwähnt, sollte die FRA niemals 90% des physikalischen Speicherplatzes überschreiten, sodass auf für Notfälle die Option besteht, DB_RECOVERY_FILE_DEST kurzfristig zu erhöhen.

Anmerkungen:
  1. Der theoretische maximale Wert für DB_RECOVERY_FILE_DEST ist übrigens 17179869182G.
  2. Verwendet man den Speicherort der FRA (wie übrigens auch in den Best Practices zu ASM vorgesehen) für mehrere Datenbanken, sollte die Summe aller DB_RECOVERY_FILE_DEST_SIZE nicht 90% des physikalischen Speicherplatzes überschreiten.
  3. In die Berechnung der FRA fließen nur OMF Dateien ein. Wurde z.B. das Controlfile oder das Online Redo-Log Member einfach selber in der FRA angelegt (ohne OMF), fließt dieses nicht in die Berechnung der FRA ein. Dies merkt man insbesondere später beim Monitoring, da in der View kein Wert für den Speicherbedarf der Dateien angegeben ist.

Was sollte bezüglich des Speicherortes der FRA berücksichtigt werden?

Berücksichtigt man, dass es mit Hilfe der FRA möglich sein sollte, die Datenbank vollständig und ohne Datenverlust wieder herzustellen, empfiehlt es sich, die FRA auf physikalisch getrennten Platten zum Datenbereich zu legen. Wenn nicht sogar auf einen komplett anderen Storage. Verwenden mehrere Datenbanken den FRA Mechanismus, dann ist es durchaus empfohlen, dass alle Datenbanken dieselbe FRA verwenden - unter Berücksichtigung des maximal zur Verfügung stehenden Speicherplatzes. Man sollte immer genügend Platz in der FRA haben, denn ist die FRA voll und es existieren keine Datien, die die Datenbank als obsolet erkennt, wartet die Datenbank, bis wieder genügend Platz zur Verfügung steht.

Wie löscht die Datenbank in der FRA?

Die Datenbank löscht in der FRA grundsätzlich alle Dateien, die nicht mehr zwingend benötigt werden, bzw. als obsolet markiert sind. Die Prozesse der Datenbank gehen dabei nach einem einfachen Mechanismus vor, und löschen alle als obsolet gekennzeichneten Dateien in chronologischer Reihenfolge. Allerdings löscht die Datenbank nicht sofort, wenn eine Datei als obsolet markiert wurde, sondern erst wenn die FRA (DB_RECOVERY_FILE_DEST_SIZE) einen gewissen Grenzwert überschritten hat - und dann auch nur so viele Dateien, dass der FRA Füllgrad wieder unter diesen Schwellenwert fällt.

Wann aber werden die unterschiedlichen Dateitypen als obsolet gekennzeichnet?
  1. Permanente Dateien, wie Online Redo-Logs und Controlfiles werden niemals als obsolet gekennzeichnet.
  2. Flashback-Logs sind immer sofort als "obsolet" gekennzeichnet, aus diesem Grund ist auch die Zeit für ein Flashback der Datenbank (DB_FLASHBACK_RETENTION_TIME) niemals garantiert.
    Ausnahme: Die Existenz eines garantieren Rücksetzpunktes (guaranteed Restore Point)!. Dies führt dazu, dass die Flashback-Logs nicht als obsolet markiert werden, bis dieser Rücksetzpunkt gelöscht wurde.
  3. Den Zeitpunkt, wann Backups, Compressed Backup Sets oder Image Kopien der Datenbank obsolet werden, bestimmt die RETENTION POLICY im RMAN. So kann dies abhängig von verfügbaren Backups auf Platte sein (RETENTION POLICY TO REDUNDANCY 2 => 2 Backups müssen immer auf Platte vorhanden sein) oder ein gewisser Zeitraum (RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS => Backups werden erst dann auf obsolet gesetzt, wenn sie nicht mehr für ein Restore innerhalb der letzten 7 Tage benötigt werden).
  4. Archive Logs wiederum richten sich nach der ARCHIVELOG DELETION POLICY. Hier kann u.A. definiert werden, wie of diese in einem Backup enthalten sein sollen (BACKUP 2 TIMES) oder ob sie bei Data Guard Umgebungen nach dem SHIPMENT zur Standby oder nach dem APPLY auf der Standby gelöscht werden sollen. Die interessanteste und am meißten Verwirrung stiftende Einstellung ist dabei der Default "NONE". Dieser besagt nämlich nicht, wie vermutet, dass es keine Deletion Policy gibt, sondern dass die Archivierten Redo-Logs solange aufbewahrt werden müssen, wie sie für ein Flashback oder ein Recovery des letzten Backups benötigt werden und mindestens 1x in einem Backup gesichert sein müssen. Diese Einstellung "NONE" führt deshalb häufig dazu, dass die Datenbank auf Grund einer vollen FRA steht.
Interessant ist jetzt noch der Schwellenwert, der das Löschen von freizugebenden Dateien auslöst, da dieser sich im Laufe der Oracle Datenbank Releases verändert hat. So war dieser Wert bei 10g 98% des DB_RECOVERY_AREA_DEST_SIZE Wertes und wurde in 11gR2 auf 85% gesenkt, da es in einigen Grenzfällen bei kurzfristig gesteigertem Redo-Log Aufkommen zu Performance Beeinträchtigungen kam. Allerdings sind 85% bei einer großen FRA durchaus ein nicht zu vernachlässigender Platzverlust (Bei 3 TB FRA entspricht das ca. 500 GB!). Nicht ganz unbedeutend, wenn man mehrere Backups in der FRA vorrätig haben möchte. Dieser Wert kann aber - gerade bei großen FRAs - über einen Event in der Datenbank angepasst werden, allerdings unter Abwägung der oben genannten Performance beeinflussenden Tatsache.
alter system set events '19823 trace name context forever, level 95'; 
Dies würde den Schwellenwert auf 95% setzen.

Wie oben schon erwähnt muss (gerade bei 10g) darauf geachtet werden, dass nicht einfach nur der Speicherort der FRA im RMAN bzw. als ARCHIVE_LOG_DEST_N hinterlegt ist. Folgende Einstellungen würden somit den DB_RECOVERY_FILE_DEST Mechanismus umgehen, obwohl dasselbe Verzeichnis/ASM Diskgruppe verwendet wird:
SQL> show parameter db_recovery
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +FRA
...

SQL> show parameter log_archive_dest_10
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_10                  string      +FRA
Für die Verwendung der ARCHIVE_LOG_DEST sollte (wie oben schon erwähnt) deswegen location=USE_DB_RECOVERY_FILE_DEST verwendet werden.

Ein ähnliches Problem ergibt sich bei RMAN, wenn das Backup des Controlfiles direkt angegeben ist:
RMAN> show all;
...
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '+FRA';
...
Auch hier sollte der Parameter mit "configure controlfile autobackup format for device type disk clear;" auf den Default Wert zurückgestellt werden.

Wie kann man die FRA monitoren?

Der Enterprise Manager zeigt die Auslastung der Fast Recovery Area bereits auf der Homepage der Datenbank an. Ein Klick auf die Prozent-Zahl gibt dann die Konfiguration und die Details der FRA preis:
Fast Recovery Area Auslastung
Auf derselben Seite findet man übrigens auch die korrekte Einstellung für die Archive Log Destination,
Fast Recovery Area Auslastung
so wie die Konfiguration der beiden FRA Parameter:
Fast Recovery Area Auslastung

Aber selbstverständlich kann die FRA auch mit Hilfe der Views V$RECOVERY_FILE_DEST und V$FLASH_RECOVERY_AREA_USAGE via SQL überwacht werden.
SQL> select
NAME as "Speicherort", 
SPACE_LIMIT/1024/1024 as "Maximal (MB)",
SPACE_USED/1024/1024 as "Verwendet (MB)", 
SPACE_RECLAIMABLE/1024/1024 as "Wiederverwendbar (MB)",
NUMBER_OF_FILES as "Anzahl Dateien"
from  V$RECOVERY_FILE_DEST;

Speicherort                    Maximal (MB) Verwendet (MB) Wiederverwendbar (MB) Anzahl Dateien
------------------------------ ------------ -------------- --------------------- --------------
+FRA                                  12288           9637                  4643            215

SQL> select * from v$flash_recovery_area_usage;

FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
CONTROL FILE                        .15                         0               1
REDO LOG                           4.14                         0               9
ARCHIVED LOG                      20.53                     16.85              69
BACKUP PIECE                      37.96                     20.55              16
IMAGE COPY                            0                         0               0
FLASHBACK LOG                     15.63                       .26             120
FOREIGN ARCHIVED LOG                  0                         0               0

7 rows selected.
Als weiterer Mechanismus für das Monitoring der FRA dient das Alert.log. Sollte die FRA zu 85% oder 100% voll sein (exklusive wiederverwendbarem Platz), erscheint folgende Meldung im Alert.log:
2012-06-05 11:10:39.396000 +02:00
Errors in file /opt/oracle/diag/rdbms/buvmrac/buvmrac_1/trace/buvmrac_1_m000_32527.trc:
ORA-19815: WARNING: db_recovery_file_dest_size of 12884901888 bytes is 85.07% used, 
and has 1923088384 remaining bytes available.
************************************************************************
You have following choices to free up space from recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
   then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
   BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
   reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
   system command was used to delete files, then use RMAN CROSSCHECK and
   DELETE EXPIRED commands.
************************************************************************
Details über die hilfreichen Maßnahmen finden sich in How is the space pressure managed in the Flash Recovery Area - An Example. (Doc ID 315098.1).

Nützliche Links und Referenzen

  • What is a Flash Recovery Area and how to configure it? (Doc ID 305648.1)
  • Flash Recovery Area - FAQ (Doc ID 833663.1)
  • Master Note For Oracle Flashback Technologies (Doc ID 1138253.1)
  • How is the space pressure managed in the Flash Recovery Area - An Example. (Doc ID 315098.1)
  • Flash Recovery area - Space management Warning & Alerts (Doc ID 305812.1)
  • Space issue in Flash Recovery Area( FRA ) (Doc ID 829755.1)
  • Zurück zur Community-Seite