La première chose dont a besoin une instance de base de données est du fichier d’initialisation.
Celui-ci peut être donné par le client qui donne l’ordre de démarrage (on parle alors de ParameterFile ou PFILE) ou bien par le serveur lui-même (on parle alors de ServeurParameterFile ou SPFILE).

1 – Introduction
Le passage d’une instance en mode PFILE vers une instance en mode SPFILE se fait simplement par les commandes suivantes :
create spfile='<nom_du_fichier_spfile_a_creer>' from pfile='<nom_du_pfile'>
create pfile='<nom_du_fichier_pfile_a_creer>' from spfile='<nom_du_spfile'>
Les PFILE n’existent plus que pour la compatibilité ascendante avec de vieilles versions d’Oracle, on préférera depuis la version 8 les versions SPFILE qui ont la particularité de pouvoir changer un grand nombre de ses paramètres sans redémarrage de l’instance au contraire d’un PFILE.
2 – Mode de détection du type de fichier d’init à utiliser :
Lorsqu’une instance est en cours de démarrage, elle vérifie dans l’ordre les points suivants afin de déterminer quel fichier d’initialisation utiliser (SID est donné par la variable d’environnement $ORACLE_SID):
- Existe-t-il un fichier spfile<SID>.ora dans dans le répertoire $ORACLE_HOME/dbs ?
- SINON Existe-t-il un fichier spfile.ora dans le répertoire $ORACLE_HOME/dbs?
- SINON Existe-t-il un fichier init<SID>.ora dans le répertoire $ORACLE_HOME/dbs?
- SINON Existe-t-il un fichier init.ora dans le répertoire $ORACLE_HOME/dbs?
Si aucun de ces cas n’est rencontré, le démarrage échoue.
3 – Pourquoi et comment utiliser un SPFILE ?
Parce que les paramètres du SPFILE sont en grande partie modifiables dynamiquement, sans redémarrer l’instance, ce qui est obligatoire la pluspart du temps dans le cadre d’un PFILE, ce qui devrait être l’argument premier dans une instance en production.
La modification des valeurs du SPFILE set fait par la commande
ALTER SYSTEM SET <parametre>=<valeur> [ SCOPE= { MEMORY | SPFILE | BOTH} }
On voit que le paramètre optionnel SCOPE permet de fixer un paramètre en mémoire (c’est à dire pour l’instance en cours et ses futures sessions), dans le SPFILE (pour un prochain redémarrage), ou les deux (par défaut).
Cependant, toutes les variables ne sont pas modifiables en mémoire (dynamiquement), il faut vérifier le type de paramètre avant dans vue des paramètres V$PARAMETER.
Les deux champs ISSES_MODIFIABLE et ISSYS_MODIFIABLE donnent les informations de possibilité d’utilisation d’un SCOPE MEMORY et d’un SCOPE SPFILE.
Remarque 1: Les nostalgiques qui veulent utiliser un PFILE peuvent tout de même utiliser la modification dynamique de paramètre en utilisant create spfile from pfile puis create pfile from spfile mais l’intéret de cette manipulation demeure … « léger ».
Remarque 2: Si vous vous connectez en SQLPlus depuis le réseau (et non sur le poste ou l’instance est installée), il vous faudra détenir un PFILE correct sur votre poste local afin de démarrer l’instance, au contraire d’un SPFILE, ce qui peut être une source d’erreurs non négligeables ! (un paramètre mémoire a été modifié dans un PFILE et vous ne disposez pas de la dernière version …)
Remarque 3: Certaines versions de bases de données (notamment sur Windows) utilisent un PFILE qui contient une ligne unique indiquant qu’il faut en fait utiliser un SPFILE : « spfile=/data/…/spfile.ora ».
Remarque 4: Si l’instance est démarrée, vous pouvez vous rassurer sur le type de fichier d’init que celle ci utilise en consultant le paramètre système SPFILE, si celui n’est pas renseigné, c’est un PFILE qui est pris en compte, sinon vous y trouvez le chemin du SPFILE.
SQL> show parameter spf;
(équivalent à "select * from v$parameter where name like '%spf%';")
NAME TYPE VALUE
------------------------------------ ----------- ------------
spfile string
