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>
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
Oracle Database 11g Express Edition: http://www.oracle.com/technetwork/products/express-edition/overview/index.html
DatabaseCast: http://imasters.com.br/perfil/databasecast
SQL Server 2005: http://www.microsoft.com/brasil/servidores/sql/2005/default.mspx
VirtualBox: https://www.virtualbox.org/
Tablespace: http://www.orafaq.com/wiki/Tablespace
NotePad++: http://notepad-plus-plus.org/
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
Importação de backup Oracle (2): http://docs.oracle.com/cd/B10500_01/server.920/a96652/ch02.htm
Erros de importação (1): http://www.ora-code.com/
Erros de importação (2): http://www.ora-error.com/
Elton só gostaria de te agradecer muito e dar os parabéns pelo ótimo tópico. Salvou minha vida!
ResponderExcluirObrigado.