Como restaurar um banco de dados do Oracle Database 10g Express Edition num computador diferente do servidor de origem.


Como diz o Wagner Crivelini do Databasecast, o problema não é fazer o backup do banco de dados, é restaurar o mesmo.
     Recentemente tive que iniciar um projeto de migração de dados de uma base de dados que está no Oracle Database10g Express Edition, que daqui para frente tratarei como Oracle 10g Express,  para o SQL Server 2005, como não tenho experiência com Oracle e sim com SQL Server, tive  inúmeros problemas e dores de cabeça, então consegui junto com o DBA aqui da empresa, Walter Carvalho, restaurar o backup (no formato DUMP) do banco de dados utilizando alguns critérios e dicas pesquisadas em diversos sites na internet.

Observações:
     Tive alguns problemas quanto ao sistema, pois utilizo em minha maquina de produção uma versão do Windows 7 64 bits, no caso do Oracle 10g Express, ele funciona apenas em modo 32bits, é uma limitação dessa versão, então tive que criar um ambiente no Virtualbox, uma maquina virtual que é de licença gratuita, com o Windows 7 32 bits e instalar o  Oracle 10g Express nele, (antes disso fui teimoso e tentei restaurar no  Windows 7 64 bits com versões mais atuais do Oracle (Oracle 11g) e não prestou, creio que por falta de conhecimento ou incompatibilidade mesmo, ai procurei outro caminho).

     Outra coisa, não era do meu interesse colocar o banco em produção, precisava apenas ter acesso as tabelas para fazer a migração dos dados, então minha única preocupação foi saber se os dados estavam íntegros e o total de linhas de cada tabela na origem, para ver se correspondiam com o total de linhas do meu destino.
    Uma particularidade do banco que peguei, foi que o mesmo continha diversas tablespaces e diversos usuários com várias tabelas vinculadas a cada um deles, não era um banco simples.


continuando...

 Primeiramente, algumas coisas que tive que saber a respeito da base de dados (no meu caso tive a possibilidade de consultar o banco de origem, mas nem sempre isso acontece, então o cliente/DBA tem que passar essas informações):

1) Qual a versão do Oracle utilizado, porque como a base de dados é de um cliente, recebi apenas o arquivo de backup no formato DUMP (arquivo com extensão dmp).


(Caso seja possível consultar no servidor de origem, como exemplo, essa seria a tela)

2) Qual o usuário que fez o backup e senha do usuário, pois tive que criá-lo no Oracle 10g
Express em que iria restaurar o arquivo.
2.1) O usuário que for usado para importar deve ter permissão DBA.

(Apenas o exemplo de onde deve ser dada a permissão para o usuário)

3) Qual a nome da instância utilizada, pois também tinha que ser a mesma no meu banco de destino.
Comando: <selectsys_context('USERENV','DB_NAME') as Instancefrom dual;>

(Resultado do comando executado no Oracle)

4) Outro detalhe foi saber qual o charset utilizado no banco de origem, pois tive problemas com isso também, se for diferente, provoca perda de dados, então na instalação do Oracle 10g Express deve ser colocado um correspondente ao de origem.
4.1) Para esta versão do Oracle, Oracle 10g Express, não tem como escolher o charset na instalação,  tentar mudar ele na mão foi um parto e não resolveu para mim, então o ideal é baixar a versão com o mesmo charset do banco de origem, direto do site da Oracle.

(Opções de download do Oracle 10g Express)

O comando para fazer a verificação do charset é o seguinte:
<SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET';>

(Resultado do comando executado no Oracle)

     Considerando que já tenha o arquivo de backup do banco de dados (arquivo DUMP), vamos às modificações necessárias antes de restaurar o banco de dados.

     Certifique-se que tenha o notepad++ instalado em sua maquina, ele é free, eu o uso para abrir o arquivo de backup com a extensão dmp e verificar os dados contidos nele, (nos testes que fiz, foi o único que teve um bom desempenho para abrir e manejar o arquivo de backup, que pode ser muito grande).

(Tela do Notepad++)

     A primeira coisa a ser feita é alterar a referência de localização do arquivo de backup do Oracle 10g Express que fica dentro do arquivo DUMP. Quando é feita a restauração, o  Oracle 10g Express busca no caminho informado dentro do arquivo de backup.
A linha aparece da seguinte forma no inicio do arquivo:
<Wed Nov 23 22:32:9 2011e:\ORACLEXE\ORAADM\DUMP\FULL_ROWS.DMP>
(Arquivo DUMP aberto dentro do Notepad++)

e alterar para o caminho da sua maquina:

<TueFeb 28 11:37:43 2012C:\ORACLEXE\ORAADM\DUMP\FULL_ROWS_MODIFICADO.DMP> 

Lembrando que:
a) <FULL_ROWS_MODIFICADO.DMP> é o arquivo DUMP já modificado no caso do meu exemplo.

b) Caso tenha alguma subpasta na origem, a mesma deve ser criada no seu destino, procure observar isso.

c) O arquivo DUMP tem que estar na pasta referenciada acima.

Mais abaixo, no mesmo arquivo, localizar onde são criadas as tablespaces, no meu caso, como eu já tenho o Oracle 10g Express instalado, não quero que na restauração sejam recriadas as tablespaces que são padrão no sistema, então eu apago as linhas referentes a elas para não dar erro.

<CREATE UNDO TABLESPACE "UNDO" BLOCKSIZE 8192 DATAFILE…
CREATE TABLESPACE "SYSAUX" BLOCKSIZE 8192 DATAFILE…
CREATE TEMPORARY TABLESPACE "TEMP" BLOCKSIZE 8192 TEMPFILE…
CREATE TABLESPACE "USERS" BLOCKSIZE 8192 DATAFILE...>

(Arquivo DUMP aberto dentro do Notepad++)

também removi as seguintes linhas que alteram os usuários padrão do Oracle, pois quero que
mantenha a senha que defini para os mesmos, então apago as seguintes linhas:

<ALTER USER "SYS" IDENTIFIED BY VALUES '9878B9029A3A211C' TEMPORARY TABLESPACE "TEMP"
ALTER USER "SYSTEM" IDENTIFIED BY VALUES '66CC5FE2A9C81FA3' TEMPORARY TABLESPACE "TEMP">

(Arquivo DUMP aberto dentro do Notepad++)

observar o seguinte também:
Para várias ações a serem executadas na restauração, temos o caminho em que vai ser lido ou criado alguma coisa dentro do arquivo DUMP, por exemplo:

<E:\ORACLEXE\ORADATA\XE\SSJR\...
F:\ORACLEXE\ORADATA\XE\SSJR\...>

(Arquivo DUMP aberto dentro do Notepad++)



No arquivo modificado ficaria assim, por exemplo:

<C:\ORACLEXE\ORADATA\XE\SSJR\...
C:\ORACLEXE\ORADATA\XE\SSJR\... >

     Essas foram as modificações que tive que fazer no arquivo de backup DUMP, antes de restaurar o mesmo na maquina de destino.
     Para Executar a importação propriamente dita, deve-se ir para o prompt de comando do Windows e executar o seguinte comando no diretório raiz:

<imp usuario/senha@instancia full=y/n file=caminho_bkp log=arquivo_log.log>

Exemplo:
impusersup/user@xe full=y file=C:\oraclexe\oraadm\DUMP\FULL_ROWS_modificado.DMP log=restaura_log.log

*** Onde FULL_ROWS_modificado.DMP é o arquivo de backup que foi alterado.


     Se der tudo certo, a restauração vai começar e a tela do seu prompt de comando vai parecer a tela do Matrix, piadas a parte, neste ponto tem que aguardar a restauração e depois verificar se houveram erros a serem corrigidos, no meu caso fui informado que a restauração foi feita com sucesso, porém com alguns erros, mas nas tabelas que eu precisava, restauraram perfeitamente com todos os dados, pois após restaurar, fiz uma verificação da quantidade de linhas das tabelas com o banco de origem. 
     É sempre é bom verificar o arquivo de log, para corrigir algum problema que possa ter acontecido na restauração, as vezes algum usuário que seja necessário criar, ou alguma pasta ou alguma tablespace.
    Como disse no início, não sou um DBA Oracle, sou um desenvolvedor ETL que trabalha com SQL Server, talvez exista um caminho mais simples que esse tutorial que fiz, mas os passos acima foram os que resolveram o problema que eu tinha.


Agradeço ao meu colega de trabalho Walter Carvalho, DBA aqui na empresa, pela ajuda neste tutorial.










Referências

Oracle Database 10g Express Edition: http://www.oracle.com/pls/db102/homepage
Tipos de usuários administradores Oracle: http://docs.oracle.com/cd/B28359_01/server.111/b28310/dba001.htm 
Importação de backup Oracle (1): http://www.orafaq.com/wiki/Import_Export_FAQ
Erros de importação (1): http://www.ora-code.com/
Erros de importação (2): http://www.ora-error.com/


Comentários

  1. Elton só gostaria de te agradecer muito e dar os parabéns pelo ótimo tópico. Salvou minha vida!

    Obrigado.

    ResponderExcluir

Postar um comentário