quinta-feira, 13 de setembro de 2012

[ORACLE] Perda de REDOLOGS


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;









Nenhum comentário:

Postar um comentário