Oracle Flash Recovery og ORA-19809

Har du støtt på Oracle feilmeldingen ORA-19804, ORA-19809 eller ORA-19815 mange ganger?

Dette skyldes at du har nådd den logiske grensen på «flash_recovery_area» i Oracle-terminologien. Jeg mener dette er en feil i rutinen til programmet som oppretter databasen – database konfigurasjons assistenten dbca og skyldes som regel at du har beholdt standard oppsettet på DB_RECOVERY_FILE_DEST_SIZE som er 2 GB.

Hva er riktig størrelse?

Som regel benytter man et stort område til å lagre arkivfiler og sikkerhetskopi av databasene. Og derfor burde database konfigurasjons assistenten vært mer nøyaktig om hvilke konsekvenser denne feilen får. Konsekvensen er at databasen stopper helt til du enten rydder plass eller endrer størrelsen til noe mer realistisk, for eksempel 90% av den plass du har avsatt for arkivering og sikkerhetskopier av databasen. Har du flere databaser på samme server konkurrerer de muligens også om den samme plassen.

Begynn med å sjekke alert-loggen

Alert loggen er et bra sted å søke i når denne logiske grense er nådd. Det kan da se slik ut:


ORA-19815: WARNING: db_recovery_file_dest_size of 53687091200 bytes is 100.00% used, and has 0 remaining bytes available.
************************************************************************
You have following choices to free up space from flash 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.
************************************************************************
Creating archive destination file : /oradata/flash_recovery_area/PROD/archivelog/2008_09_26/o1_mf_1_10164_0_.arc (189364 blocks)
Fri Sep 26 18:06:36 2008
Errors in file /oracle/admin/PROD/udump/prod_rfs_17303.trc:
ORA-00270: error creating archive log /oradata/flash_recovery_area/PROD/archivelog/2008_09_26/o1_mf_1_10164_%u_.arc
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 96954368 bytes disk space from 53687091200 limit

Du kan også bruke Oracle-kommandoen oerr for å få en forklaring til disse ORA- feilmeldingene. Denne kommandoen finnes kun på Linux og Unix plattformen.


oracle@xps:~$ oerr ora 19809
19809, 00000, "limit exceeded for recovery files"
//*Cause: The limit for recovery files specified by the
//        DB_RECOVERY_FILE_DEST_SIZE was exceeded.
//*Action:The error is accompanied by 19804. See message 19804 for further
//        details.

oracle@xps:~$ oerr ora 19804
19804, 00000, "cannot reclaim %s bytes disk space from %s limit"
// *Cause: Oracle cannot reclaim disk space of specified bytes from the
//         DB_RECOVERY_FILE_DEST_SIZE limit.
// *Action: There are five possible solutions:
//          1) Take frequent backup of recovery area using RMAN.
//          2) Consider changing RMAN retention policy.
//          3) Consider changing RMAN archivelog deletion policy.
//          4) Add disk space and increase DB_RECOVERY_FILE_DEST_SIZE.
//          5) Delete files from recovery area using RMAN.

 

Hvor mye ledig plass gjenstår?

Ønsker du å sjekke hvor mye plass som er benyttet kan følgende SQL brukes:


SYS@PROD SQL> SELECT (100 - sum(percent_space_used))
                              + sum(percent_space_reclaimable)
                              "Prosent ledig plass"
                              FROM v$flash_recovery_area_usage;

Prosent ledig plass
-------------------
	      84,09

Du kan også bruke en tilsvarende SQL for å få oversikt over alle gjenopprettings-områdene:


SYS@PROD SQL> SELECT * FROM V$RECOVERY_AREA_USAGE;

FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
CONTROL FILE                        ,01                         0               1
REDO LOG                            ,15                         0               3
ARCHIVED LOG                      84,09                         0            1851
BACKUP PIECE                          0                         0               0
IMAGE COPY                            0                         0               0
FLASHBACK LOG                         0                         0               0
FOREIGN ARCHIVED LOG                  0                         0               0

Løsningen på problemet er indikert i såvel alert loggen som ORA-teksten og en enkel variant er å endre parameteren DB_RECOVERY_FILE_DEST_SIZE til å bedre indikere hvor stor plass som er avsatt til dette området. SQL-en ser da slik ut:


SYS@PROD SQL> ALTER SYSTEM SET
                              db_recovery_file_dest_size = 100G;

Hvis du ønsker en tilbakemelding neste gang området er på vei å fylles opp kan du enten benytte deg av Oracle Enterprise Manager eller overvåkingsprogrammet dbWatch. dbWatch har etterhvert fått stor anerkjennelse og fikk en 5-stjerners vurdering i juli.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*