Clonar una base de dades Oracle.

 

Segur que a tots els que treballeu amb Oracle (o amb Sap i com a base de dades Oracle com és el meu cas), us ha sorgit la necessitat de replicar una base de dades productiva (o d'un entorn de proves), en un altre sistema. En el meu cas, treballant amb Sap, regularment realitzar una còpia de la base de dades real en el sistema de desenvolupament (integració), perquè la proves dels canvis, desenvolupaments o parametritzacions siguin el més completes possibles (i el més fàcils possible de cara a l'usuari si disposa de les dades "reals" més actualitzades).

Acabo d'acabar la instal.lació d'un nou entorn de desenvolupament Sap (per un canvi de maquinari), en què hem aprofitat per fer una replica del sistema productiu a nivell de base de dades. Us vaig a explicar els passos seguits per si algú de vosaltres té la mateixa necessitat, encara que segur que hi ha altres formes de fer-ho (export de base de dades, utilitzant RMAN, etc). En el meu cas, he partit d'un backup Online (tot i que és recomanable realitzar amb un Offline), i he copiat una base de dades que es diu MG1 en una altra en una màquina diferent que es diu DE1. El procediment que us vaig a explicar aquesta validat amb Oracle 9i.

1) Realització del backup de la base de dades origen: com us he indicat, he fet un backup en línia utilitzant el programari de backup Veritas NetBackup, que té les seves eines específiques per treballar amb Sap i Oracle, però podríem igualment haver realitzat amb un script sql per posar els tablespaces en mode backup i copiar els datafiles corresponents a la nova ubicació. Un cop acabada la còpia, es tornen a posar els tablespaces en mode normal. També podriem haver fet un backup offline amb la base de dades parada (encara que això no és sempre possible, ja que podem estar en un sistema amb una finestra de backup sigui molt petita i no es pugui fer d'aquesta manera).

Els scripts sql per posar els tablespaces en mode backup (al començar aquest), així com per posar-los en mode normal (a la finalització del backup), els podeu generar amb les sentències SQL que us detallo a continuació:

 

set lines 999 pages 999
set verify off
set feedback off
set heading off

spool begin_backup.sql

select 'alter tablespace ' || tablespace_name || ' begin backup;' tsbb
from    dba_tablespaces
where   contents != 'TEMPORARY'
order by tablespace_name
/
spool off

spool end_backup.sql

select 'alter tablespace ' || tablespace_name || ' end backup;' tseb
from    dba_tablespaces
where   contents != 'TEMPORARY'
order by tablespace_name
/
spool off

 

Quan executen la sentència s'hauran generat dos fitxers: begin_backup.sql i end_backup.sql, cada un amb la comesa indicat anteriorment.

2) Preparació de la còpia: en el meu cas, en el sistema destí ja tinc instal·lat Oracle i creada tota l'estructura de carpetes per a les ubicacions dels datafiles. En cas contrari, caldrà realitzar la instal·lació d'Oracle i crear les carpetes corresponents on es van a ubicar els fitxers de dades. Un cop preparat tot en el sistema destí, anem a fer un parell de tasques més de preparació.

  • Ajust del fitxer de paràmetres de oracle: el fitxer de paràmetres de oracle és imprescindible per poder arrencar la base de dades en el sistema destí (fitxer init <SID>. Prega, on <SID> és el nom de la base de dades). Haurem d'ajustar el contingut d'aquest fitxer per que correspongui al llistat del nou sistema (destinació de redologs, rollback segments en el cas que els utilitzem, etc), però sempre prenent com a model el mateix fitxer del sistema origen. Igualment, pot ser que tinguem d'ajustar paràmetres d'aquest fitxer acord amb les característiques físiques de la màquina destinació (memòria, processadors, etc).
  • Creació de la sentència SQL per recrear els fitxers de control: executarem la sentència SQL en el sistema origen: alter database backup controlfile to trace es '/ tmp / crea_bd.sql'; Amb l'execució d'aquesta sentència, hem creat un fitxer amb sentències SQL, que ens permetran recrear els fitxers de control en el sistema destí un cop haguem recuperat el backup. En el meu exemple, el contingut del fitxer creat és el següent:

 

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "MG1" RESETLOGS  ARCHIVELOG
--  SET STANDBY TO MAXIMIZE PERFORMANCE
 MAXLOGFILES 16
 MAXLOGMEMBERS 3
 MAXDATAFILES 1022
 MAXINSTANCES 50
 MAXLOGHISTORY 5445
LOGFILE
 GROUP 11 (
 '/oracle/MG1/mirrlogA/log_g11m2.dbf',
 '/oracle/MG1/origlogA/log_g11m1.dbf'
 ) SIZE 20M,
 GROUP 12 (
 '/oracle/MG1/mirrlogB/log_g12m2.dbf',
 '/oracle/MG1/origlogB/log_g12m1.dbf'
 ) SIZE 20M,
 GROUP 13 (
 '/oracle/MG1/mirrlogA/log_g13m2.dbf',
 '/oracle/MG1/origlogA/log_g13m1.dbf'
 ) SIZE 20M,
 GROUP 14 (
 '/oracle/MG1/mirrlogB/log_g14m2.dbf',
 '/oracle/MG1/origlogB/log_g14m1.dbf'
 ) SIZE 20M
-- STANDBY LOGFILE

DATAFILE
 '/oracle/MG1/sapdata1/system_1/system.data1',
 '/oracle/MG1/sapdata5/btabd_1/btabd.data1',
 '/oracle/MG1/sapdata2/btabi_1/btabi.data1',
 '/oracle/MG1/sapdata6/clud_1/clud.data1',

.............................

CHARACTER SET WE8DEC
;

 

Haurem de fer alguns canvis en el scritpta SQL contingut en aquest fitxer per poder utilitzar-lo de manera correcta en el sistema destí:

  • Nom de la base de dades: el nou nom de la base de dades serà DE1. Per a això, canviarem la part inicial de l'script, substituint MG1 per DE1. Igualment, canviarem el valor Reus per SET. La sintaxi quedaria així:

 

CREATE CONTROLFILE SET DATABASE "DE1" RESETLOGS  ARCHIVELOG..........
  • Ubicació de fitxers de logs i de datafiles: totes les rutes dels logs i dels datafiles que apareixen en el fitxer han de ser modificades perquè corresponguin amb les ubicacions reals que tindran en el sistema destí. En el meu cas, vaig a canviar la carpeta / oracle/MG1 per / oracle/DE1, que és la ubicació en el meu sistema de tots aquests elements.
  • Resta de sentències SQL en el fitxer: totes les sentències SQL que hi ha a partir del valor CHARACTER SET ... les esborrem, ja que les llançarem manualment un cop recreats els controlfile (esborrar RECOVER DATABASE .... i ALTER DATABASE OPEN RESETLOGS).
  • 3) Restauració de fitxers de dades en el sistema destí: realitzem una recuperació de la còpia de seguretat en les ubicacions corresponents del sistema destí. Les localitzacions dels datafiles hauran de coincidir amb les que haguem descrit en l'script crea_bd.sql (tal com hem vist en el punt anterior), ja que al llançar-lo, haurà de trobar tots els fitxers per a poder realitzar correctament el procés. En el cas que haguem fet un backup offline, no caldrà portar els fitxers de redologs del sistema origen, però si en el cas d'un backup online. Això és necessari per deixar la base de dades en un punt consistent, ja que durant el backup, tots els canvis que es produeixen en els tablespaces es van quedant registrats en els redologs. És una forma d'assegurar la consistència de la base de dades després del procés de recuperació.

    4) Procés final: recreació de control file i arrencada de la base de dades. Un cop ha acabada la recuperació, anem a fer la part final del procés, i les més crítica. Per a això, ja ubicats en el sistema destí, arrencarem el listener (pot ser que també hagi de realitzar algun ajust en el per a adaptar-lo al nom de la nova base de dades), i ens connectarem a la base de dades amb sqlplus. La base de dades no està arrencada, i executarem l'script crea_bd.sql que hem creat i ajustat anteriorment:

tm-des:orade1 1> sqlplus

SQL*Plus: Release 9.2.0.8.0 - Production on Tue Jun 22 16:00:10 2010

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Enter user-name: / as sysdba

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
With the Partitioning option
JServer Release 9.2.0.8.0 - Production

SQL> @/tmp/crea_bd.sql

 

La sentència arrenca la base de dades en mode NOMOUNT i realitza la recreació dels fitxers de control (les ubicacions d'aquests fitxers estan definides en el fitxer init <SID>. Prega, al parametre control_files). Durant aquest procés, es verifica que tots els fitxers existeixin físicament. En el cas de presentar algun error i s'aturi el procés (no existeix carpeta o els fitxers estan a un lloc diferent), corregirem els errors i tornarem a llançar el procés.

Un cop acabada la creació dels fitxers de control, arrencarem la base de dades. La forma variada segons si partim d'un backup offline o online. Per exemple, per al backup online, que és un backup consistent ja que s'ha aturat tota l'activitat de la base de dades quan es va realitzar, executarem la següent sentència SQL:

 

ALTER DATABASE OPEN RESETLOGS;

En el cas d'haver realitzat un backup en línia, poden variar les sentències a executar. En el meu cas, vull deixar la base de dades consistent en un determinat moment del temps. Per a això, executi les següents sentències:

RECOVER DATABASE UNTIL TIME '2010-06-10:01:00:00' USING BACKUP CONTROLFILE;
ALTER DATABASE OPEN RESETLOGS;

 

He recuperat la base de dades a un moment determinat del temps (la 1 de la matinada del 10 de juny de 2010). Per al procés, ha estat necessari tenir en el directori de redologs dels logs arxivats necessaris (provinents del sistema origen), perquè el seu contingut sigui aplicat sobre els tablespaces i arribar de forma coherent al punt del temps indicat.

En aquest moment, la base de dades ja està recuperada i oberta. Com a pas final, executarem la següent sentència per canviar el global database name (podem veure el valor actual executant la sentència select * from global_name;):

 

ALTER DATABASE RENAME GLOBAL_NAME TO DE1.world

 

En el meu cas, va arrencar a més Sap i realitzar una sèrie d'accions per deixar el sistema preparat per treballar amb ell. En el cas que estiguem només amb una base de dades de proves en qualsevol altre tipus d'instal·lació, ja tindríem les dades del sistema origen en línia i disponibles per poder realitzar qualsevol operativa sobre ells. També pot ser una manera útil de replicar un sistema de Business Intelligence per a sistema de test o de formació.

Us deixo alguns links on podeu ampliar informació de la forma de realitzar tots els processos descrits, ja que la meva explicació ha estat bastant resumida i segons la forma de realitzar el procés, pot ser que hagueu de tenir moltes més coses en compte:

 

Oracle Dba Quick Guide.

Sap System Copy: per al cas que estigueu treballant amb Sap (s'expliquen aspectes addicionals en la còpia homogènia d'un sistema a un altre).