DEV Community

Cover image for Recuperar una Base de Datos Oracle Después de un Error en el Archivo spfile.ora
Ronal Mejía
Ronal Mejía

Posted on

Recuperar una Base de Datos Oracle Después de un Error en el Archivo spfile.ora

El archivo spfile.ora (Server Parameter File) en Oracle es crucial para la configuración y arranque de la base de datos, ya que contiene todos los parámetros de inicialización necesarios para su funcionamiento. Sin embargo, a veces, al realizar ajustes en este archivo (por ejemplo, aumentar el tamaño del SGA o el memory_target), podemos cometer errores que impidan que la base de datos se inicie correctamente. Esto puede ser un problema crítico, ya que no podremos arrancar la instancia, ni siquiera en modo NOMOUNT.

En este artículo, te mostraré cómo recuperar una base de datos Oracle cuando un cambio erróneo en el spfile.ora impide su arranque. ¡Vamos a solucionarlo con ejemplos prácticos!

Escenario: Error al Modificar el Tamaño de Memoria del SGA

Imagina que modificaste el parámetro sga_target en el spfile y le asignaste un valor mayor al disponible en el servidor. Al intentar iniciar la base de datos, se muestra el siguiente error:



ORA-27102: out of memory
Linux-x86_64 Error: 12: Cannot allocate memory


Enter fullscreen mode Exit fullscreen mode

Este error indica que Oracle no puede asignar la cantidad de memoria solicitada y, como resultado, la base de datos no puede arrancar en cualquier modo.

Solución Paso a Paso

Para resolver este problema siguiendo uno de los métodos más seguros, es el convertir el archivo spfile a un pfile, editar el pfile, y luego volver a crear el spfile. Te lo explico a continuación.

Paso 1: Convertir el SPFILE a un PFILE

Incluso si la base de datos no puede iniciarse, aún es posible convertir el archivo binario spfile a un archivo pfile (archivo de texto) utilizando sqlplus.

1) Accede a sqlplus con el siguiente comando:



sqlplus / as sysdba


Enter fullscreen mode Exit fullscreen mode

2) Convierte el spfile a un pfile:



CREATE PFILE='$ORACLE_HOME/dbs/pfile.ora' FROM SPFILE;


Enter fullscreen mode Exit fullscreen mode

Esto generará un archivo pfile.ora en la ubicación especificada ($ORACLE_HOME/dbs/pfile.ora) que contendrá todos los parámetros de inicialización. Se considera que los archivos de configuración están en $ORACLE_HOME, de no ser así debe de especificar la ruta del archivo

Paso 2: Editar el PFILE

Ahora que tenemos el pfile generado, abre el archivo con un editor de texto (por ejemplo, vi o nano en Linux, o Notepad en Windows) y busca el parámetro incorrecto.

Por ejemplo, si el problema es con el tamaño del sga_target, verás algo como esto:



*.sga_target=8192M


Enter fullscreen mode Exit fullscreen mode

Supongamos que el servidor solo tiene 4 GB de RAM. Este valor es demasiado alto, así que cámbialo a algo más razonable, como:



*.sga_target=2048M


Enter fullscreen mode Exit fullscreen mode

Guarda los cambios y cierra el archivo.

Paso 3: Crear un Nuevo SPFILE a Partir del PFILE

Vuelve a sqlplus y crea un nuevo spfile usando el pfile modificado:



CREATE SPFILE='$ORACLE_HOME/dbs/spfile.ora' FROM PFILE='$ORACLE_HOME/dbs/pfile.ora';


Enter fullscreen mode Exit fullscreen mode

Si no especificas una ruta, el spfile se creará en la ubicación predeterminada de Oracle ($ORACLE_HOME/dbs en Linux o ORACLE_HOME\\\\database en Windows).

Paso 4: Iniciar la Base de Datos con el Nuevo SPFILE

Ahora intenta iniciar la base de datos con el nuevo spfile:



STARTUP;


Enter fullscreen mode Exit fullscreen mode

Si todo salió bien, la base de datos debería iniciar sin problemas.

Método Alternativo: Iniciar la Base de Datos con un PFILE Temporal

Si por alguna razón no puedes crear el pfile a partir del spfile (por ejemplo, si el spfile está corrupto), puedes crear un pfile desde cero con los parámetros mínimos necesarios:

1) Crea un archivo pfile en la ubicación predeterminada de Oracle. Por ejemplo, en Linux:



vi $ORACLE_HOME/dbs/initORCL.ora


Enter fullscreen mode Exit fullscreen mode

2) Y agrega parámetros básicos como:



*.db_name='ORCL' *.memory_target=500M


Enter fullscreen mode Exit fullscreen mode

3) Inicia la base de datos especificando el pfile:



STARTUP PFILE='$ORACLE_HOME/dbs/initORCL.ora';


Enter fullscreen mode Exit fullscreen mode

4) Si la base de datos arranca correctamente, crea un nuevo spfile:



CREATE SPFILE FROM PFILE='$ORACLE_HOME/dbs/initORCL.ora';


Enter fullscreen mode Exit fullscreen mode

5) Reinicia la base de datos para confirmar que el spfile se ha generado correctamente y realizar las configuraciones requeridas:



SHUTDOWN IMMEDIATE;
STARTUP;

Enter fullscreen mode Exit fullscreen mode




Consideraciones Finales

  1. Realiza siempre un respaldo del spfile antes de realizar cualquier modificación.
  2. Si no estás seguro del valor de un parámetro, realiza pruebas en una base de datos de desarrollo antes de aplicarlo en producción.
  3. Para las rutas se menciona $ORACLE_HOME, para esto se debe de especificar el directorio donde se encuentran los archivos de configuración.

Top comments (0)