Olá pessoal!

O processo para inicialização de uma instância no banco Oracle é feito a partir da leitura do seu arquivo de inicialização, e os tipos desse arquivo é o assunto que vou abordar hoje.

Existem dois tipos de arquivos de inicialização para o Oracle: o PFILE (que é um arquivo texto conhecido também por init.ora) e o SPFILE que é um arquivo binário de parâmetros do servidor (conhecido como spfile.ora).

No post de hoje vou falar sobre alguns conceitos relacionados a esses arquivos, porém não vou entrar no detalhe sobre parâmetros, ou pelo menos não é minha ideia, pois o intuito desse artigo é falar sobre o que são esses arquivos, como e quando são usados.

O PFILE
Esse arquivo armazena os parâmetros de inicialização para "levantar" uma instância Oracle. Através desse arquivo, o DBA pode controlar a memória em seu banco de dados Oracle, atribuindo valores para os parâmetros de memória no arquivo INIT.ORA para o seu sistema. A localização deste arquivo varia, dependendo do sistema operacional em questão. Por exemplo:
 - No UNIX ou Linux, o init.ora poderá ser encontrado em: $ORACLE_HOME/dbs
 - No Windows, o diretório será: ORACLE_HOME/database

É possível que em alguns sistemas, exista mais de um arquivo init.ora, o que possibilita ter diferentes bases de dados com seus próprios parâmetros.

Por exemplo, initDESENV.ora pode controlar o banco de dados de desenvolvimento, initHML.ora o banco de dados de homologação, e initPROD.ora banco de dados de produção; ou ainda diferentes ambientes, como: initRH.ora, initFIN.ora, initADM.ora...

Como o PFILE é um arquivo de texto puro, ele pode ser editado no VI do UNIX ou no Notepad do Windows.

Para saber quais parâmetros podem ser alterados no PFILE, recomendo a leitura dos artigos: “INIT.ORA Parameters A-L” e “INIT.ORA Parameters M-Z” da TOAD WORLD.

O SPFILE (server parameter file)
O arquivo SPFILE é uma versão binária do PFILE. O SPFILE não pode ser alterado diretamente, porém através do comando ALTER SYSTEM é possível mudar alguns de seus parâmetros dinamicamente, ou seja, sem a necessidade de reiniciar o banco de dados. Para saber quais parâmetros podem ser alterados dinamicamente, pode-se executar uma consulta em uma view do schema SYS, conforme script abaixo:
SELECT * FROM V$PARAMETER;

O SPFILE possui algumas vantagens em relação ao PFILE, pois a Oracle criou procedimentos de otimização automática do banco baseadas no uso do SPFILE.

É possível verificar se existe o SPFILE com o seguinte comando:
SHOW PARAMETER SPFILE;

Para criar o SPFILE a partir do PFILE, pode-se utilizar os seguintes comandos:
CREATE SPFILE FROM PFILE;
ou
CREATE SPFILE FROM PFILE=’/U01/APP/ORACLE/PRODUCT/11.2.0/DBHOME_1/DBS/initSID.ORA’
ou
CREATE SPFILE=’/U01/APP/ORACLE/PRODUCT/11.2.0/DBHOME_1/DBS/spfileSID.ORA’ FROM PFILE=’/U01/APP/ORACLE/PRODUCT/11.2.0/DBHOME_1/DBS/initSID.ORA’

Após de qualquer um desses comandos, para efetivar a criação, é necessário reiniciar o banco:
SHUTDOWN IMMEDIATE;
STARTUP

Pode existir a necessidade, devido a alguma mudança dinâmica dos parâmetros do banco, que o DBA necessite gerar um novo init.ora (PFILE), a partir do SPFILE. O comando para realizar essa criação é:
CREATE PFILE FROM SPFILE;

Executando esse script, será criado um PFILE chamado init.ora no diretório $ORACLE_HOME/dbs (Linux/Unix) ou no $ORACLE_HOME/database (Windows).

É possível também que o DBA especifique um diretório de sua preferência para gravar o PFILE, basta executar comando:
CREATE PFILE=C:/TEMP/initTESTE.ORA FROM SPFILE;

Caso seja necessário iniciar um banco Oracle com o PFILE pode-se utilizar o seguinte comando:
STARTUP OPEN PFILE='/OPT/ORACLE/PRODUCT/9IR2/DBS/initSID.ORA'

Uma consulta interessante para saber se sua instância está utilizando o SPFILE ou PFILE, é apresentada abaixo:
SELECT DECODE (VALUE, NULL, 'PFILE', 'SPFILE') "INIT FILE TYPE" FROM SYS.V_$PARAMETER WHERE NAME = 'SPFILE';

É importante saber que para iniciar uma instância Oracle, os parâmetros de inicialização são buscados nos diretórios devidos (mencionados anteriormente com a variação entre UNIX e WINDOWS), na seguinte ordem:
1.  spfileSID.ora
2.  spfile.ora
3.  initSID.ora
4.  init.ora

Bom pessoal, por hoje é só!

Espero ter ajudado a entender um pouco sobre arquivos de inicialização no banco Oracle.

Sinta-se a vontade para deixar seu comentário com críticas, sugestões ou elogios sobre os artigos. Isso me ajuda a saber se agrado ou não com meus artigos e seus temas.

Grande abraço e até a próxima!

Referências:

ORACLE HOME. Disponível em: http://www.oracle-home.ro/Oracle_Database/Maintenance/PFILEvsSPFILE.html. Acessado em: 20/05/2013.

Carvalho, Pedro - Arquivos de Parâmetros PFILE e SPFILE do Oracle. Disponível em: http://www.pedrofcarvalho.com.br/PDF/ORACLE_SPFILE_PFILE.pdf. Acessado em: 20/05/2013.

Oracle - Starting Up a Database. Disponível em: http://docs.oracle.com/cd/B28359_01/server.111/b28310/start001.htm. Acessado em: 21/05/2013.

Oracle - Specifying Initialization Parameters. Disponível em: http://docs.oracle.com/cd/B28359_01/server.111/b28310/create005.htm. Acessado em: 21/05/2013.

TOAD WORLD - INIT.ORA Parameters A-L. INIT.ORA Disponível em: http://www.toadworld.com/KNOWLEDGE/KnowledgeXpertforOracle/tabid/648/TopicID/ARC513A/Default.aspx. Acessado em: 21/05/2013.

TOAD WORLD - INIT.ORA Parameters M-Z. Disponível em: http://www.toadworld.com/KNOWLEDGE/KnowledgeXpertforOracle/tabid/648/TopicID/ARC513B/Default.aspx. Acessado em: 21/05/2013.

TOAD WORLD - INIT.ORA Parameters. Disponível em: http://www.toadworld.com/KNOWLEDGE/KnowledgeXpertforOracle/tabid/648/TopicID/ARC513/Default.aspx. Acessado em: 21/05/2013.

TOAD WORLD - Creating an SPFILE. Disponível em: http://www.toadworld.com/KNOWLEDGE/KnowledgeXpertforOracle/tabid/648/TopicID/SPF1/Default.aspx. Acessado em: 21/05/2013.