Cada instância de um banco de dados Oracle tem um log redo associado para proteger o banco de dados em caso de uma falha da instância.
1) Localização dos arquivos de redo:
Para identificarmos onde os arquivos de redo log do banco de dados são gravados, podemos utilizar o comando abaixo:
set lines 200
col member format a45
SELECT * FROM V$LOGFILE;
GROUP# STATUS TYPE MEMBER IS_
1 ONLINE +DG_REDO_01/redo_file_0101.log NO
1 ONLINE +DG_REDO_02/redo_file_0102.log NO
2 ONLINE +DG_REDO_01/redo_file_0201.log NO
2 ONLINE +DG_REDO_02/redo_file_0202.log NO
3 ONLINE +DG_REDO_01/redo_file_0301.log NO
3 ONLINE +DG_REDO_02/redo_file_0302.log NO
2) Verificar o status do redo log file:
Podemos verificar o status de utilização dos arquivos de redo. Para isso, podemos utilizar o SQL abaixo:
set lines 200
SELECT * FROM V$LOG;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
1 1 1395775 1,0486E+10 512 2 NO CURRENT 9,0767E+11 01/07/2016 11:41:51 2,8147E+14
2 1 1395773 1,0486E+10 512 2 YES INACTIVE 9,0767E+11 01/07/2016 11:09:07 9,0767E+11 01/07/2016 11:30:23
3 1 1395774 1,0486E+10 512 2 YES INACTIVE 9,0767E+11 01/07/2016 11:30:23 9,0767E+11 01/07/2016 11:41:51
3) Forçar a troca do redo log files:
Em alguns casos, podemos ter a necessidade de fazer com que o grupo de redo que está sendo utilizado no momento seja alterado. Isso geralmente ocorre quando criamos novos grupos de redo e queremos verificar se eles estão funcionando corretamente.
Para fazermos essa alteração, devemos utilizar o comando abaixo:
ALTER SYSTEM SWITCH LOGFILE;
Após a execução do SWITCH LOGFILE, podemos executar novamente o comando SELECT * FROM V$LOG; e veremos que o grupo de redo CURRENT, foi alterado em relação ao obtido anteriormente como o mesmo comando.
4) Adicionar grupos de redo log
Em muitos casos, pode existir a necessidade de adicionarmos grupos de redo log em nosso ambiente e para isso, podemos seguir o exemplo abaixo, onde segue um exemplo de inclusão de grupos de redo.
Para um ambiente single:
alter database add logfile thread 1 group 1 ('+DG_01/redo_0101.log','+DG_02/redo_0102.log') size 90M;
alter database add logfile thread 1 group 2 ('+DG_01/redo_0201.log','+DG_02/redo_0202.log') size 90M;
alter database add logfile thread 1 group 3 ('+DG_01/redo_0301.log','+DG_02/redo_0302.log') size 90M;
Para um ambiente cluster (RAC) com 2 nodes:
alter database add logfile thread 1 group 1 ('+DG_01/redo_0101.log','+DG_02/redo_0102.log') size 100M;
alter database add logfile thread 1 group 2 ('+DG_01/redo_0201.log','+DG_02/redo_0202.log') size 100M;
alter database add logfile thread 1 group 3 ('+DG_01/redo_0301.log','+DG_02/redo_0302.log') size 100M;
alter database add logfile thread 2 group 4 ('+DG_01/redo_0401.log','+DG_02/redo_0402.log') size 100M;
alter database add logfile thread 2 group 5 ('+DG_01/redo_0501.log','+DG_02/redo_0502.log') size 100M;
alter database add logfile thread 2 group 6 ('+DG_01/redo_0601.log','+DG_02/redo_0602.log') size 100M;
Onde:
- thread corresponde ao node do cluster que utilizará os arquivos de redo log criados;
- group é o grupo de redo criado, onde devemos ter 2 datafiles para cada grupo, como prevenção contra corrupção;
O valor padrão do Oracle para cada grupo de redo é de 50M, mas dependendo do ambiente esse valor pode ser aumentado, mas devemos tomar cuidado, pois os arquivos de redo não devem ser muito grandes, pois em caso de falha, a quantidade de registros em redo que podem ser perdidos será grande e não teremos como recuperá-los.
5) Excluir grupo de redo log files:
Para excluirmos um grupo de redo, podemos utilizar o comando abaixo:
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;
Algumas informações importantes sobre a exclusão de grupos de redo:
1 - Quando excluímos um grupo de redo, os datafiles correspondentes não são excluídos do banco de dados, será necessário excluí-los manualmente;
2 - Só podemos excluir grupos de redo que não estejam em utilização, devem estar com o status INACTIVE.
3 - Muito cuidado para não remover datafiles de grupos de redo ativos, pois poderemos corromper arquivos necessários para o banco de dados.
Para verificar os grupos de redo ativos, devemos executar o comando abaixo:
set lines 200
SELECT * FROM V$LOG;
GROUP# THREAD# SEQUENCE# BYTES BLOCK MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
1 1 1395775 1,0486E+10 512 2 NO CURRENT 9,0767E+11 01/07/2016 11:41:51 2,8147E+14
2 1 1395773 1,0486E+10 512 2 YES INACTIVE 9,0767E+11 01/07/2016 11:09:07 9,0767E+11 01/07/2016 11:30:23
3 1 1395774 1,0486E+10 512 2 YES INACTIVE 9,0767E+11 01/07/2016 11:30:23 9,0767E+11 01/07/2016 11:41:51
Em muitos casos, quando criamos novos grupos de REDO, os grupos antigos ainda estão em utilização pelo banco de dados.
Para excluirmos esses grupos antigos precisaremos aguardar que os grupos novos passem a ser utilizados pelo banco de dados ou podemos forçar que os novos grupos passem a ser utilizados, liberando os grupos antigos.
Para isso, podemos utilizar o comando abaixo:
ALTER SYSTEM SWITCH LOGFILE;
Ao executarmos o comando [ ALTER SYSTEM SWITCH LOGFILE; ] imediatamente é gerado um log file e um novo grupo de redo começa a ser utilizado.
Em seguida, devemos fazer uma nova verificação dos grupos de redo em utilização e quando o grupo antigo estiver com o status INACTIVE, podemos fazer a remoção do grupo de redo com o comando: ALTER DATABASE DROP LOGFILE GROUP
Referência:
https://docs.oracle.com/cd/B28359_01/server.111/b28310/onlineredo001.htm