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
Nuevamente junto con el mensaje se nos proporciona la solución: hacer un crosscheck.
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
Revisamos el alert.log y el problema aparece como resuelto.
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 el Note 278308.1 How to Resolve ORA-00257: Archiver is Stuck Error in 10g? y el Note 315098.1 How is the space pressure managed in the Flash Recovery Area - An Example.
Posts Relacionados:
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o envíame un email y para que NO te pierdas ningún Post, suscríbete por email ahora mismo!
9 comentarios, agrega el tuyo!
Enrique,
Antes que nada felicitarte por tu presentación en el pasado PEOUG day, estuvo muy interesante y amena (lo cual le da un punto extra)..
Y ahora con respecto al post, tengo algunas preguntas..
¿Cual es la función específica de la FRA?
Si el oracle guarda por defecto los archive logs y los backups en la FRA, ¿esto quiere decir entonces que los archive logs y los backups se guardan dos veces?
Hola EBP, el FRA es un espacio gestionado por Oracle donde podemos depositar los archivos relacionados al backup y recovery. Allí se crean los archive logs y los flashback logs, al igual que los backupsets que obtenemos con RMAN. No es obligatorio usarlo, no es la idea que dupliques los archivos, sino que reemplaces los directorios sueltos que tenias por éste, que al ser gestionado por Oracle, te simplifica la vida. Mayor referencia en la documentacion desde luego.
Saludos, y gracias por participar!
Muchas gracias por la respuesta Enrique..
Mira.. yo tengo las siguientes carpetas en mi servidor linux:
arch -> aqui se depositan mis achive logs
backup -> aqui se guardan los backups
Y la carpeta:
flash_recovery_area -> la cual contiene una carpeta archivelog y otra autobackup
Según lo que me indicas, la carpeta "archivelog" contiene lo mismo que "arch" y la carpeta "autobackup" lo mismo que "backup" ??
Mil disculpas por tanta pregunta, pero es que estoy dando mis primeros pasos en esto de DBA..
Gracias!
Hola EBP, si ya tienes una carpeta para el FRA entonces puedes deshacerte de las carpetas "arch" y "backup", salvo que desees mantener una copia adicional de los archive logs en cuyo caso podrías mantener la carpeta "arch", en este caso no olvides de tener ambos destinos registrados con los parámetros "log_archive_dest_n" respectivos.
Saludos.
Y como hago para que ya no se generen los backups y los archive logs en esas carpetas?
Hola nuevamente EBP, tú eres el que controla donde van los archive logs mediante los parámetros log_archive_dest_n, así como donde van los backups obtenidos con RMAN, mediante el uso de la cláusula format. Te recomiendo leer la documentación respectiva.
Saludos.
Gracias...muy útil la explicación. Ya me suscribí...este fin desemana encontre 2 respuestas por acá y me hizo respirar profundo, remitirme a la documentación y hacer algo que usualmente no hacemos...leer.
Gracias, un abrazo.
Hola "1", hay tanto por leer y siempre estamos justos de tiempo, pero la lectura es un hábito que no debemos romper.
Saludos.
a este error ora-00257 adiciono este mensaje del alert.log:ORA-16038: log 1 sequence# 337 cannot be archived
ORA-19809: limit exceeded for recovery files. lo que hice fué ingresar al rman target / y ejecutar : delete archivelog until time 'trunc(sysdate-7)'; este menos siete es antes de mi ultimo respaldo en frio.
Publicar un comentario