› Fóruns › Banco de dados Oracle › Clonar BD 10g › Clonar BD 10g
Opa, blz ? Eu obtive um ambiente teste aqui e vou te Exemplificar mais ou menos como seria os scripts que vc vai ter que implementar para ter automatizado o backup e o restore, mas ** nem preciso dizer ** que :
a) isto é só uma PROVA DE CONCEITO, de forma ALGUMA vc pode fazer um copy/paste disto em produção : entre outras coisas,esta rotina mega-simplória NÂO prevê backup incremental, NÃO gera arquivos com nomes diferentes a cada execução, Não prevê casos onde os backups dos archives esteja em outro local E/ou archives anteriores tenham sido removidos….
b) assumi aqui que o servidor HOMO/destino já está com o software do RDBMS Oracle corretamente instalado e configurado, com as vars de ambiente necessárias, tudo certinho, ** E ** (IMPORTANTE!!) assumi que nenhum parâmetro de hardware (por exemplo, tamanho da RAM a ser usada no banco, número de processos, etc) precise ser alterado com o hardware “menor” que vc diz que tem na VM que vai ser homo…
c) o IP e o hostname diferente, como eu disse antes, só influenciam para configurações gerais ** FORA DO BANCO **, como arquivos TNSNAMES.ORA, LISTENER do banco, etc – o banco em si é COMPLETAMENTE IMUNE a mudanças do tipo… Não coloquei essas alterações no script pois isso vc faz uma vez só…
d) pra agilizar aqui, já que meu banco é Enterprise Edition, vc verá que estabeleci paralelismo – iirc no Standard Edition, capadinho e restrito que é, vc não deve ter isso, ajuste….
Isso claro, segue o exemplo :
=> na máquina “PROD”, veja como criei os scripts de backup :
[oracle@localhost oracle]$ cat backup_full.sh
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/db11204
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
rman target=/ nocatalog log=backup_full.log cmdfile=backup_full.cmd
[oracle@localhost oracle]$ cat backup_full.cmd
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO “/media/sf_jlchiappa/bkp/ctl_%F”;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET PARALLELISM 3;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT “/media/sf_jlchiappa/bkp/bkp_full_%u_%s_%p” MAXPIECESIZE 2048 M;
CONFIGURE MAXSETSIZE TO UNLIMITED;
run {
backup database plus archivelog;
}
exit;
===> Vou executar manualmente mas OBVIAMENTE, para Automatizar vc Iria rodar esses scripts dentro do CRON, do AT ou coisa do tipo, claro :
[oracle@localhost oracle]$ /oracle/backup_full.sh
RMAN> 2> 3> 4> 5> 6> 7> 8> 9>
===> em outra janela , consulto o andamento – aproveito para verificar o DBID do banco PROD, que vai ser usado no RESTORE :
[oracle@localhost oracle]$ cat backup_full.log
Recovery Manager: Release 11.2.0.4.0 – Production on Fri Jul 1 11:33:31 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1229390655)
using target database control file instead of recovery catalog
….
Starting backup at 01-JUL-16
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00002 name=/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf
channel ORA_DISK_1: starting piece 1 at 01-JUL-16
channel ORA_DISK_2: starting full datafile backup set
channel ORA_DISK_2: specifying datafile(s) in backup set
input datafile file number=00001 name=/home/oracle/app/oracle/oradata/orcl/system01.dbf
input datafile file number=00007 name=/home/oracle/cr_data_01.dbf
input datafile file number=00006 name=/home/oracle/app/oracle/oradata/orcl/APEX_1930613455248703.dbf
channel ORA_DISK_2: starting piece 1 at 01-JUL-16
channel ORA_DISK_3: starting full datafile backup set
channel ORA_DISK_3: specifying datafile(s) in backup set
input datafile file number=00003 name=/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf
input datafile file number=00004 name=/home/oracle/app/oracle/oradata/orcl/users01.dbf
input datafile file number=00005 name=/home/oracle/app/oracle/oradata/orcl/example01.dbf
channel ORA_DISK_3: starting piece 1 at 01-JUL-16
……. blablanla, segue até o final, e quando acabou o backup de banco, Sozinho ele vai fazer o AUTOBACKUP :
channel ORA_DISK_1: finished piece 1 at 01-JUL-16
piece handle=/media/sf_jlchiappa/bkp/bkp_full_1jr9jop7_51_1 tag=TAG20160701T114023 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 01-JUL-16
Starting Control File and SPFILE Autobackup at 01-JUL-16
piece handle=/media/sf_jlchiappa/bkp/ctl_c-1229390655-20160701-00 comment=NONE
Finished Control File and SPFILE Autobackup at 01-JUL-16
Recovery Manager complete.
[oracle@localhost oracle]$
================> no servidor HOMO, com os arquivos já transferidos (via FTP no meu caso, mas aí vc teria que usar o recurso que tivesse, como por exemplo transferir prum internet disk, prum HD externo, o que for), E com as variáveis de ambiente corretas, E com os diretórios todos Iguaizinhos :
=> veja que os arqs de backup estão OK :
[oracle@localhost oracle]$ ls -ltr /media/sf_jlchiappa/bkp
total 4602263
-rwxrwx— 1 root vboxsf 703777792 Jul 1 11:34 bkp_full_1er9joce_46_1
-rwxrwx— 1 root vboxsf 770240512 Jul 1 11:35 bkp_full_1cr9joce_44_1
-rwxrwx— 1 root vboxsf 27738112 Jul 1 11:35 bkp_full_1fr9jof3_47_1
-rwxrwx— 1 root vboxsf 771342336 Jul 1 11:35 bkp_full_1dr9joce_45_1
-rwxrwx— 1 root vboxsf 349364224 Jul 1 11:38 bkp_full_1ir9jofb_50_1
-rwxrwx— 1 root vboxsf 918798336 Jul 1 11:39 bkp_full_1hr9jofb_49_1
-rwxrwx— 1 root vboxsf 1161248768 Jul 1 11:40 bkp_full_1gr9jofb_48_1
-rwxrwx— 1 root vboxsf 81408 Jul 1 11:40 bkp_full_1jr9jop7_51_1
-rwxrwx— 1 root vboxsf 10125312 Jul 1 11:40 ctl_c-1229390655-20160701-00
[oracle@localhost oracle]$
=> veja os scripts presentes :
[oracle@localhost oracle]$ cat restore_spfile.sh
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/db11204
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
rman target=/ nocatalog log=restore_spfile.log cmdfile=restore_spfile.cmd
[oracle@localhost oracle]$ cat restore_spfile.cmd
SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO “/media/sf_jlchiappa/bkp/ctl_%F”;
SET DBID 1229390655;
startup nomount;
RUN {
RESTORE SPFILE FROM AUTOBACKUP;
}
exit;
[oracle@localhost oracle]$
==> posso portanto restaurar o spfile – Repito, executo aqui o script manualmente, mas no seu caso seria via CRON ou similar :
[oracle@localhost oracle]$ /oracle/restore_spfile.sh
=> após o script ter executado :
[oracle@localhost oracle]$ cat restore_spfile.log
Recovery Manager: Release 11.2.0.4.0 – Production on Fri Jul 1 13:54:34 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: DUMMY (not mounted)
using target database control file instead of recovery catalog
…
Starting restore at 01-JUL-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK
channel ORA_DISK_1: looking for AUTOBACKUP on day: 20160701
channel ORA_DISK_1: AUTOBACKUP found: /media/sf_jlchiappa/bkp/ctl_c-1229390655-20160701-00
channel ORA_DISK_1: restoring spfile from AUTOBACKUP /media/sf_jlchiappa/bkp/ctl_c-1229390655-20160701-00
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 01-JUL-16
Recovery Manager complete.
==> maravilha, veja os scripts de restore do controlfile (que, como eu tenho o SPFILE ok, vão ser restaurados pro path indicado nos parãmetros correspondentes) :
[oracle@localhost oracle]$ cat restore_controlfile.sh
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/db11204
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
rman target=/ nocatalog log=restore_controlfile.log cmdfile=restore_controlfile.cmd
[oracle@localhost oracle]$ cat restore_controlfile.cmd
SET DBID 1229390655;
shutdown immediate;
startup nomount;
RUN {
SET CONTROLFILE AUTOBACKUP FORMAT
FOR DEVICE TYPE DISK TO “/media/sf_jlchiappa/bkp/ctl_%F”;
RESTORE CONTROLFILE FROM AUTOBACKUP;
}
exit;
==> executo :
[oracle@localhost oracle]$ /oracle/restore_controlfile.sh
RMAN> 2> 3> 4> 5> 6> 7> 8> 9> [oracle@localhost oracle]$
[oracle@localhost oracle]$ cat restore_controlfile.log
…
database name (or database unique name) used for search: ORCL
channel ORA_DISK_1: AUTOBACKUP /oracle/orcl/flash_recovery_area/ORCL/autobackup/2016_03_11/o1_mf_s_906211876_cg5wpn4f_.bkp found in the recovery area
channel ORA_DISK_1: looking for AUTOBACKUP on day: 20160701
channel ORA_DISK_1: AUTOBACKUP found: /media/sf_jlchiappa/bkp/ctl_c-1229390655-20160701-00
channel ORA_DISK_1: restoring control file from AUTOBACKUP /media/sf_jlchiappa/bkp/ctl_c-1229390655-20160701-00
channel ORA_DISK_1: control file restore from AUTOBACKUP complete
output file name=/home/oracle/app/oracle/oradata/orcl/control01.ctl
output file name=/home/oracle/app/oracle/flash_recovery_area/orcl/control02.ctl
Finished restore at 01-JUL-16
Recovery Manager complete.
==> veja que RESTAUROU DIREITINHO :
[oracle@localhost oracle]$ find /home/oracle -name *control*.ctl -ls
229496 9824 -rw-rw—- 1 oracle oracle 10043392 Jul 1 14:08 /home/oracle/app/oracle/oradata/orcl/control01.ctl
753756 9824 -rw-rw—- 1 oracle oracle 10043392 Jul 1 14:08 /home/oracle/app/oracle/flash_recovery_area/orcl/control02.ctl
[oracle@localhost oracle]$
[oracle@localhost oracle]$ find /home/oracle -name *spfile*.ora -ls
789454 16 -rw-rw—- 1 oracle oracle 14848 Jul 1 14:08 /home/oracle/app/oracle/product/11.2.0/db11204/dbs/spfileorcl.ora
[oracle@localhost oracle]$
=> Veja os scripts do RESTORE e RECOVER do banco :
[oracle@localhost oracle]$ cat restore_full.sh
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/db11204
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
rman target=/ nocatalog log=restore_full.log cmdfile=restore_full.cmd
[oracle@localhost oracle]$ cat restore_full.cmd
shutdown immediate;
SET DBID 1229390655;
startup mount;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO “/media/sf_jlchiappa/bkp/ctl_%F”;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET PARALLELISM 3;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT “/media/sf_jlchiappa/bkp/bkp_full_%u_%s_%p” MAXPIECESIZE 2048 M;
CONFIGURE MAXSETSIZE TO UNLIMITED;
run {
restore database;
recover database;
}
exit;
[oracle@localhost oracle]$
==> Agora é só restaurar completamente :
[oracle@localhost oracle]$ /oracle/restore_full.sh
=> uma vez restaurado, só falta reabrir com resetlogs : podia ter colocado isso no script mas vou fazer manualmente :
[oracle@localhost oracle]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Jul 1 14:24:44 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 456146944 bytes
Fixed Size 1365292 bytes
Variable Size 343935700 bytes
Database Buffers 104857600 bytes
Redo Buffers 5988352 bytes
Database mounted.
SQL> alter database open resetlogs;
Database altered.
SQL>
[]s
Chiappa