Cómo Realizar un Startup en Oracle Database con SPFILE y Gestionar Parámetros
Oracle Database dispone de una serie muy extensa de parámetros que sirven para configurar la base de datos y la instancia de Oracle. Estos parámetros se almacenan en archivos especiales que son leídos por la instancia de Oracle antes de iniciarse, para así hacerlo con la configuración que indica el archivo (o archivos) de parámetros.
Tipos de Archivos de Parámetros
Principalmente, existen dos tipos de archivos de parámetros en Oracle:
- PFILE (Parameters File): Es un archivo de texto plano.
- SPFILE (Server Parameter File): Es un archivo binario. Por defecto, Oracle utiliza un archivo binario al arrancar. Es la recomendación actual en Oracle Database desde la versión 11g. La razón es que se les considera más rápidos y la información que contienen es menos accesible.
Ubicación y Formato de los Archivos de Parámetros
En Oracle 11g, el archivo de parámetros SPFile utilizado por defecto se encuentra en las siguientes ubicaciones según el sistema operativo:
- Linux: ORACLE_HOME/dbs/spfileSID.ora, donde el SID es el identificador de la base de datos.
- Windows: ORACLE_HOME/database/spfileSID.ora, donde el SID es el identificador de la base de datos.
Si no se dispone de un SPFile, Oracle puede usar un archivo de texto PFILE para almacenar los parámetros. Su ubicación es:
- Linux: ORACLE_HOME/dbs/initSID.ora.
- Windows: ORACLE_HOME/database/initSID.ora.
El formato del archivo PFILE es el siguiente:
- Los parámetros se almacenan en formato nombreParámetro = valor.
- Para parámetros con varios valores, se usa: nombreParámetro = [valor1 [,valor2 [, ...]]].
- Además, podemos repetir el parámetro en varias líneas para asignar múltiples valores. Por ejemplo:
control_files='/u01/app/oracle/oradata/centora/control01.ctl'control_files='/u02/app/oracle/oradata/centora/control02.ctl'control_files='/aux/back/control03.ctl'
En los archivos PFILE, los comentarios se indican con el símbolo #. Estos archivos permiten modificación directa, pero es importante ser cuidadoso, ya que un error puede volverlos inutilizables.
El archivo SPFILE es un fichero binario, no como el PFILE, que es texto plano. El SPFILE se puede almacenar tanto dentro de un Disk Group de ASM como en un archivo en un filesystem del sistema operativo.
PFILE vs SPFILE in Oracle — Why Most DBAs Get This Wrong
Gestión de los Archivos de Parámetros
Es habitual disponer de un archivo SPFILE y, como respaldo, una copia en formato PFILE para casos en los que el sistema no arranque. Los archivos de tipo PFILE permiten su modificación directa en el archivo. Independientemente del tipo de archivo utilizado para almacenar los parámetros, los valores de los parámetros pueden ser distintos en el archivo respecto al valor que la base de datos utiliza en cada momento.
Comandos para la Gestión de SPFILE y PFILE
Podemos crear archivos PFILE a partir de SPFILEs y viceversa, o incluso a partir de la memoria de la instancia:
- CREATE PFILE FROM SPFILE; Crea un archivo PFILE a partir del archivo SPFILE actual.
- CREATE PFILE='ruta' FROM SPFILE;
- CREATE PFILE='ruta' FROM SPFILE='ruta';
- CREATE SPFILE FROM PFILE; Crea un archivo SPFILE a partir del archivo PFILE actualmente en uso.
- CREATE SPFILE='ruta' FROM PFILE;
- CREATE SPFILE='ruta' FROM PFILE='ruta';
- CREATE SPFILE FROM MEMORY;
- CREATE SPFILE='ruta' FROM MEMORY;
- CREATE PFILE FROM MEMORY;
- CREATE PFILE='ruta' FROM MEMORY;
Estados de la Base de Datos Oracle
Para iniciar la base de datos se usa el comando STARTUP seguido del nombre del estado deseado. Sin indicar estado alguno (escribiendo STARTUP, a secas), se inicia Oracle en modo OPEN. El comando ALTER DATABASE seguido del estado permite cambiar de estado (solo podremos cambiar hacia estados superiores).
Los estados de la base de datos son:
- SHUTDOWN: La base de datos está cerrada, ningún archivo ni proceso está en ejecución.
- NOMOUNT: La instancia de base de datos está latente en memoria, con los procesos comunes funcionando.
- MOUNT: Al estado anterior se añade la lectura de los archivos de control que permiten determinar cómo se ha de preparar la instancia.
- OPEN: La base de datos está completamente funcional. Para ello se abren los archivos de datos y los Redo Log y se comprueba la consistencia de los datos.
Existe un modo especial de trabajo en el que la base de datos está abierta, pero solo se permite el acceso a usuarios con permiso RESTRICTED (lo poseen los administradores) para hacer tareas especiales de administración.
Tipos de Cierre (SHUTDOWN)
También existen diferentes formas de cerrar la base de datos (SHUTDOWN):
- NORMAL: Modo en el que no se admiten más conexiones a la base de datos, pero las actuales se mantienen. Cuando se cierre la última sesión, la base de datos pasará a estar cerrada (SHUTDOWN), pero, hasta entonces, seguirá abierta.
- TRANSACTIONAL: Igual que la anterior, pero ahora se cortan todas las conexiones que no hayan empezado una transacción. No se cerrará la base de datos hasta que finalicen las transacciones iniciadas.
- IMMEDIATE: No se aceptan nuevas conexiones y se cierran las actuales.
- ABORT: Apagado brusco. Todas las conexiones se cortan de golpe, no se cierran los archivos ni se provoca un checkpoint. No se graba nada en disco.
Conexión a Oracle y Gestión de Parámetros
Desde la línea de comandos, en el servidor, disponemos del comando sqlplus. Podemos conectar indicando usuario y contraseña:
- sqlplus usuario: Conecta con Oracle usando el nombre de usuario indicado.
- sqlplus usuario/contraseña.
- sqlplus / as sysdba.
También es posible, tras conectar con Oracle, cambiar de usuario con el comando connect. SQL*Plus admite lanzar scripts, código SQL, al conectar.
Parámetros de Configuración
Los parámetros pueden ser estáticos o dinámicos:
- Si el parámetro es estático, su valor se debe modificar en el fichero de parámetros (SPFILE o PFILE) y se aplicarán cuando la instancia se reinicie.
- Si es dinámico, su valor se puede cambiar en caliente (con la instancia en modo OPEN) y se aplican al instante.
Estos parámetros son de dos tipos:
- A nivel de sesión: Afectan solo a la sesión del usuario. Se modifican con ALTER SESSION.
- A nivel de sistema: Afectan a toda la base de datos.
Los comandos SHOW PARAMETER y SHOW SPPARAMETER permiten visualizar los valores de los parámetros:
- SHOW PARAMETER: Muestra los parámetros que actúan en la sesión actual.
- SHOW SPPARAMETER: Muestra los del archivo SPFILE que sea el actual.
Ejemplo de Parámetros Importantes
Aquí hay una tabla con algunos parámetros clave en Oracle y su descripción:
| Parámetro | Descripción | Tipo |
|---|---|---|
| DB_NAME | Nombre de la base de datos. | Estático |
| DB_DOMAIN | Dominio al que pertenece la base de datos. | Estático |
| DB_UNIQUE_NAME | Nombre único de base de datos. | Estático |
| CONTROL_FILES | Ruta para los archivos de control. | Estático |
| REMOTE_LOGIN_PASSWORDFILE | Indica si Oracle busca un archivo de contraseñas (puede ser MANUAL o AUTO). | Estático |
| NLS_LANGUAGE | Lenguaje de la instancia de base de datos. Depende de la variable de sistema NLS_LANG del Sistema Operativo. | Dinámico (sesión/sistema) |
| MAX_DUMP_FILE_SIZE | Tamaño máximo en bloques del sistema operativo de los archivos log y de traza. | Dinámico (sistema) |
Recuperación de una Base de Datos por SPFILE Corrupto
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.
Imagina que modificaste el parámetro sga_target en el SPFILE y le asignaste un valor mayor al disponible en el servidor. 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.
Pasos para Recuperar el SPFILE
- Iniciar la instancia con un PFILE temporal: Si el SPFILE está corrupto, la base de datos no arrancará. Necesitarás iniciar la instancia usando un PFILE de respaldo o creando uno mínimo con los parámetros esenciales. Si no se dispone de SPFile, Oracle puede utilizar un archivo de texto PFILE para almacenar parámetros. Por defecto Oracle busca los archivos de parámetros por defecto según el nombre y ruta explicados anteriormente. Pero podemos forzar a que se cargue un archivo PFILE que nosotros indiquemos.
- Crear un PFILE a partir del SPFILE (si es accesible) o uno nuevo:
- Editar el PFILE para corregir el error: Abre el archivo PFILE con un editor de texto y corrige el parámetro que causó el problema (en nuestro ejemplo, sga_target). Por ejemplo, si el servidor solo tiene 4 GB de RAM, ajusta el valor de sga_target a un valor adecuado.
- Crear un nuevo SPFILE a partir del PFILE corregido:
- Reiniciar la base de datos con el nuevo SPFILE: Ahora la base de datos debería arrancar correctamente con el SPFILE corregido.
CREATE PFILE FROM SPFILE;
Esto generará un archivo pfile.ora en la ubicación predeterminada de Oracle (por ejemplo, $ORACLE_HOME/dbs/pfile.ora) que contendrá todos los parámetros de inicialización.
CREATE SPFILE FROM PFILE;
