Clonar (Duplicar) Banco Oracle

Imagina a seguinte situação…
Um ser iluminado empolgadíssimo liga no seu ramal e diz:

Preciso fazer uns testes no banco, rodar uns scripts …. POSSO ????”

Ai nesse momento você respira fundo, conta até 10, come um chocolatinho pra ficar feliz e pede educadamente (o educadamente é imprescindível !!!) pro ser iluminado te enviar os scripts só pra você ter uma ideia do tamanho do problema.

Bem nesse momento vc descobre que o cara quer fazer uns scan full somado a algumas coisas meios cabeludas e fedorentas naquenas tabelas que tem uma quantidade desesperadora de registros ….

OBS: Vamos imaginar que esse desenvolvedor não seja alguem experiente ok??? ele é mirim ainda …. mesmo porque um desenvolvedor experiente nunca faria um absurdo desses…

O que fazer??????

A – Da um tiro de bazuca na fuça do ser iluminado
Não é a melhor opção … não encontramos uma bazuca em qualquer lugar, a não ser que a sua gaveta seja bem comprida;

B – Faz um Tuning de Query
Isso é papo pra um outro post, mas é uma opção bem interesante e útil, que pode ajudar ao banco e ao desenvolvedor;

C – Clona o banco naquela maquina de testes que vc tem ai, e deixa o cara brincar, sem afetar a produção.
Hummm, vamos optar pela terceira opção, mesmo porque a gente monta o ambiente e deixa disponível pra testes ….

Bom, chega de histórias vamos ao que interessa, vamos entender que nosso banco de produção se chama produção e o clonado vai se chamar teste

1 – Crie a estrutura de diretórios OFA
oracle@server: /> cd /oracle/u01/app/oracle/admin/
oracle@server:/oracle/u01/app/oracle/admin> mkdir bdump cdump create pfile udump
oracle@server:/oracle/u01/app/oracle/admin/teste > ls
bdump cdump create pfile udump

2 – Copiar o init do banco e o arquivo de senhas (orapwd) que já esta em produção para o novo banco

oracle@server:/oracle/u01/app/oracle/admin> cd /oracle/u01/app/oracle/product/8.1.7/dbs
o
racle@server:/oracle/u01/app/oracle/product/8.1.7/dbs > cp initproducao.ora
initteste.ora
o
racle@server:/oracle/u01/app/oracle/product/8.1.7/dbs > cp orapwproducao
o
rapwteste
o
racle@server:/oracle/u01/app/oracle/product/8.1.7/dbs > ls
i
nit.ora initdw.ora initproducao.ora initteste.ora lkserver lkteste orapwserver orapwteste

3 – Alterara as configurações init para o novo banco
oracle@server:/oracle/u01/app/oracle/product/8.1.7/dbs >
vi initteste.ora
#_system_trig_enabled=false
db_name = teste
db_domain = seudominio.com.br
instance_name = teste
service_names = teste.seudominio.com.br
control_files =
(“/oracle/u01/oradata/teste/control01.ctl”,
“/oracle/u02/oradata/teste/control02.ctl”)
db_block_size = 8192
db_block_buffers = 20000
db_file_multiblock_read_count = 64
shared_pool_size = 10000000
large_pool_size = 86507520
java_pool_size = 20971520
log_checkpoint_interval = 10000
log_checkpoint_timeout = 0
processes = 440
open_cursors = 660

sort_area_size = 262144

rollback_segments = (R01, R02, R03, R04)
max_enabled_roles=100
log_buffer = 5242880
# log_buffer = 1048576
timed_statistics = true
# max_dump_file_size = 10000 # limit trace file size to 5M each
log_archive_start = true
log_archive_dest_1 = ‘LOCATION=/oracle/u01/arch/teste
#log_archive_dest_2 = ‘SERVICE=standby_server reopen=60’
log_archive_dest_state_1 = enable
#log_archive_dest_state_2 = enable
log_archive_format = teste_%s.arc
# oracle_trace_enable = true
background_dump_dest = /oracle/u01/app/oracle/admin/teste/bdump
core_dump_dest = /oracle/u01/app/oracle/admin/teste/cdump
user_dump_dest = /oracle/u01/app/oracle/admin/teste/udump
db_block_size = 8192
### MRCN ###remote_login_passwordfile = exclusive
remote_login_passwordfile = shared
job_queue_processes = 6
job_queue_interval = 60
distributed_transactions = 100
open_links = 6
compatible = “8.1.7.4”
# optimizer_features_enable = 8.1.7
utl_file_dir = *

5 – Baixar banco de produção que vai ser duplicado
oracle@server:/> echo $ORACLE_SID
oracle@server:/> producao

SQL> shutdown immediate
ORACLE instance shut down.
SQL> exit

6 – Crie um novo diretório no oradata (diretório dos arquivos de dados) com o nome do novo banco
oracle@server:/oracle/u01/oradata> mkdir teste
oracle@server:/oracle/u01/oradata> cd teste
oracle@server:/oracle/u01/oradata/teste>

7 – Fazer cópia de todos os arquivos de dados e redos
oracle@server:/oracle/u01/oradata/teste >
cp /oracle/u01/oradata/producao/* .
o
racle@server:/oracle/u02/oradata/teste >
cp /oracle/u02/oradata/producao/* .

8 – Remova os controfiles pois eles serão criados automaticamente
ora
cle@server:/oracle/u01/oradata/teste > rm – rf control01.ctl control02.ctl

9 – Exporte a variável ORACLE_SID com a nova instância
o
racle@server:/oracle/u01/app/oracle/admin/teste/>
export ORACLE_SID= teste
o
racle@server:/oracle/u01/app/oracle/admin/teste/>
echo $ORACLE_SID
t
este

10 – Prepare o arquivo que vai gerar o novo banco, como no exemplo abaixo
(
Não esqueça da permissão de execução)
o
racle@server:/> cd /oracle/u01/app/oracle/admin/teste/create
o
racle@server:/oracle/u01/app/oracle/admin/teste/create >
v
i teste.sql

STARTUP NOMOUNT
CREATE CONTROLFILE SET DATABASE “TESTE” RESETLOGS
NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 2
MAXDATAFILES 240
MAXINSTANCES 1
MAXLOGHISTORY 113

LOGFILE
GROUP 1 (
‘/oracle/u01/oradata/teste/redo01a.dbf’,
‘/oracle/u02/oradata/teste/redo01b.dbf’
) SIZE 50M,

GROUP 2 (
‘/oracle/u01/oradata/teste/redo02a.dbf’,
‘/oracle/u02/oradata/teste/redo02b.dbf’
) SIZE 50M,

GROUP 3 (
‘/oracle/u01/oradata/teste/redo03a.dbf’,
‘/oracle/u02/oradata/teste/redo03b.dbf’
) SIZE 50M,

GROUP 4 (
‘/oracle/u01/oradata/teste/redo04a.dbf’,
‘/oracle/u02/oradata/teste/redo04b.dbf’
) SIZE 50M REUSE

DATAFILE
‘/oracle/u01/oradata/teste/system01.dbf’,
‘/oracle/u02/oradata/teste/table01.dbf’,
‘/oracle/u02/oradata/teste/table02.dbf’,
‘/oracle/u02/oradata/teste/table03.dbf’,
‘/oracle/u02/oradata/teste/table04.dbf’,
‘/oracle/u01/oradata/teste/indice01.dbf’,
‘/oracle/u01/oradata/teste/indice02.dbf’,
‘/oracle/u01/oradata/teste/indice03.dbf’,
‘/oracle/u01/oradata/teste/indice04.dbf’
‘/oracle/u01/oradata/teste/rbs01.dbf’,
‘/oracle/u02/oradata/teste/oem_repository01.dbf’ REUSE

CHARACTER SET WE8ISO8859P1;

11 – Logue no slqplus com : sqlplus “/ as sysdba” e execute o arquivo teste.sql para criar a nova base de dados
oracle@server:/oracle/u01/app/oracle> sqlplus “/ as sysdba”
SQL*Plus: Release 8.1.7.0.0 – Production on Tue Jul 24 17:04:08 2007
(c) Copyright 2000 Oracle Corporation. All rights reserved.

Connected to an idle instance.

SQL> @teste .sql
ORACLE instance started.
Total System Global Area 295825568 bytes
Fixed Size 73888 bytes
Variable Size 126660608 bytes
Database Buffers 163840000 bytes
Redo Buffers 5251072 bytes

Control file created.

12 – O conteúdo dos logs são descartáveis, para limpa-los use o comando abaixo

SQL> ALTER DATABASE OPEN RESETLOGS;Database altered.

13 – Adicione a tablespace temporária
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE
‘/oracle/u01/oradata/teste/temp01.dbf’ REUSE;

Tablespace altered.

14 – Pronto, agora só verifique o statis da instância criada
SQL> set linesize 10000
SQL> select instance_name,version,status,database_status from v$instance;

INSTANCE_NAME VERSION STATUS DATABASE_STATUS
—————- —————– ——- —————–
teste 8.1.7.4.0 OPEN ACTIVE

15 – Faça um teste de select na base
SQL> select nome from x.agencias
2 where codigo = 10;

NOME
——————–
CENTRO ADMINISTRATIV

É isso ai, sua base de testes esta prontinha, agora é só entregar para o desenvolvedor e voltar a tranquilidade.

Kenia Milene

8 thoughts on “Clonar (Duplicar) Banco Oracle

  1. Tenho um servidor oracle 8.7.1 rodando em um server 2000. Nesse servidor, existem dois hds. No c: está o sistema operacional, no d: está o Oracle. Sexta a noite, o hd do so(c:) foi perdido. Outro hd foi instalado e o so também. Tenho um export do banco de quinta a noite. Porém eu lhe pergunto: existe alguma forma de instalar novamente o Oracle no d: e reaproveitar os dados que pernacem na instalação original(a pasta oracle já foi renomeada para outro nome)?

  2. Olá Kenia ei seguie aqui seus passos porem estou com o seguinte problema meus datafile de dados e users01 de index esta com status recover, você teria alguma dica para recuperar o status para online ja procurei na net tudo e nao da certo da o seguinte erros:

    ORA-00283: recovery session canceled due to errors
    ORA-00600: internal error code, arguments: [krhpfh_03-1202], [fno =], [4],
    [fhcrt =], [699715834], [cptim =], [0], []
    ORA-01110: data file 4: ‘/u01/oracle/oradata/develop/dados.dbf’

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s