Ajuste de Redo Logs no Oracle


Os redo logs são componentes essenciais para a integridade e recuperação de um banco de dados Oracle.
Um ajuste adequado desses logs melhora o desempenho do sistema e evita erros como "Thread X cannot allocate new log".
Este guia aborda como visualizar, remover, recriar e ajustar os redo logs para garantir um ambiente de banco de dados eficiente.
1. Verificando a Configuração Atual dos Redo Logs
Antes de realizar alterações, é necessário compreender a configuração atual dos redo logs no seu ambiente.
Listar os grupos de redo logs e seus tamanhos
Para verificar o tamanho de cada grupo de redo logs em megabytes, utilize o seguinte comando SQL:
SELECT GROUP#, SUM(BYTES/1024/1024) AS "Size in MB" FROM V$LOG GROUP BY GROUP#;
Listar os arquivos físicos dos redo logs
Para identificar os arquivos físicos associados aos redo logs, execute:
SELECT * FROM V$LOGFILE;
Verificar detalhes dos redo logs
Obtenha informações como tamanho, número de membros e status de cada grupo com:
SELECT GROUP#, BYTES/1024/1024 AS MB, MEMBERS, STATUS FROM V$LOG;
2. Removendo os Redo Logs Antigos
Se for necessário recriar os redo logs (por exemplo, para ajustar tamanhos ou número de grupos), siga este procedimento com atenção.
Importante: Antes de remover um grupo de redo logs, verifique se ele não está no status CURRENT
. Consulte o status com:
SELECT GROUP#, STATUS FROM V$LOG;
Caso o grupo esteja como CURRENT
, force um log switch para torná-lo inativo:
ALTER SYSTEM SWITCH LOGFILE;
Remover os redo logs antigos
Para excluir os grupos existentes, utilize os seguintes comandos:
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;
ALTER DATABASE DROP LOGFILE GROUP 4;
ALTER DATABASE DROP LOGFILE GROUP 5;
Verificar a remoção
Confirme que os grupos foram removidos corretamente:
SELECT GROUP#, BYTES/1024/1024 AS MB, MEMBERS, STATUS FROM V$LOG;
3. Criando Novos Redo Logs
Após a remoção, recrie os redo logs com 5 grupos de 5GB cada, distribuindo os arquivos entre diretórios distintos para otimizar desempenho e resiliência.
Criar redo logs com caminhos específicos
Adicione os novos grupos com os comandos abaixo, especificando dois membros por grupo em discos diferentes:
ALTER DATABASE ADD LOGFILE GROUP 1
('/u02/oradata/eusouodba/onlinelog/redo1a.redo', '/u03/fast_recovery_area/eusouodba/onlinelog/redo1b.redo')
SIZE 5G;
ALTER DATABASE ADD LOGFILE GROUP 2
('/u02/oradata/eusouodba/onlinelog/redo2a.redo', '/u03/fast_recovery_area/eusouodba/onlinelog/redo2b.redo')
SIZE 5G;
ALTER DATABASE ADD LOGFILE GROUP 3
('/u02/oradata/eusouodba/onlinelog/redo3a.redo', '/u03/fast_recovery_area/eusouodba/onlinelog/redo3b.redo')
SIZE 5G;
ALTER DATABASE ADD LOGFILE GROUP 4
('/u02/oradata/eusouodba/onlinelog/redo4a.redo', '/u03/fast_recovery_area/eusouodba/onlinelog/redo4b.redo')
SIZE 5G;
ALTER DATABASE ADD LOGFILE GROUP 5
('/u02/oradata/eusouodba/onlinelog/redo5a.redo', '/u03/fast_recovery_area/eusouodba/onlinelog/redo5b.redo')
SIZE 5G;
Dica: Distribuir os redo logs entre discos distintos (como /u02
e /u03
) melhora o desempenho de I/O e reduz o risco de falhas caso um disco apresente problemas.
4. Criando Redo Logs com OMF (Oracle Managed Files)
Se o ambiente utiliza Oracle Managed Files (OMF), você pode criar os redo logs sem especificar caminhos explícitos. O Oracle gerenciará os locais com base no parâmetro DB_CREATE_FILE_DEST
:
ALTER DATABASE ADD LOGFILE GROUP 1 SIZE 5G;
ALTER DATABASE ADD LOGFILE GROUP 2 SIZE 5G;
ALTER DATABASE ADD LOGFILE GROUP 3 SIZE 5G;
5. Forçando Log Switch e Checkpoint
Após criar os novos redo logs, é recomendável forçar um log switch e um checkpoint para garantir que o banco de dados reconheça as alterações:
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM CHECKPOINT;
6. Ajustando a Frequência de Geração de Archive Logs
Em modo ARCHIVELOG, configurar um intervalo para geração de archive logs ajuda a controlar o tempo de recuperação e a prevenir acúmulo excessivo de logs.
Verificar a configuração atual
Consulte o valor atual do parâmetro:
SHOW PARAMETER ARCHIVE_LAG_TARGET;
Configurar para 15 minutos
Defina o intervalo para 900 segundos (15 minutos):
ALTER SYSTEM SET ARCHIVE_LAG_TARGET = 900 SCOPE=BOTH;
Benefícios:
Arquivamento regular dos logs reduz o risco de perda de dados.
Torna o tempo de recuperação mais previsível em caso de falhas.
7. Configuração de Checkpoints e Recuperação Automática
Para ambientes que suportam Fast-Start Fault Recovery (disponível na Enterprise Edition), ajuste o parâmetro FAST_START_MTTR_TARGET
para otimizar o tempo de recuperação.
Verificar a configuração atual
SHOW PARAMETER FAST_START_MTTR_TARGET;
Configurar para 15 minutos
Defina o tempo máximo de recuperação como 900 segundos:
ALTER SYSTEM SET FAST_START_MTTR_TARGET = 900 SCOPE=BOTH;
Nota: Em bancos Standard Edition, esse parâmetro pode gerar o erro ORA-00439: feature not enabled: Fast-Start Fault Recovery
. Nesse caso, utilize o parâmetro LOG_CHECKPOINT_INTERVAL
para ajustar a frequência dos checkpoints.
Essas ações resultam em um ambiente mais eficiente, seguro e preparado para recuperação em caso de falhas.
Resume Block:
-- 1. Verificando a Configuração Atual dos Redo Logs
-- Lista os grupos de redo logs e calcula o tamanho total em MB por grupo
SELECT GROUP#, SUM(BYTES/1024/1024) AS "Size in MB"
FROM V$LOG
GROUP BY GROUP#;
-- Mostra os arquivos físicos associados aos redo logs, incluindo caminhos
SELECT * FROM V$LOGFILE;
-- Exibe detalhes dos redo logs: grupo, tamanho em MB, número de membros e status
SELECT GROUP#, BYTES/1024/1024 AS MB, MEMBERS, STATUS FROM V$LOG;
-- 2. Verificando o Status Antes de Remover Redo Logs
-- Verifica o status de cada grupo para garantir que nenhum esteja CURRENT antes da remoção
SELECT GROUP#, STATUS FROM V$LOG;
-- Força um log switch para mudar o grupo CURRENT para INACTIVE, se necessário
ALTER SYSTEM SWITCH LOGFILE;
-- 3. Removendo Redo Logs Antigos
-- Remove os grupos de redo logs existentes (exemplo com 5 grupos)
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;
ALTER DATABASE DROP LOGFILE GROUP 4;
ALTER DATABASE DROP LOGFILE GROUP 5;
-- Confirma que os grupos foram removidos com sucesso
SELECT GROUP#, BYTES/1024/1024 AS MB, MEMBERS, STATUS FROM V$LOG;
-- 4. Criando Novos Redo Logs com Caminhos Específicos
-- Adiciona 5 grupos de redo logs com 5GB cada, distribuindo membros em discos diferentes
ALTER DATABASE ADD LOGFILE GROUP 1 ('/u02/oradata/eusouodba/onlinelog/redo1a.redo', '/u03/fast_recovery_area/eusouodba/onlinelog/redo1b.redo') SIZE 5G;
ALTER DATABASE ADD LOGFILE GROUP 2 ('/u02/oradata/eusouodba/onlinelog/redo2a.redo', '/u03/fast_recovery_area/eusouodba/onlinelog/redo2b.redo') SIZE 5G;
ALTER DATABASE ADD LOGFILE GROUP 3 ('/u02/oradata/eusouodba/onlinelog/redo3a.redo', '/u03/fast_recovery_area/eusouodba/onlinelog/redo3b.redo') SIZE 5G;
ALTER DATABASE ADD LOGFILE GROUP 4 ('/u02/oradata/eusouodba/onlinelog/redo4a.redo', '/u03/fast_recovery_area/eusouodba/onlinelog/redo4b.redo') SIZE 5G;
ALTER DATABASE ADD LOGFILE GROUP 5 ('/u02/oradata/eusouodba/onlinelog/redo5a.redo', '/u03/fast_recovery_area/eusouodba/onlinelog/redo5b.redo') SIZE 5G;
-- 5. Criando Redo Logs com OMF (Oracle Managed Files)
-- Cria grupos de redo logs sem especificar caminhos, usando OMF (se configurado)
ALTER DATABASE ADD LOGFILE GROUP 1 SIZE 5G;
ALTER DATABASE ADD LOGFILE GROUP 2 SIZE 5G;
ALTER DATABASE ADD LOGFILE GROUP 3 SIZE 5G;
-- 6. Forçando Log Switch e Checkpoint
-- Força um log switch para ativar os novos redo logs
ALTER SYSTEM SWITCH LOGFILE;
-- Executa um checkpoint para garantir consistência após as alterações
ALTER SYSTEM CHECKPOINT;
-- 7. Ajustando a Frequência de Geração de Archive Logs
-- Verifica o valor atual do parâmetro ARCHIVE_LAG_TARGET
SHOW PARAMETER ARCHIVE_LAG_TARGET;
-- Define o arquivamento de logs a cada 900 segundos (15 minutos)
ALTER SYSTEM SET ARCHIVE_LAG_TARGET = 900 SCOPE=BOTH;
-- 8. Configurando Checkpoints e Recuperação Automática
-- Verifica o valor atual do parâmetro FAST_START_MTTR_TARGET
SHOW PARAMETER FAST_START_MTTR_TARGET;
-- Define o tempo máximo de recuperação como 900 segundos (15 minutos)
ALTER SYSTEM SET FAST_START_MTTR_TARGET = 900 SCOPE=BOTH;
Subscribe to my newsletter
Read articles from Sergio Bender directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by