PFILE vs SPFILE
Arquivos de Parâmetros
O Oracle Database utiliza arquivos de parâmetros para configurar o comportamento da instância durante o startup. Existem dois tipos: PFILE (arquivo texto) e SPFILE (arquivo binário servidor).
PFILE (Parameter File)
Arquivo texto editável manualmente. Nome padrão: init<SID>.ora
- Editável com qualquer editor de texto
- Localizado no cliente ou servidor
- Mudanças não persistem automaticamente
- Requer restart para aplicar alterações
Localização:
Linux: $ORACLE_HOME/dbs/init<SID>.ora
Windows: %ORACLE_HOME%\database\init<SID>.ora
SPFILE (Server Parameter File)
Arquivo binário gerenciado pelo Oracle. Nome padrão: spfile<SID>.ora
- Não editável manualmente (binário)
- Sempre no servidor
- Mudanças persistem automaticamente
- Suporta alterações dinâmicas
Localização:
Linux: $ORACLE_HOME/dbs/spfile<SID>.ora
Windows: %ORACLE_HOME%\database\spfile<SID>.ora
Ordem de Pesquisa no Startup
O Oracle procura os arquivos nesta ordem:
- SPFILE especificado via STARTUP PFILE (se fornecido)
spfile$ORACLE_SID.oraspfile.orainit$ORACLE_SID.ora
Conversão entre PFILE e SPFILE
-- Criar SPFILE a partir de PFILE
CREATE SPFILE FROM PFILE;
-- Cria spfile.ora a partir de init.ora
-- Criar SPFILE a partir de PFILE específico
CREATE SPFILE='/u01/app/oracle/dbs/spfileORCL.ora'
FROM PFILE='/tmp/initORCL_backup.ora';
-- Criar PFILE a partir de SPFILE (para edição/backup)
CREATE PFILE FROM SPFILE;
-- Criar PFILE em localização específica
CREATE PFILE='/backup/initORCL_backup.ora'
FROM SPFILE;
-- Criar PFILE a partir da memória (instância em execução)
CREATE PFILE='/tmp/initORCL_current.ora'
FROM MEMORY;
-- Ver qual arquivo está sendo usado
SHOW PARAMETER spfile;
-- Se VALUE está vazio, está usando PFILE
-- Se tem caminho, está usando SPFILE
ALTER SYSTEM e Escopo de Mudanças
Modificando Parâmetros Dinamicamente
O comando ALTER SYSTEM permite modificar parâmetros sem necessariamente reiniciar o banco. O comportamento depende da cláusula SCOPE.
SCOPE = MEMORY
Altera apenas a instância em execução. Mudança é perdida no próximo restart.
- Afeta apenas a instância atual
- Não modifica o SPFILE/PFILE
- Útil para testes temporários
ALTER SYSTEM SET sort_area_size = 10485760 SCOPE = MEMORY;
SCOPE = SPFILE
Grava apenas no SPFILE. Mudança não afeta a instância atual, apenas o próximo startup.
- Não afeta instância atual
- Grava no SPFILE
- Requer SPFILE (erro se usando PFILE)
- Requer restart para aplicar
ALTER SYSTEM SET db_cache_size = 2G SCOPE = SPFILE;
-- Requer SHUTDOWN/STARTUP para aplicar
SCOPE = BOTH (Padrão)
Altera a instância atual E grava no SPFILE. Melhor dos dois mundos para parâmetros dinâmicos.
- Afeta instância imediatamente
- Grava no SPFILE (se existir)
- Mudança persiste após restart
- Só funciona com parâmetros dinâmicos
ALTER SYSTEM SET sessions = 500 SCOPE = BOTH;
-- Aplica agora E persiste no SPFILE
Tipos de Parâmetros
Parâmetros Dinâmicos
Podem ser alterados com SCOPE = BOTH ou MEMORY.
Não requerem restart.
- log_archive_dest_1
- db_cache_advice
- timed_statistics
- parallel_max_servers
Parâmetros Estáticos
Só podem ser alterados com SCOPE = SPFILE.
Requerem restart da instância.
- db_block_size
- db_name
- compatible
- processes
Consultando Parâmetros
-- Consultar um parâmetro específico
SHOW PARAMETER sga_target;
-- Consultar vários parâmetros (com wildcard)
SHOW PARAMETER memory;
-- Ver todos os parâmetros
SELECT name, value, isdefault, ismodified
FROM v$parameter
ORDER BY name;
-- Ver parâmetros modificados (não-padrão)
SELECT name, value
FROM v$parameter
WHERE isdefault = 'FALSE'
ORDER BY name;
-- Ver parâmetros no SPFILE (valores persistidos)
SELECT name, value
FROM v$spparameter
WHERE value IS NOT NULL
ORDER BY name;
-- Comparar memória vs SPFILE
SELECT p.name, p.value AS current_value, sp.value AS spfile_value
FROM v$parameter p, v$spparameter sp
WHERE p.name = sp.name
AND p.value != sp.value
AND sp.value IS NOT NULL
ORDER BY p.name;
-- Ver histórico de mudanças
SELECT name, value, update_comment
FROM v$parameter_valid_values
WHERE name = 'sga_target';
Parâmetros Essenciais
Parâmetros de Memória
MEMORY_TARGET (Automatic Memory Management)
Define o total de memória gerenciada automaticamente pelo Oracle (SGA + PGA). Mais simples, mas menos controle granular.
-- Habilitar AMM (requer restart)
ALTER SYSTEM SET memory_target = 4G SCOPE = SPFILE;
ALTER SYSTEM SET memory_max_target = 4G SCOPE = SPFILE;
-- Desabilitar parâmetros manuais quando usar AMM
ALTER SYSTEM SET sga_target = 0 SCOPE = SPFILE;
ALTER SYSTEM SET pga_aggregate_target = 0 SCOPE = SPFILE;
SGA_TARGET (Automatic Shared Memory Management)
Gerenciamento automático apenas da SGA. Oracle aloca automaticamente buffer cache, shared pool, etc.
-- Configurar ASMM
ALTER SYSTEM SET sga_target = 3G SCOPE = BOTH;
ALTER SYSTEM SET pga_aggregate_target = 1G SCOPE = BOTH;
-- Verificar distribuição automática
SELECT component, current_size/1024/1024 AS size_mb
FROM v$sga_dynamic_components
WHERE current_size > 0;
Configuração Manual (Sem AMM/ASMM)
-- Desabilitar gerenciamento automático
ALTER SYSTEM SET memory_target = 0 SCOPE = SPFILE;
ALTER SYSTEM SET sga_target = 0 SCOPE = SPFILE;
-- Configurar componentes manualmente
ALTER SYSTEM SET db_cache_size = 2G SCOPE = SPFILE;
ALTER SYSTEM SET shared_pool_size = 800M SCOPE = SPFILE;
ALTER SYSTEM SET large_pool_size = 200M SCOPE = SPFILE;
ALTER SYSTEM SET java_pool_size = 100M SCOPE = SPFILE;
ALTER SYSTEM SET pga_aggregate_target = 1G SCOPE = SPFILE;
Parâmetros de Controle e Redo
CONTROL_FILES
Localização dos control files. Sempre use múltiplos control files em discos diferentes.
-- Ver control files atuais
SHOW PARAMETER control_files;
-- Modificar (requer shutdown, cópia manual, e startup)
ALTER SYSTEM SET control_files =
'/u02/oradata/ORCL/control01.ctl',
'/u03/oradata/ORCL/control02.ctl',
'/u04/oradata/ORCL/control03.ctl'
SCOPE = SPFILE;
LOG_ARCHIVE_DEST_N e DB_RECOVERY_FILE_DEST
Destinos para arquivamento de redo logs (modo ARCHIVELOG).
-- Configurar Fast Recovery Area
ALTER SYSTEM SET db_recovery_file_dest = '/u03/fra' SCOPE = BOTH;
ALTER SYSTEM SET db_recovery_file_dest_size = 50G SCOPE = BOTH;
-- Ou usar LOG_ARCHIVE_DEST_1
ALTER SYSTEM SET log_archive_dest_1 = 'LOCATION=/u03/archive' SCOPE = BOTH;
Parâmetros de Performance
PROCESSES
Número máximo de processos do sistema operacional que podem conectar à instância. Estático - requer restart.
ALTER SYSTEM SET processes = 500 SCOPE = SPFILE;
SESSIONS
Número máximo de sessões simultâneas. Derivado de PROCESSES: (1.5 * PROCESSES) + 22
ALTER SYSTEM SET sessions = 750 SCOPE = SPFILE;
OPEN_CURSORS
Número máximo de cursores abertos que uma sessão pode ter. Dinâmico.
ALTER SYSTEM SET open_cursors = 500 SCOPE = BOTH;
COMPATIBLE
Define compatibilidade com versões anteriores. Atenção: Não pode ser revertido após commit!
-- Ver versão atual
SHOW PARAMETER compatible;
-- Aumentar (cuidado!)
ALTER SYSTEM SET compatible = '19.0.0' SCOPE = SPFILE;
Parâmetros de Tablespace e Undo
-- UNDO_TABLESPACE: tablespace para undo segments
ALTER SYSTEM SET undo_tablespace = UNDOTBS1 SCOPE = BOTH;
-- UNDO_RETENTION: tempo mínimo (segundos) para reter dados undo
ALTER SYSTEM SET undo_retention = 3600 SCOPE = BOTH;
-- DB_BLOCK_SIZE: tamanho do bloco (ESTÁTICO, só na criação do DB)
-- Valores comuns: 4K, 8K (padrão), 16K, 32K
SHOW PARAMETER db_block_size;
-- DB_CREATE_FILE_DEST: local padrão para OMF (Oracle Managed Files)
ALTER SYSTEM SET db_create_file_dest = '/u02/oradata' SCOPE = BOTH;
-- AUDIT_TRAIL: habilitar auditoria
ALTER SYSTEM SET audit_trail = DB, EXTENDED SCOPE = SPFILE;
Práticas Recomendadas
1. Sempre use SPFILE em produção
SPFILE garante que mudanças persistam e permite ALTER SYSTEM dinâmico. PFILE é útil apenas para emergências ou quando SPFILE está corrompido.
2. Faça backup do SPFILE antes de mudanças críticas
CREATE PFILE='/backup/initORCL_backup.ora' FROM SPFILE;
3. Teste mudanças com SCOPE=MEMORY primeiro
Para parâmetros dinâmicos, teste com MEMORY, verifique impacto, depois use BOTH.
4. Documente mudanças de parâmetros
Use comentários ou sistema de controle de versão para rastrear mudanças e justificativas.
5. Revise parâmetros ocultos com cuidado
-- Ver parâmetros ocultos (começam com _)
SELECT name, value, description
FROM v$parameter
WHERE name LIKE '\_%' ESCAPE '\';
-- CUIDADO: parâmetros ocultos são para uso interno Oracle
-- Só modifique sob orientação do Oracle Support!
6. Cuidado com COMPATIBLE
Uma vez aumentado e após commit, não pode ser revertido sem recriar o banco! Teste em ambiente não-produtivo primeiro.
Resultado Esperado
O que você deve dominar após este tópico:
Diferenciar PFILE e SPFILE
Entender vantagens e quando usar cada um
Converter entre formatos
CREATE SPFILE FROM PFILE e vice-versa
Usar ALTER SYSTEM corretamente
Compreender SCOPE: MEMORY, SPFILE, BOTH
Conhecer parâmetros essenciais
Memória, processos, undo, recovery, performance
Consultar parâmetros
SHOW PARAMETER, V$PARAMETER, V$SPPARAMETER
Aplicar best practices
Backup, testes, documentação de mudanças