Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


quarta-feira, 26 de dezembro de 2007

Restauração do ORACLE BASE e ORACLE HOME: É possível?

Por Eduardo Legatti

Olá,

Sim, é possível. Recentemente, tive um problema em um de nossos servidores de desenvolvimento utilizando o Oracle 10g release 1 (120 GB de dados) sobre o Suse Linux 9.2. O problema ocorreu após uma queda de energia elétrica na rede, o que ocasionou o desligamento abrupto da máquina sem o processo de shutdown apropriado. De fato, isto não teria acontecido se o nobreak na qual o equipamento estava ligado estivesse funcionando corretamente. Entretanto, por algum defeito técnico o mesmo não forneceu carga elétrica de emergência para manter o equipamento ligado até que fosse realizado o procedimento correto de shutdown do banco de dados e do servidor.

Devido a este fato, foi diagnosticado danos no sistema de arquivos da partição "/u01" (device /dev/hda6) – partição onde fica armazenada o software do banco de dados (ORACLE BASE e ORACLE_HOME) e, após constatar a inconsistência no sistema de arquivos da referida partição, foram executadas as ferramentas e2fsck e dd para tentar corrigir o sistema de arquivos com o objetivo de tentar gerar uma cópia da partição para outro disco. Como a operação não teve o sucesso esperado, a corrupção da partição "/u01" (/dev/hda6) deixou a mesma inutilizada. Por fim, foi decretada a perda completa e irrecuperável da partição onde o software Oracle estava instalado, e como conseqüência, a mesma foi removida do sistema operacional.

Em resumo, a perda da partição "/u01" ocasionou a perda do arquivo de inicialização spfile do banco de dados, o arquivo listener.ora, o arquivo de senha orapwd.ora e os diretórios contendo as informações do OEM Database Console entre outros diretórios (bdump, udump, cdump ...).

Como demonstrado abaixo, a instalação do software Oracle estava separada dos demais arquivos de banco de dados:

DISCO 1


/
/swap
/home
/boot
/u01 (Oracle Base / Oracle Home)

 
DISCO 2
 
/u02 (arquivos de banco de dados como data files, control files e redo log files)

DISCO 3

/u03 (arquivos de banco de dados como data files, control files e redo log files multiplexados)

DISCO 4

/u04 (arquivos de banco de dados como data files, control files e redo log files multiplexados)


Então, realizei as seguintes tarefas para re-configurar o ORACLE BASE e ORACLE HOME:
  • Criei o diretório /u01 na partição raiz do DISCO 1
Como root:

$ mkdir /u01 
$ chown -R oracle.dba /u01
$ chmod 775 /u01
  • Instalei o software Oracle (apenas o software) no diretório /u01
$ ./runinstaller –ignoresysprereqs
  • Após a instalação do software, utilizei o utilitário DBCA para gerar um script de criação do banco de dados (BD01.sh), para aproveitar os comandos gerados pelo mesmo:
$ mkdir -p /u01/app/oracle/admin/BD01/bdump 
$ mkdir -p /u01/app/oracle/admin/BD01/cdump
$ mkdir -p /u01/app/oracle/admin/BD01/create 
$ mkdir -p /u01/app/oracle/admin/BD01/pfile
$ mkdir -p /u01/app/oracle/admin/BD01/udump 
$ mkdir -p /u01/app/oracle/oradata/BD01
$ mkdir -p /u01/app/oracle/product/10.1.0/bd01/dbs
  • Após a execução dos comandos acima, aproveitei do script (BD01.sql) a linha abaixo para criar o arquivo de senhas
$ orapwd file=/u01/app/oracle/product/10.1.0/bd01/dbs/orapwBD01

Após isso, copiei o arquivo init.ora para o diretório /u01/app/oracle/product/10.1.0/bd01/dbs com o nome de initBD01.ora e realizei as seguintes alterações:
  • Alterei o parâmetro control_files para refletir o caminho atual dos arquivos de controle presentes nas partições u02, u03 e u04
  • alterei o parâmetro db_recovery_file_dest para refletir o caminho atual em /u03/oradata/BD01/flash_recovery_area
  • Para gerar o spfile, tive apenas que abrir o SQL*PLUS e executar o comando abaixo na qual retirei do script postDBCreation.sql:
SQL> create spfile='/u01/app/oracle/product/10.1.0/bd01/dbs/spfileBD01.ora'
  2  FROM
  3  pfile='/u01/app/oracle/product/10.1.0/bd01/dbs/initBD01.ora';
  • Para recriar o arquivo listener.ora, utilizei o utilitário Oracle Net Manager
  • Com relação aos diretórios do OEM Database Console tive apenas que recriá-lo utilizando o comando emca –r pelo fato de o repositório já estar criado.
Pronto. Ao executar o SQL*PLUS e digitar startup, o banco de dados abriu normalmente após o processo background SMON realizar a recuperação de instância, pelo fato de o banco de dados não ter sido fechado normalmente (devido a queda de energia). Com o banco de dados funcionando normalmente, apenas realizei algumas alterações no spfile (utilizando ALTER SYSTEM ...) para ajustar alguns parâmetros de configuração.



2 comentários:

Mauricio Melnik disse...

Olá

Achei muito bom que voce utilize OFA para seus bancos de dados.

Tem muitos DBA's que nao fazem isso.

Mauricio Melnik

Anônimo disse...

perfeito...apagaram o oracle-home do meu banco e consegui reconstruir tudo seguindo seu tutorial.

Obrigado mesmo.
Abs

Postagens populares