Conscientes de que Oracle9i está de salida, la empresa Acme finalmente hizo la actualización a la versión 10gR2; las cosas no podían ir mejor, hasta que algunos usuarios empiezan a reportar que sus sesiones están suspendidas, y otros que no pueden conectarse, obteniendo el error ORA-00257: archiver error. Connect internal only, until freed.
El problema resulta evidente, ya antes había pasado, se toma la rápida decisión de mover algunos archivelogs antiguos a otro directorio; ahora hay espacio pero el problema parece no resolverse, ¿qué puede estar pasando? Pues que ahora están usando Flash Recovery Area (FRA) y eso cambia las cosas.
Con Oracle 10g aparece Flash Recovery Area como un espacio en el cual se depositan por defecto los archivelogs y backups, Oracle se encarga de gestionarlo y exige que su mantenimiento se haga sin recurrir a comandos del Sistema Operativo.
Para este caso en particular, como la liberación de espacio se ha hecho mediante el traslado de archivelogs a otro directorio usando el Sistema Operativo, Oracle permanece sin ser notificado de tal cambio y por tanto asume que el problema de falta de espacio persiste, y así nos lo hace saber mediante mensajes en el alert.ora.
Sat Nov 8 13:58:46 2008
Thread 1 advanced to log sequence 26
Current log# 2 seq# 18 mem# 0: /u01/oradata/orcl/redo02.log
Sat Nov 8 13:58:46 2008
Errors in file /opt/oracle/admin/orcl/bdump/orcl_arc0_21093.trc:
ORA-19815: WARNING: db_recovery_file_dest_size of 209715200 bytes is 100.00% used, and has 0 remaining bytes available.
Sat Nov 8 13:58:46 2008
************************************************************************
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.
************************************************************************
Sat Nov 8 13:58:46 2008
Errors in file /opt/oracle/admin/orcl/bdump/orcl_arc0_21093.trc:
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 51228672 bytes disk space from 209715200 limit
ARC0: Error 19809 Creating archive log file to '/fra/ORCL/archivelog/2008_11_08/o1_mf_1_25_0_.arc'
ARC0: Failed to archive thread 1 sequence 25 (19809)
ARCH: Archival stopped, error occurred. Will continue retrying
Sat Nov 8 13:58:46 2008
ORACLE Instance orcl - Archival Error
Sat Nov 8 13:58:46 2008
ORA-16038: log 1 sequence# 25 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 1 thread 1: '/u01/oradata/orcl/redo01.log'
Como podemos observar, Oracle encuentra el problema y no solo lo reporta sino que también nos da un resumen de las acciones que podemos tomar para superar el problema. La alternativa (4) es reveladora: si queremos hacer espacio eliminando archivos debemos usar el comando delete de RMAN para lograrlo.
RMAN> list archivelog all;
List of Archived Log Copies
Key Thrd Seq S Low Time Name
------- ---- ------- - ------------------- ----
18 1 23 A 08/11/2008 13:20:58 /fra/ORCL/archivelog/2008_11_08/o1_mf_1_23_4kdsx5y2_.arc
19 1 24 A 08/11/2008 13:31:33 /fra/ORCL/archivelog/2008_11_08/o1_mf_1_24_4kdsx6th_.arc
20 1 25 A 08/11/2008 13:45:11 /fra/ORCL/archivelog/2008_11_08/o1_mf_1_25_4kdc7vrd_.arc
RMAN> delete noprompt archivelog until sequence 24;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=142 devtype=DISK
List of Archived Log Copies
Key Thrd Seq S Low Time Name
------- ---- ------- - ------------------- ----
18 1 23 A 08/11/2008 13:20:58 /fra/ORCL/archivelog/2008_11_08/o1_mf_1_23_4kdsx5y2_.arc
19 1 24 A 08/11/2008 13:31:33 /fra/ORCL/archivelog/2008_11_08/o1_mf_1_24_4kdsx6th_.arc
deleted archive log
archive log filename=/fra/ORCL/archivelog/2008_11_08/o1_mf_1_23_4kdsx5y2_.arc recid=18 stamp=670289494
deleted archive log
archive log filename=/fra/ORCL/archivelog/2008_11_08/o1_mf_1_24_4kdsx6th_.arc recid=19 stamp=670289494
Deleted 2 objects
Volviendo a nuestro escenario, intentamos eliminar los archivelogs pero el esfuerzo es en vano.
RMAN> delete noprompt archivelog until sequence 24;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=142 devtype=DISK
List of Archived Log Copies
Key Thrd Seq S Low Time Name
------- ---- ------- - ------------------- ----
18 1 23 A 08/11/2008 13:20:58 /fra/ORCL/archivelog/2008_11_08/o1_mf_1_23_4kdsx5y2_.arc
19 1 24 A 08/11/2008 13:31:33 /fra/ORCL/archivelog/2008_11_08/o1_mf_1_24_4kdsx6th_.arc
RMAN-06207: WARNING: 2 objects could not be deleted for DISK channel(s) due
RMAN-06208: to mismatched status. Use CROSSCHECK command to fix status
RMAN-06210: List of Mismatched objects
RMAN-06211: ==========================
RMAN-06212: Object Type Filename/Handle
RMAN-06213: --------------- ---------------------------------------------------
RMAN-06214: Archivelog /fra/ORCL/archivelog/2008_11_08/o1_mf_1_23_4kdsx5y2_.arc
RMAN-06214: Archivelog /fra/ORCL/archivelog/2008_11_08/o1_mf_1_24_4kdsx6th_.arc
RMAN> crosscheck archivelog all;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=142 devtype=DISK
validation failed for archived log
archive log filename=/fra/ORCL/archivelog/2008_11_08/o1_mf_1_23_4kdsx5y2_.arc recid=18 stamp=670288851
validation failed for archived log
archive log filename=/fra/ORCL/archivelog/2008_11_08/o1_mf_1_24_4kdsx6th_.arc recid=19 stamp=670288858
Crosschecked 2 objects
Finalmente removemos del catálogo de RMAN los archivelogs reportados como no encontrados en el paso anterior.
RMAN> delete noprompt expired archivelog all;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=142 devtype=DISK
List of Archived Log Copies
Key Thrd Seq S Low Time Name
------- ---- ------- - ------------------- ----
18 1 23 X 08/11/2008 13:20:58 /fra/ORCL/archivelog/2008_11_08/o1_mf_1_23_4kdsx5y2_.arc
19 1 24 X 08/11/2008 13:31:33 /fra/ORCL/archivelog/2008_11_08/o1_mf_1_24_4kdsx6th_.arc
deleted archive log
archive log filename=/fra/ORCL/archivelog/2008_11_08/o1_mf_1_23_4kdsx5y2_.arc recid=18 stamp=670288851
deleted archive log
archive log filename=/fra/ORCL/archivelog/2008_11_08/o1_mf_1_24_4kdsx6th_.arc recid=19 stamp=670288858
Deleted 2 EXPIRED objects
Sat Nov 8 14:21:03 2008
ARC1: Archiving not possible: No primary destinations
ARC1: Failed to archive thread 1 sequence 26 (4)
Sat Nov 8 14:21:04 2008
db_recovery_file_dest_size of 200 MB is 27.83% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
Sat Nov 8 14:21:15 2008
Archiver process freed from errors. No longer stopped
Sat Nov 8 14:21:15 2008
Thread 1 advanced to log sequence 27
Current log# 1 seq# 20 mem# 0: /u01/oradata/orcl/redo03.log
Las sesiones vuelven a la vida y los usuarios pueden iniciar nuevas conexiones, todo ha regresado a la normalidad; podemos finalmente respirar con alivio y nos queda la enseñanza de que si bien usar Flash Recovery Area es altamente recomendado, debemos tener presente no manipular sus contenidos por medios ajenos a los proporcionados por Oracle.
Si deseas profundizar en el tema, te recomiendo leer las notas:
278308.1 | How to Resolve ORA-00257: Archiver is Stuck Error in 10g? |
315098.1 | How is the space pressure managed in the Flash Recovery Area - An Example. |