Antes de iniciar o procedimento, vai uma dica:
Sempre mantenha seus redologs multiplexados (recomenda-se dois membros para cada grupo), para evitar que o banco de dados pare, além de também evitar perda de dados, caso ocorra a perda de um grupo/membro de redolog em estado current.
Perda de somente um membro de um grupo de redolog:
Se os membros dos grupos de redolog estiverem multiplexados é muito simples corrigir este problema:
Como o banco de dados não para quando ocorre a perda de somente um membro de um grupo de redolog deve se prestar atenção nas mensagens logadas no log de alert e vindas do GRID CONTROL.
Exemplo de mensagem logada no log de alert:
Errors in file C:\APP\ORA\diag\rdbms\orcl\orcl\trace\orcl_lgwr_4560.trc:
ORA-00313: a abertura falhou para os membros do grupo 3 de log do thread 1
ORA-00312: thread 3 do log 1 on-line: 'C:\APP\ORA\ORADATA\ORCL\REDO03.LOG'
ORA-27041: n?o e possivel abrir arquivo
OSD-04002: não é possível abrir arquivo
O/S-Error: (OS 2) O sistema não pode encontrar o arquivo especificado.
Errors in file C:\APP\ORA\diag\rdbms\orcl\orcl\trace\orcl_lgwr_4560.trc:
ORA-00321: log 3 do thread 1; n?o e possivel atualizar o cabecalho do arquivo de log
ORA-00312: thread 3 do log 1 on-line: 'C:\APP\ORA\ORADATA\ORCL\REDO03.LOG'
Conecte-se a instância Oracle como usuário SYS:
C:\>sqlplus / as sysdba
E remova o membro de redolog perdido do dicionário de dados:
ALTER DATABASE
DROP LOGFILE MEMBER 'C:\app\ORA\oradata\ORCL\REDO03.log';
Após isso, o criamos novamente:
ALTER DATABASE
ADD LOGFILE MEMBER 'C:\app\ORA\oradata\ORCL\REDO03.log'
TO GROUP 3;
Caso o membro de redolog perdido seja do grupo no estado current, deve-se forçar a troca de grupo de redolog, antes de se executar os passos acima:
SQL>alter system switch logfile;
Perda de todos os membros de um grupo de REDOLOG:
Caso você perca todos os membros de um grupo de redolog (que não esteja no estado CURRENT), conforme já informado, a instância irá parar.
Neste caso, inicie a instância em modo MOUNT;
SQL>startup mount;
E remova do dicionário de dados o grupo de redolog perdido:
ALTER DATABASE DROP LOGFILE GROUP 2;
Após isso, crie-o novamente:
ALTER DATABASE
ADD LOGFILE GROUP 2 ('C:\APP\ORA\ORADATA\ORCL\REDO02.LOG', 'C:\APP\ORA\ORADATA\ORCL\REDO02_B.LOG')
SIZE 50M;
E abra a instância:
SQL>alter database open;
Perda de todos os membros de um grupo de REDOLOG no estado CURRENT:
Neste caso, haverá a perda dos dados que estavam neste grupo de redolog, pois eles não foram para disco, nem para a área de archive (por estarem no estado CURRENT).
Inicie a instância no modo MOUNT:
SQL>startup mount;
Será necessária uma recuperação incompleta do banco de dados para conseguir abri-lo novamente. Conecte-se ao RMAN:
C:\>rman target /
E inicie a restauração:
RMAN> RESTORE DATABASE UNTIL TIME '08-09-2012:17:00:00';
*Sempre mantenha em dia seus backups, pois caso ocorra uma situação desta, podemos diminuir a quantidade de dados perdidos.
E depois a recuperação:
RMAN> RECOVER DATABASE UNTIL TIME '08-09-2012:17:00:00';
Repare que ocorrerá erros ao final da recuperação justamente pela perda do grupo de redolog, ignore estes erros e ao término da recuperação, inicie a instância utilizando a opção RESETLOGS:
SQL>alter database open resetlogs;