Cómo solucionar el error: ORA-00257: error del proceso de archivado. Solo conexión interna hasta liberación que se produce en un servidor de base de datos Oracle.

Error ORA-00257: error del proceso de archivado. Solo conexión interna hasta liberación

El servicio de Oracle deja de funcionar y los aplicativos que lo usan pierden el acceso a la base de datos Oracle.

Cuando intentamos conectarnos, mediante SQL*Plus, a un instancia concreta del servidor de Oracle, por ejemplo a «ido»:

Nos devolverá el error:

ORA-00257: error del proceso de archivado. Solo conexión interna hasta liberación.

Si intentamos ejecutar una consulta SQL para obtener el estado de la base de datos:

Nos devolverá:

SP2-0640: Not connected

En cambio, si intentamos conectarnos a la instancia principal, con:

No nos mostrará error, incluso ejecutando:

Nos devolverá «OPEN»:

Este error se produce en bases de datos Oracle con el modo ARCHIVELOG activado. Podemos consultar el modo con la sentencia SQL:

Si el servidor se reinicia en este estado, la base de datos ya no cargará a estado OPEN, se quedará sin montar.

Causa del error ORA-00257: error del proceso de archivado. Solo conexión interna hasta liberación

El error ORA-00257, normalmente, indica que la unidad o unidades del archivado se han llenado. Es decir, que la unidad de disco donde se almacenan los ficheros de archivado de Oracle se ha quedado sin espacio. En este estudio de caso, la unidad /oralog, donde se almacenan los ficheros de ARCHIVELOG de Oracle, está al 100% de uso:

Esto provoca que la base de datos queda en estado OPEN (supuestamente correcto) pero, en realidad, no funciona el acceso mientras no se libere el espacio.

Solución al error ORA-00257: error del proceso de archivado. Solo conexión interna hasta liberación

Para solucionar el error ORA-00257, si la base de datos aún está en estado OPEN, iniciaremos sesión en RMAN desde la línea de comandos del servidor de Oracle:

Desde RMAN, forzaremos el vaciado de los archivos de log que no han sido copiados a la unidad de backup, con el comando:

Si se produce algún error como el siguiente:

Será conveniente detener la base de datos e iniciarla en modo MOUNT. Para ello, desde SQL*Plus, ejecutaremos el comando:

Si la base de datos se detiene correctamente, la iniciaremos en modo MOUNT, si no se detiene (es lo habitual cuando queda en este estado), será recomendable reiniciar el servidor completo. Una vez reiniciado, volveremos a acceder a SQL*Plus, en este caso, comprobaremos que la base de datos no se inicia, dado que está sin espacio en la unidad de ARCHIVELOG, mostrando:

En este caso, iniciaremos la base de datos en estado MOUNT, para que puedan ejecutarse los comandos RMAN de liberación de espacio. Para ello, ejecutaremos los comandos:

Esperaremos a que se inicie la base de datos en estado MOUNT y revisaremos que ha quedado inicia en ese estado con:

Tras montar la base de datos, desde otra shell de comandos (conviene dejar la anterior abierta para hacer un posterior startup), accederemos nuevamente a RMAN:

Iremos ejecutando los siguientes comandos, que mostramos por orden de agresividad, de menor agresivo a mayor agresivo:

En este caso, dio resultado el comando:

Que pidió confirmación para eliminar los ficheros de «backup», respondimos «yes» y eliminó cientos de ficheros de la carpeta /oralog, liberando el espacio ocupado.

Una vez liberado el espacio en la unidad, desde la ventana de shell anterior con conexión a Oracle mediante SQL*Plus, iniciaremos la base de datos en modo normal OPEN, con el comando:

La base de datos volverá a funcionar correctamente y el error ORA-00257 quedará solucionado.

Medidas correctivas para evitar que vuelva a suceder

El error ORA-00257 se suele producir cuando fallan los backups de RMAN o cualquier otro sistema que tengamos implementado para hacer backup de los ficheros de ARCHIVELOG y eliminarlos de su ubucación original.

Lo habitual es tener configurado un backup en frío (con export) y un backup en caliente (con RMAN). Para el caso de RMAN, lo que suele realizar esta herramienta, es una backup a otra unidad de los ficheros de ARCHIVELOG y, posteriormente, eliminarlos del origen. De esta forma la unidad de ARCHIVELOG nunca se llenará.

En este caso y de forma habitual, el backup de RMAN estaba fallando durante varios días, lo que provocó que no se vaciaran los archivos de redolog de /oralog, llenándose la unidad.

Por ello, la medida correctiva para este error es procurar que el backup de RMAN siempre se realice. Y, como medida adicional, se podría ampliar el espacio en disco para los ficheros de log de archivado (ARCHIVELOG), de forma que admitan más días de fallo del backup de RMAN.

Por otro lado, es muy recomendable monitorizar tanto el resultado de los backups de RMAN como el espacio en disco en las unidades de Oracle.