Dica simples mas interessante

Perdi um controlfile…Olá DBA! Ela chegou!!! Como assim: “Ela quem???” A Sexta-feira Uai… – Esse “uai” foi pra homenagear tantos amigos mineiros, eta gente boa dimais da conta sô… rsrsrsrs.

Hoje não vou alongar muito na explicação, mas vou comentar sobre algo bem interessante, a recuperação rápida do controlfile em caso de perda de um deles em ambiente multiplexado com ASM.

Você sabe, e se ainda não souber vou te falar agora, controlfile, ou arquivo de controle do banco de dados, é aquele arquivo que vem para provar que não só os grandes arquivos do banco de dados, como datafiles, redologs são importantes, estou falando de um arquivo pequenininho, mas que traz todas as informações do banco de dados, todos os dados importantes a respeito do mapeamento da banco, seu SCN, endereço dos datafiles, etc.

A perda de todos os controlfile pode ser irreparável para o banco de dados. Sendo assim, sempre trabalharemos com ele multiplexado, ou seja, com cópias redundantes e exatamente iguais. Assim, “estragando”, perdendo, sumindo alguma delas poderemos facilmente fazer um clone e gerar um outro arquivo.

Quando esta perda ocorre em um ambiente onde o banco está trabalhando com ASM é muito fácil de resolver.

Vamos a solução…

Primeiramente, quando ocorre a perda de um controlfile o banco provavelmente irá abortar. Calma! Calma! Não precisa chamar os direitos humanos, polícia nem nada. Abortar o banco de dados pode. rsrsrsrs.

Então, caso ele não tenha caído ainda damos um shutdown abort nele:
SQL> shutdown abort

Depois colocar o banco em estado nomount. Porém gostaria de dar uma explicação rápida do motivo pelo qual colocar o banco em estado nomount. Dentre os estados que o banco de dados pode estar encontramos:
1- Nomount, onde ele apenas lê o arquivo de parâmetros e sobe a instância;
2- Mount, estágio onde ele lê o controlfile, localiza os datafiles mas não os abre;
3- Open, datafiles abertos, banco pronto para o trabalho.
Sendo assim, ele precisa ler o local dos controlfiles que está no arquivo SPFILE porém sem abrir o controlfile, porque afinal de contas ele está faltando em um dos lados.

Então, colocando o banco em estado nomount temos:
SQL> startup nomount

Assim basta agora um comando no RMAN e tudo estará resolvido:

$ rman target /
RMAN> restore controlfile from ‘+DATA/orcl/controlfile/current.270.79812123456’;

Com isso ele irá fazer uma cópia do controlfile que existe (FROM) para o local do controlfile perdido. Ok! Já sei que você pensou: “Como ele sabe o local do outro controlfile??”
Simples, ele leu o SPFILE lembra??? Lá tem o parâmetro dos endereços dos controlfiles.

Feito isso basta abrir o banco normalmente:
SQL>alter database open

Como aparece nos filmes:
THE END.

Bom final de semana! Que ele seja produtivo, justo e perfeito para todos!!!!

Grande abraço e até a próxima semana.

 

Sobre raul andrade

DBA e Instrutor Oracle, apaixonado pela minha família e por ensinar.
Esta entrada foi publicada em Dica iniciante. Adicione o link permanente aos seus favoritos.

Deixe uma resposta