Oracle Live

11/04/2016

Migración – TTS Cross Platform con RMAN

Filed under: Migraciones — mogukiller @ 6:23 pm

Seguramente alguno de vosotros se haya encontrado delante de una migración que no solo cambiaba de versión sino también de entorno. Los más afortunados seguramente teniais Golden Gate para solventar el problema o una ventana de todo el fin de semana. Pero cuando careces de Golden Gate y tienes que minimizar el tiempo de downtime seguramente te interese este procedimiento.

'Teoria:
	Documento: 2005729.1 (12c): Las bases de datos origien y destino tienen que ser 12c
	Documento: 1389592.1 (11g): La base de datos destino tiene que ser una 11.2.0.4

Los scripts utilizados en el proceso rman-xttconvert_2.0.zip esta adjunto a la nota de Oracle.
	
La idea de utilizar XTTS con incremental backups permite reducir el tiempo de downtime de la base de datos de produccion,
ya que cuando utilizamos XTTS unicamente tenemos que dejar los TS en READ ONLY todo lo que dura el proceso del ultimo incremental.

Los requisitos para el backend destino es que tiene que ser Linux (64bits)
Fases del proceso:

Fase 1: Preparacion (Tablespaces online)
		1.- Backup (level=0) Envido de los datafiles a la DB destino.
		2.- Transformacion de endian.
Fase 2: Roll Fordward (Tablespaces online)
		1.- Crear backup incremental.
		2.- Conversion de endian.
Fase 3: Transport (Tablespace read only)
		1.- Tablespace en origen a READ ONLY.
		2.- Backup incremental y conversion de endian. (Fase 2).
		3.- Exportar metadatos del tablespace por DataPump.
		4.- Importar los metadatos.
		5.- Tablespace en destino a READ WRITE.

 Scripts adjuntos en el documento: rman-xttconvert_2.0.zip
 
Prerrequisitos:
	- DB origen parametro compatible a 10.2 o superior y mayor que DB Destino.
	- DB origen en archivelog.
	- DB destino linux de 64 bits.
	- RMAN a disco y sin configurar los canales como COMPRESS.
	- TS origen deben estar en READ WRITE.
	
Para la transferencia de archivos de origen a destino se pueden utilizar dos metodos:
	- dbms_file_transfer	<< recomendado por oracle
	- RMAN
'
-- ENTORNO:
	
	Origen: 
		SO: Solaris 10	(Big endian)
		DB: Oracle 11.2.0.3
		Schema: MOGU (TS: DATOS, INDICES)
	Destino:
		SO: Red Hat 6.5 (Little endian)
		DB: Oracle 12.1.0.2
	Entradas /etc/hosts:
		192.165.1.5		linux6
		192.165.1.10	solaris10

SELECT DISTINCT TABLESPACE_NAME FROM DBA_SEGMENTS WHERE OWNER='MOGU';
/*
TABLESPACE_NAME
-----------------
DATOS
INDICES
*/

SELECT PLATFORM_ID, PLATFORM_NAME FROM V$DATABASE;
/*
PLATFORM_ID PLATFORM_NAME
----------- ----------------------------------
         20 Solaris Operating System (x86-64)
*/

-- Comprobar que los tablespaces son totalmente autocontenidos:

EXEC SYS.DBMS_TTS.TRANSPORT_SET_CHECK(ts_list => 'DATOS,INDICES', incl_constraints => TRUE);

SELECT * FROM transport_set_violations;
/*
no rows selected
*/

-- Creamos directorios y dblinks

-- Origen
CREATE DIRECTORY EXPORT AS '/export/home/oracle/product/oradata/ORA11GR2/datafile';

-- Destino
CREATE DIRECTORY EXPORT AS '/export/dump_dir';
CREATE PUBLIC DATABASE LINK TTSLINK CONNECT TO SYSTEM IDENTIFIED BY temporal USING 'DB_ORIGEN';

-- Editamos xtt.properties
/*
## Tablespaces to transport
## ========================
##
## tablespaces
## -----------
## Comma separated list of tablespaces to transport from source database
## to destination database.
## Specify tablespace names in CAPITAL letters.
*/
tablespaces=DATOS,INDICES
/*
## Source database platform ID
## ===========================
##
## platformid
## ----------
## Source database platform id, obtained from V$DATABASE.PLATFORM_ID
*/
platformid=20
/*
## Parameters required for Prepare Phase method dbms_file_transfer		<<<<< Para este metodo
## ===============================================================
##
## srcdir
## ------
## Directory object in the source database that defines where the source datafiles currently reside.
*/
srcdir=EXPORT
/*
## dstdir
## ------
## Directory object in the destination database that defines where the destination datafiles will be created.
*/
dstdir=EXPORT
/*
## srclink
## -------
## Database link in the destination database that refers to the source database.
## Datafiles will be transferred over this database link using dbms_file_transfer.
*/
srclink=TTSLINK
/*
## Source system file locations
## ============================
## dfcopydir
## ---------
## This parameter is used only when Prepare phase method is RMAN backup.
##
## Location where datafile copies are created during the "-p prepare" step.
*/
dfcopydir=/export/home/oracle/product/fast_recovery_area/export
/*
## backupformat
## ------------
## Location where incremental backups are created.
*/
backupformat=/export/home/oracle/product/fast_recovery_area/export
/*
## Destination system file locations
## =================================
##
## stageondest
## -----------
## Location where datafile copies are placed by the user when they are transferred manually from the souce system.
## This is also the location from where datafiles copies and incremental
## backups are read when they are converted in the "-c conversion of datafiles"
## and "-r roll forward datafiles" steps.
*/
backupondest=/export/dump_dir
/*
## storageondest
## -------------
## This parameter is used only when Prepare phase method is RMAN backup.
##
## Location where the converted datafile copies will be written during the
## "-c conversion of datafiles" step.  This is the final location of the
## datafiles where they will be used by the destination database.
*/
storageondest=+DATA/TEST12C/DATAFILE
/*
## backupondest
## ------------
## Location where converted incremental backups on the destination system
## will be written during the "-r roll forward datafiles" step.
##
*/
backupondest=/export/dump_dir

-- Enviamos los scripts al otro entorno.

scp -r xtts oracle@solaris10:/export/home/oracle

-- Definimos en los dos entornos la variable TMPDIR
-- Origen
export TMPDIR=/export/home/oracle/xtts
-- Destino
export TMPDIR=/compartido/xtts

---------------------------------------------------------
-- Fase 1: Preparacion (Metodo RMAN)
---------------------------------------------------------
'nota: aqui los tablespace siguen ONLINE'

[origen@oracle]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -p
/*
Parsing properties

Done parsing properties

Checking properties

Done checking properties

Starting prepare phase

Prepare source for Tablespaces:
                  'DATOS'  /export/dump_dir
xttpreparesrc.sql for 'DATOS' started at Tue Mar 22 13:33:15 2016
xttpreparesrc.sql for  ended at Tue Mar 22 13:33:15 2016
Prepare source for Tablespaces:
                  'INDICES'  /export/dump_dir
xttpreparesrc.sql for 'INDICES' started at Tue Mar 22 13:33:32 2016
xttpreparesrc.sql for  ended at Tue Mar 22 13:33:33 2016
Prepare source for Tablespaces:
                  ''  /export/dump_dir
xttpreparesrc.sql for '' started at Tue Mar 22 13:33:41 2016
xttpreparesrc.sql for  ended at Tue Mar 22 13:33:41 2016


Done with prepare phase

*/

Resultado: Genera las piezas del RMAN para los TTS
/*
-rw-r-----   1 oracle   oinstall    1.0G Mar 22 13:33 DATOS_5.tf
-rw-r-----   1 oracle   oinstall    500M Mar 22 13:33 INDICES_6.tf
*/

-- Enviamos las copias a destino

scp *.tf linux6:/export/dump_dir

-- Realizamos las conversion de endian

scp rmanconvert.cmd linux6:/compartido/xtts

[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -c

/*
Parsing properties

Done parsing properties

Checking properties

Done checking properties

Performing convert

Converted datafiles listed in: /compartido/xtts/xttnewdatafiles.txt

*/

Ahora ya se pueden borrar los ficheros de /export/dump_dir

----------------------------------
-- Fase 2: Roll Fordward
----------------------------------
'nota: aqui los TS siguien estando online'

-- Creamos un backup incremental
[oracle@orig]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -i
/*

Parsing properties

Done parsing properties

Checking properties

Done checking properties

Backup incremental

Prepare newscn for Tablespaces: 'DATOS' 
Prepare newscn for Tablespaces: 'INDICES' 
Prepare newscn for Tablespaces: '' 
rman target /  cmdfile /export/home/oracle/xtts/rmanincr.cmd

Recovery Manager: Release 11.2.0.3.0 - Production on Tue Mar 22 17:39:03 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORA11GR2 (DBID=94419887)

RMAN> set nocfau;
2> host 'echo ts::DATOS';
3> backup incremental from scn 18945252 
4>   tag tts_incr_update tablespace 'DATOS'  format
5>  '/export/home/oracle/product/fast_recovery_area/export/%U';
6> set nocfau;
7> host 'echo ts::INDICES';
8> backup incremental from scn 18945265 
9>   tag tts_incr_update tablespace 'INDICES'  format
10>  '/export/home/oracle/product/fast_recovery_area/export/%U';
11> 

....

Finished backup at 2016/03/22 17:39:19

Recovery Manager complete.

Done backing up incrementals

*/

-- Enviamos los backups incrementales a destino

[oracle@orig]$ scp `cat incrbackups.txt` linux6:/export/dump_dir
[oracle@orig]$ scp xttplan.txt linux6:/compartido/xtts
[oracle@orig]$ scp tsbkupmap.txt linux6:/compartido/xtts

-- Convertimos de endian

[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -r
/*
Parsing properties

Done parsing properties

Checking properties

Done checking properties

Start rollforward

End of rollforward phase
*/

-- Calculamos el SCN para el siguiente incremental

[oracle@orig]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -s

------------------------------------------
-- Fase 3: Transport
------------------------------------------
'nota: En esta fase hay que poner los TS en read only'

SQL> ALTER TABLESPACE DATOS READ ONLY;
SQL> ALTER TABLESPACE INDICES READ ONLY;

-- Ejecutamos un ultimo backup incremental

[oracle@orig]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -i
[oracle@orig]$ scp `cat incrbackups.txt` linux6:/export/dump_dir
[oracle@orig]$ scp xttplan.txt linux6:/compartido/xtts
[oracle@orig]$ scp tsbkupmap.txt linux6:/compartido/xtts

[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -r


-- Importamos los metadatos
'nota: asegurarse que el usuario propietario de los objetos existe'

[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -e

cat >par_imp_metadatos.par 
directory=EXPORT logfile=tts_imp.log
network_link=ttslink
transport_full_check=no
transport_tablespaces=DATOS,INDICES 
transport_datafiles='+DATA/TEST12C/DATAFILE/datos_5.xtf','+DATA/TEST12C/DATAFILE/indices_6.xtf'

impdp \'/ as sysdba \' parfile=par_imp_metadatos.par
'
/*
Starting "SYS"."SYS_IMPORT_TRANSPORTABLE_01":  "/******** AS SYSDBA" parfile=par_imp_metadatos.par 
Source time zone version is 14 and target time zone version is 18.
Source time zone is +00:00 and target time zone is +01:00.
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/INDEX/INDEX
Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Tue Mar 22 17:59:15 2016 elapsed 0 00:00:22
*/

SQL> ALTER TABLESPACE DATOS READ WRITE;
SQL> ALTER TABLESPACE INDICES READ WRITE;

-- Validamos la estructura lógica de los TS

RMAN> validate tablespace DATOS, INDICES check logical;
/*
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
5    OK     0              130225       131072          18963793  
  File Name: +DATA/TEST12C/DATAFILE/datos_5.xtf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              700             
  Index      0              0               
  Other      0              147             

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
6    OK     0              63553        64000           18963823  
  File Name: +DATA/TEST12C/DATAFILE/indices_6.xtf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              0               
  Index      0              306             
  Other      0              141      
*/

1 comentario »

  1. […] Mejora en los transportables tablespaces, ahora se puede backup sets en vez de images copy. Se introduce la clausula ALLOW INCONSISTENT para hacer backups de tablespace sin tener que ponerlos en read only. Para ver el procedimiento de restore entre plataformas os recomiendo este post. […]

    Pingback por CAP 7.- Mejoras en Backup and Recovery | Oracle Live — 08/05/2016 @ 12:24 pm


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Blog de WordPress.com.

A %d blogueros les gusta esto: