Разница:
# PFILE - клиентский файл параметров. Может находится как на сервере, так и на клиенте в любом месте. Откуда ты стартуешь БД (с клиента или с сервера), там и должен быть доступен PFILE. В случае нестандартного его расположения (%ORACLE_HOME%\DATABASE\init%ORACLE_SID%.ora (Windows), $ORACLE_HOME/dbs/init${ORACLE_SID}.ora (unix)), путь к нему может быть указан с помощью кляузы pfile=... команды startup. Именно это, по-видимому, и делает EMC при отсутствии spfile, т.к. не может записать новые значения на сервер (даже если EMC запускается на сервере, у юзера может не быть прав на правку PFILE) и ему приходится вести свой файл параметров
# SPFILE - серверный файл параметров - двоичный файл (впрочем, легко просматриваемый текстовым редактором), управляемый самим сервером Oracle. Если в команде startup нет кляузы pfile=..., сначала ищется SPFILE (только по стандартным путям: %ORACLE_HOME%\DATABASE\spfile%ORACLE_SID%.ora (Windows), $ORACLE_HOME/dbs/spfile${ORACLE_SID}.ora (unix)), затем PFILE тоже по стандартным путям. Т.к. SPFILE управляется сервером Oracle, то запись в него производится с помощью команд alter system set ... scope=spfile | both.
Для создания SPFILE из PFILE используется команда create spfile [='path'] from pfile [='path']. При его использовании тот-же EMC будет пользоваться этими командами и писать в SPFILE на сервере
Как правило, использование SPFILE предпочтительней
Узнать, что используется SPFILE (и его расположение) можно с помощью запроса: select value from v$parameter where name='spfile'
# IFILE=/SPFILE= в файле PFILE используются для включения другого PFILE/SPFILE соответственно