Ajuste de Redo Logs no Oracle

Sergio BenderSergio Bender
6 min read

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;
0
Subscribe to my newsletter

Read articles from Sergio Bender directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Sergio Bender
Sergio Bender