Pular para o conteúdo

Fóruns Banco de dados Oracle Clonar BD 10g Clonar BD 10g

#108248
Avatar photoJosé Laurindo Chiappa
Moderador

    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