Translate

sábado, 7 de janeiro de 2012

Oracle - Restaurar banco de dados

Não é incomum uma instância de banco de dados Oracle corromper após uma repentina queda de energia.

Quando seu banco de dados sofre algum nível de corrupção e não abre por isso, a primeira saída é remeter o problema para o DBA responsável.

Jamais remova, modifique ou mova de lugar qualquer arquivo do banco de dados porque o Oracle possui muitas referências à estes arquivos para seu controle e, inclusive, para permitir a recuperação de falhas.

Se você não tiver um DBA em sua empresa e for você mesmo o responsável, segue uma receita para tentar restaurar o banco de dados.

1) Diagnóstico

O diagnóstico pode ser realizado através do log de abertura do banco de dados. Na máquina do banco de dados, utilize um prompt do MS-DOS:

   C:\>set ORACLE_SID=nomeinstancia
   C:\>sqlplus /nolog
   SQL>conn / as sysdba
   SQL>shutdown immediate
   SQL>startup

Após executar estes comandos, caso a sua instância tenha problema para iniciar, o erro será apresentado.

2) Solução para CONTROLFILE corrompido

Avalie se o problema tem relação com CONTROLFILE corrompido, caso tenha ocorrido isso, vá até a pasta do CONTROLFILE e copie o control01.ctl como control03.ctl. Depois execute um novo SHUTDOWN IMMEDIATE seguido de um novo STARTUP.

Se quiser entender melhor sobre CONTROLFILES, acesse: http://docs.oracle.com/cd/B10500_01/server.920/a96521/control.htm

3) Solução para outras corrupções

Há situações de corrupção relacionadas a logs ou datafiles, diferente de CONTROLFILE, neste caso, pode ser uma saída indicar ao Oracle para tentar recuperar a instância automaticamente na abertura.

Os comandos abaixo podem restaurar a instância se o nível de corrupção não for extremamente severo.


   C:\>set ORACLE_SID=nomeinstancia
   C:\>sqlplus /nolog
   SQL>conn / as sysdba
   SQL>shutdown immediate
   SQL>startup mount
   SQL>alter database recover until cancel using backup controlfile;
   SQL>alter database recover continue default;
   SQL>alter database recover cancel;
   SQL>alter database open resetlogs;
   SQL>exit

 Boa sorte!