Ads 468x60px

jueves, 3 de septiembre de 2015

Oracle: Pfile o Spfile?




En este post, quiero mostrar la diferencia entre tener una base de datos con Pfile contra una que tiene Spfile.
Para iniciar, definamos lo que es cada uno de los términos. Ambos se refieren a un archivo, este archivo, es el que define el comportamiento de la base de datos por medio de parámetros de la misma.

 

Pfile

El nombre viene de Parameter File y es un archivo de texto y vive en el sistema de archivos, específicamente en el:

ORACLE_HOME\database     (windows)
ORACLE_HOME/dbs          (linux o unix)
 
Este archivo cuyo formato es initSID.ora, es leído cuando se levanta la instancia de la base de datos y con base en él, se conforma el comportamiento de la misma. Los parámetros de la base de datos pueden ser modificados en dicho archivo y serán tomados en cuenta la siguiente vez que se levante la base de datos. Para modificarlo, basta con que se use un editor común de texto.

Spfile

El nombre proviene de Server Parameter File, y es un archivo binario asociado a la base de datos. La enorme diferencia, estriba en que al estar levantada la base, se pueden modificar varios parámetros de la misma dinámicamente sin tener que darla de baja.

Esto sin embargo, aunque funciona para la mayoría de parámetros, no lo hace para todos, pero con poder modificar esa mayoría, basta para poder realizar ajustes a la base de datos sin problema.

¿Cómo interactuar entre ambos tipos?

Después, conectándonos como Sysdba, para saber antes si tenemos nuestra base de datos como Spfile, o no, tenemos que mostrar el valor de dicho parámetro con show parameter como se indica en el ejemplo siguiente:

SQL> show parameter spfile
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string
SQL>
 
Si el valor está vacío, implica que nuestra base de datos está con Pfile. Si se observa un valor, significa lo contrario, con lo cual, tendremos nuestra base de datos como Spfile.

Para hacer que nuestra base de datos que está como Pfile, se base ahora en un Spfile, se tiene que usar el comando:

create spfile from pfile;

con el cual, se crea una copia binaria del Pfile para que la base de datos lo tome la siguiente vez que sea levantada como se puede ver en el siguiente ejemplo:

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string

SQL> create spfile from pfile;

File created.

SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

E:\oracle\product\10.2.0\BIN>cd ..\database

E:\oracle\product\10.2.0\database>dir *pfile*
 El volumen de la unidad E es MetalliOra
 El número de serie del volumen es: D0FD-FE0C

 Directorio de E:\oracle\product\10.2.0\database

18/03/2009  06:57 p.m.             2,560 SPFILELAB.ORA
               1 archivos          2,560 bytes
               0 dirs  19,240,804,352 bytes libres

E:\oracle\product\10.2.0\database>
Después de hacer esto, se reinicia la base de datos y nada más por la existencia del Spfile, ya se habrá dado de alta con los parámetros del mismo:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  666894336 bytes
Fixed Size                  1298472 bytes
Variable Size             448794584 bytes
Database Buffers          209715200 bytes
Redo Buffers                7086080 bytes
Database mounted.
Database opened.
SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      E:\ORACLE\PRODUCT\10.2.0\DATAB
                                                 ASE\SPFILELAB.ORA
Si después de tener una base de datos basada en un Spfile, se desea regresar a un Pfile, se tienen que seguir los pasos enumerados a continuación:
  1. Verificar que se tiene un archivo initSID.ora
  2. Si no se tiene el archivo, entonces, crear uno en base al spfile con el comando:    create pfile from spfile
  3. Arreglar los parametros en el archivo generado (initSID.ora).
  4. Borrar el spfile.
  5. Reiniciar la base de datos.
Ejemplo:
SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      E:\ORACLE\PRODUCT\10.2.0\DATAB
                                                 ASE\SPFILELAB.ORA
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

E:\oracle\product\10.2.0\BIN>cd ..\database

E:\oracle\product\10.2.0\database>dir init*
 El volumen de la unidad E es MetalliOra
 El número de serie del volumen es: D0FD-FE0C

 Directorio de E:\oracle\product\10.2.0\database 24/01/2009  03:11 p.m.               946 initlab.ora
               1 archivos            946 bytes
               0 dirs  19,240,779,776 bytes libres

E:\oracle\product\10.2.0\database>ren initlab.ora tempinitlab.ora

E:\oracle\product\10.2.0\database>dir init*
 El volumen de la unidad E es MetalliOra
 El número de serie del volumen es: D0FD-FE0C

 Directorio de E:\oracle\product\10.2.0\database

No se encuentra el archivo

E:\oracle\product\10.2.0\database>cd ..\bin

E:\oracle\product\10.2.0\BIN>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on MiÚ Mar 18 19:14:51 2009

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create pfile from spfile;

File created.

SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

E:\oracle\product\10.2.0\BIN>cd ..\database

E:\oracle\product\10.2.0\database>dir init*
 El volumen de la unidad E es MetalliOra
 El número de serie del volumen es: D0FD-FE0C

 Directorio de E:\oracle\product\10.2.0\database 18/03/2009  07:14 p.m.               951 INITlab.ORA
               1 archivos            951 bytes
               0 dirs  19,240,775,680 bytes libres

E:\oracle\product\10.2.0\database>del spfilelab.ora

E:\oracle\product\10.2.0\database>cd ..\bin

E:\oracle\product\10.2.0\BIN>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on MiÚ Mar 18 19:18:27 2009

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      E:\ORACLE\PRODUCT\10.2.0\DATAB
                                                 ASE\SPFILELAB.ORA

SQL> startup force
ORACLE instance started.

Total System Global Area  666894336 bytes
Fixed Size                  1298472 bytes
Variable Size             448794584 bytes
Database Buffers          209715200 bytes
Redo Buffers                7086080 bytes
Database mounted.
Database opened.
SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string

En este momento, ya la base de datos se encuentra basada en el Pfile.

¿Qué contiene un Pfile y un Spfile?

Básicamente, los parámetros en cuestión que modelarán la base de datos, en el caso del Spfile, tiene caracteres binarios entendibles para Oracle aunque ilegibles para nosotros, más los parámetros que se están definiendo. Los parámetros que no son incluidos en dichos archivos, toman su valor por default al momento de levantar la base de datos. Aquí incluyo un par de imágenes con la muestra de ambos archivos abiertos en el Notepad++.

Espero haya sido de utilidad el presente post y en base a él, sea más claro el cómo funciona un archivo de parámetros para la base de datos Oracle.

FUENTE:  Oracle


No hay comentarios:

Publicar un comentario