Oracle Database: mover SPFILE de ASM a filesystem

El archivo spfile (Server Parameter File) es un fichero binario (no como el pfile, que es texto plano), que almacena parámetros necesarios para el arranque de la base de datos. El spfile se puede almacenar tanto dentro de un Disk Group de ASM como en un archivo en un filesystem del sistema operativo. Cualquier cambio del contenido/parámetros en este archivo se debe hacer desde dentro de la base de datos mediante ALTER SYSTEM SET.

Pero en esta entrada no vamos a ver cómo añadir o eliminar parámetros en spfile, sino la forma de cambiar la ubicación del mismo. Si se encuentra dentro de un diskgroup de ASM, lo que debemos hacer es:

  1. Confirmar la ubicación actual del spfile.
  2. Crear un pfile temporal.
  3. Convertir ese pfile en el spfile definitivo.
  4. Reiniciar la base de datos.

La localización actual del spfile se puede averiguar consultando el parámetro directamente desde la base de datos:

SQL> show parameter spfile
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DG_DATA/spfile.ora

Está dentro del Disk Group DG_DATA de ASM. Creamos el pfile temporal (fichero de texto plano con los parámetros) en filesystem:

SQL> create pfile='/var/tmp/pfile_temporal.ora' from spfile;

File created.

Y generamos el spfile definitivo:

SQL> create spfile='/u01/app/oracle/product/11.2.0/dbhome/dbs/spfile.ora'
from pfile='/var/tmp/pfile_temporal.ora';

File created.

Tras reiniciar la base de datos, ya debería aparecer el spfile actualizado:

SQL> show parameter spfile

NAME TYPE VALUE
------------------------------------ ----------- --------------------------
spfile string /u01/app/oracle/product/11.2.0/dbhome/dbs/spfile.ora

Pasado un tiempo prudencial, podéis eliminar el spfile del Disk Group +DG_DATA, ya que ya no se está utilizando.