A veces nos encontramos errores técnicos en aplicaciones, scripts, etc. y los resolvemos pero no guardamos en ningún lado la solución y los síntomas. Quise hacer una especie de repositorio de problemas/soluciones, y tener disponibles mis experiencias para todos. Espero no volver a decir "¡esto ya me había pasado, pero no me acuerdo cómo lo resolví!" [temas: Oracle DB, korn shell scripts, Oracle App Server, Oracle Collaboration Suite, Windows, Linux, ...]

martes, octubre 10, 2006

disco lleno, a causa del flash recovery area [file system full]

En una ocasion el OAS dejó de responder, y me di cuenta de que el file system donde estaba el software de oracle se había llenado, esto lo supe mediante el comando: df -h . y observando que decía que estaba usado el 100%

A continuación seguí los pasos del siguiente algoritmo:

INICIO
Entrar al servidor con el usuario dueño del software de oracle
REPETIR
hasta llegar al último directorio en la ruta
ejecutar comando: du -hs ./*
ir al directorio que ocupa mayor espacio en disco: cd [directorio]
FIN REPETIR
FIN

Ahí me di cuenta de que el flash Recovery Area era el que más espacio ocupaba. Esta área se utiliza para generar los respaldos mediante el RMAN. En el caso de nuestro servidor, no teníamos configurado ningún respaldo, por lo que investigué cómo depurarlo. Aquí está lo que hice:

$ORACLE_HOME/bin
/rman
connect target

LIST COPY OF DATABASE ARCHIVELOG ALL;
delete archivelog from sequence XXXX;

donde XXXX es la secuencia a partir de la cual se desea borrar los archivos. Si eso no lo borra, intentar lo siguiente:

crosscheck archivelog sequence=4107;
delete archivelog sequence=4107;

- - - - - - -
En otra ocasión que me sucedió lo mismo y no encontraba mis apuntes anteriores, funcionó esto:

BORRADO MANUAL DE archivelogs

Con la Base de Datos abajo (shutdown immediate):

cd $ORACLE_HOME/flash_recovery_area/$ORACLE_SID/archivelog
find . -name "*.arc" -exec rm {} \;

Despues de hacer el borrado, ejecutar comandos siguientes (RMAN):

$ORACLE_HOME/bin/rman
startup mount
connect target
delete force noprompt archivelog all;
shutdown immediate
startup
exit

Listo. Revisar que el file system ya tiene espacio libre: df -h $ORACLE_HOME

Si la Base de Datos está levantada, se pueden correr los comandos del rman directamente sin tener que borrar los archivos del flash_recovery_area a mano.

Luego de esto, procedí a deshabilitar el flash recovery area del sistema mediante este comando:
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST=''
y al final, puse ese mismo parámetro en el archivo de init para que al arrancar la BD de nuevo no se fuera a crear otra vez el flash recovery area.