Ronal Mejía
Posted on October 6, 2024
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
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
2) Convierte el spfile
a un pfile
:
CREATE PFILE='$ORACLE_HOME/dbs/pfile.ora' FROM SPFILE;
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
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
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';
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;
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
2) Y agrega parámetros básicos como:
*.db_name='ORCL' *.memory_target=500M
3) Inicia la base de datos especificando el pfile
:
STARTUP PFILE='$ORACLE_HOME/dbs/initORCL.ora';
4) Si la base de datos arranca correctamente, crea un nuevo spfile
:
CREATE SPFILE FROM PFILE='$ORACLE_HOME/dbs/initORCL.ora';
5) Reinicia la base de datos para confirmar que el spfile
se ha generado correctamente y realizar las configuraciones requeridas:
SHUTDOWN IMMEDIATE;
STARTUP;
Consideraciones Finales
-
Realiza siempre un respaldo del
spfile
antes de realizar cualquier modificación. - 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.
- Para las rutas se menciona $ORACLE_HOME, para esto se debe de especificar el directorio donde se encuentran los archivos de configuración.
Posted on October 6, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.