1. Workshop Estrategias de Replicación Parte I
Introducción a las técnicas de replicación.
Primer Caso.
Autor: Lorenzo Mota
Data Management Specialist
Oracle Colombia Limitada
2. Introducción
La idea con esta serie de workshops es dejar claros cuales son las distintas formas de
replicación de bases de datos relacionales existentes usando herramientas Oracle e ir
atacando en varios workshops distintas herramientas según el caso planteado. La idea
es enfocarnos en los casos más comunes en el momento actual de las diferentes
industrias.
Prerequisitos
- Conocimiento de administración de Oracle y ASM
Marco conceptual
Podemos imaginar los muchos casos de negocio diferentes en donde se tiene la
necesidad de obtener datos que residen en una base de datos y enviarlos a otra base de
datos. Se puede utilizar una variedad de métodos para mover esos datos. Dependiendo
de la cantidad de datos, o necesidad de uso, unos métodos serán más eficaces que
otros. Si la idea es pasar pocos datos, no continuamente y ocasionalmente podemos
hablar de métodos manuales usando SQL y archivos texto, Database Links,
Export/Import, PL/SQL para combinar algo más automatizado, pero que no requieren
controles exhaustivos y son más de control manual.
Luego se debe evaluar la función de esa réplica de datos; un primer escenario seria
armar un escenario de desarrollo o pruebas, sacando esquemas parciales y no la
totalidad de datos, o armar un ambiente de replica para standby o recuperación de
desastres. En el primer caso estaríamos ya evaluando desde DataPump Export/Import
como herramienta con más controles de pasar datos parciales o completos, hasta
herramientas avanzadas de replicación como Oracle Streams y GoldenGate. En el
segundo caso de satisfacer un escenario de recuperación de desastres estaríamos
hablando de Dataguard, y Active DataGuard como herramientas de paso completo de
las bases de datos.
También existen casos como upgrades o migración de bases de datos, o de hardware o
sistema operativo, en estos casos de migración heterogenea y de buscar la mínima
indisponibilidad seria herramientas de replicación como GoldenGate que brindan la
mayor flexibilidad y menor tiempo de indisponibilidad.
3. Caso de trabajo inicial
El primer caso a trabajar en este workshop es uno muy común entre las compañías luego
que ya tienen sus ambientes de bases de datos relacionales funcionales, y es el de
establecer una réplica para recuperación de desastres. En este caso el cliente puede
escoger entre hacerlo en un sitio alterno común o datacenter que el cliente controle o
existen opciones de hosting o lo más actual en la nube.
Para ambos casos los pasos para armar la réplica son similares, siendo la nube la forma
más rápida de provisionar inicialmente a nivel de máquinas y software. Si vamos más
allá con temas de subscripción, Oracle proporciona consolas y opciones de control de
esos despliegues.
Para este primer workshop de la serie, estaremos trabajando el armado completo
detallado y desde cero con ambientes virtuales. De esta forma sabremos el detalle y las
técnicas a considerar en una base de datos Oracle, para luego poder avanzar con otros
escenarios de nube o de replicación avanzada.
En estos casos el montaje de una réplica de desastres o standby se hace de forma más
rápida usando la herramienta DataGuard o Active DataGuard, partiendo de la base que
estamos usando Oracle Database Enterprise Edition. Para versiones inferiores se
usarían métodos manuales que salen del ámbito de este workshop.
En resumen estos son los escenarios que vamos a tratar:
1. Implementar Data Guard/Active DataGuard on premise. Título: Workshop
Estrategias de Replicación Parte I
2. Implementar DataGuard/Active Data Guard en un ambiente de nube. Título:
Workshop Estrategias de Replicación Parte II
3. Implementar Golden Gate on premise de forma bidireccional. Título: Workshop
Estrategias de Replicación Parte III
4. Implementar Golden Gate para un ambiente de DRP en la nube. Título: Workshop
Estrategias de Replicación Parte IV
Siendo el escenario número uno (1) el enfoque de este documento.
Arquitectura del workshop
4. Componentes a utilizar
Para este workshop necesitaremos:
- Oracle VirtualBox versión 5.1.26
- Oracle Enterprise Linux 7.3
- Oracle Database Enterprise Edition 12.2.0.1
- Oracle Grid Infrastructure 12.2.0.1
5. Instalación y desarrollo del workshop
1. Instalar Oracle VirtualBox 5.1.26 bajándolo de la página de Oracle Corporation.
http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html
2. Bajar los medios de Oracle 12.2.0.1 Grid y Base de Datos
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
3. Bajar la ISO de Oracle Enterprise Linux en la página:
https://edelivery.oracle.com/osdc/faces/Home.jspx;jsessionid=99Mw3KD0ZpofpbYeoPMrwiZriRr
SHwJbytNk5P4hqqImyfu8gV8L!1197049765
4. Luego de bajar el iso y los medios de instalación, crear una máquina virtual con
50GB de disco, y 4.5GB de memoria, en nuestro caso la llamaremos ora12p, que
será nuestra base de datos principal.
5. Crear una red interna que servirá de comunicación entre las dos máquinas
virtuales. La primera dejarla como NAT.
6. 6. Crearemos 4 discos adicionales de 6GB cada uno para la instalación del ASM.
Nota: Para la instalación sólo usaremos el primer disco de 50GB.
7. Crearemos una carpeta compartida para ver los medios que vamos a utilizar
para instalación de Oracle.
8. 9. Instalamos Linux 7.3 al iniciar la máquina
En nuestro caso utilizaremos el password: “password” para root.
9. 10. Colocar la ip y habilitar la red con la ip asignada en el archivo /etc/hosts.
La ip de sitio principal es 192.168.56.72, y la de sitio alterno es 192.168.56.71
10. 11. Luego Instalar las Guest Additions para compartir archivos en Linux
12. Montar la carpeta compartida para ver los archivos de los medios de instalación
13. Instalar los prerrequisitos de Oracle con el siguiente comando con el usuario root:
yum install oracle-database-server-12cR2-preinstall
11. 14. Instalar igualmente los prerrequisitos del grid con el usuario root con los siguientes 2 comandos,:
yum install oracleasm
yum install oracleasm-support
15. Realizar la configuración del Oracle asm inicial:
oracleasm configure –i
oracleasm init
16. Formatear los 4 discos de 6gb con el comando fdisk de Linux para una sola partición por disco.
Ejemplo: fdisk /dev/sdb
Quedando creadas las particiones
/dev/sdb1
/dev/sdc1
/dev/sdd1
12. /dev/sde1
17. Asignar las particiones creadas a oracle ASM
18. Crear las carpetas de oracle 12c y asignar pernmisos al usuario oracle
mkdir /u01/app/oracle/product/12.2.0/grid
chmod –R 775 /u01
chown –R oracle:oinstall /u01
19. Copiar el archivo de instalación del grid (linuxx64_12201_grid_home.zip) a la carpeta creada.
20. Hacer unzip al archive .zip. En 12c la imagen del grid solo se le da unzip.
unzip linuxx64_12201_grid_home.zip
21. Hasta este momento podemos crear nuestra segunda máquina virtual que hará los efectos de
standby. Para esto clonaremos la máquina.
22. Apagar la máquina virtual. Abrir una terminal y aplicar el comando:
init 0
23. Clonar la máquina ora12p, colocándole el nombre ora12s.
13. 24. Iniciar la máquina ora12s
25. Cambiar la MAC Address de la red interna creada en la máquina clonada para que luego de la
clonación no haya problemas. Además de esto cambiar la ip en el /etc/hostscon la ip
192.168.56.71 y reiniciar.
26. Luego en cada máquina virtual instalar el grid usando el comando gridSetup.sh, parados en la
carpeta /u01/app/oracle/product/12.2.0/grid y conectados con el usuario oracle.
14. Usar los dos primeros discos de ASM en esta pantalla.
.
.
.
15. 27. Luego de la instalación del grid, usando la aplicación asmca, agregar el diskgroup de FRA, que
servirá de ambiente de recuperación. Agregar los 2 siguientes discos restantes de ASM.
16. 28. Instalar el software de base de datos y la base de datos con el nombre orcl en la maquina
principal ora12p. Usando la opción “create and configure database”.
29. En la segunda máquina, ora12s, que hará como secundaria, solo instalar el software de base de
datos.
17.
18.
19.
20.
21.
22. 30. Con nuestras dos (2) máquinas virtuales implementadas podemos empezar a configurar nuestro
sitio principal.
o La base de datos primaria tendría en estos momentos el software de grid, el software de
base de datos y la base de datos orcl creada
o La base de datos secundaria tendría en estos momentos el software de grid y el software
de base de datos SIN la base de datos creada.
******** Base de datos Primaria *******
A. Investigar si está en force_logging a través de sqlplus, si no aplicar el forcé logging:
select force_logging from v$database;
alter database force logging;
B. Agregar los standby logfiles, les colocaremos el espacio por defecto
ALTER DATABASE ADD STANDBY LOGFILE '+DATA' size 52428800
/
ALTER DATABASE ADD STANDBY LOGFILE '+DATA' size 52428800
/
ALTER DATABASE ADD STANDBY LOGFILE '+DATA' size 52428800
/
ALTER DATABASE ADD STANDBY LOGFILE '+DATA' size 52428800
/
23. C. Configurar el FRA del sitio principalcon los siguientes comandos:
alter system set
log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST';
alter system set db_recovery_file_dest_size=5G;
alter system set db_recovery_file_dest='+FRA';
alter system set log_archive_config='dg_config=(orcl,stdby)';
show parameter log_archive_config
alter system set log_archive_dest_2='service=stdby async
valid_for=(online_logfile,primary_role) db_unique_name=stdby';
D. Verificar y colocar en modo archive log la bases de datos primaria
24. archive log list
shutdown immediate
startup mount
alter database archivelog;
alter database open;
E. Realizar un backup de la base de datos primaria usando rman desde una terminal.
rman
connect target sys/password
backup database plus archivelog;
25. *************** Base de Datos Standby*************
F. Agregar el FRA usando la herramienta ASMCA en el sitio secundario
26. G. Modificar el listener de la máquina secundaria editando el archivo:
/u01/app/oracle/product/12.2.0/grid/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2 )(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME= /u01/app/oracle/product/12.2.0/db_1)
(SID_NAME = stdby)
(GLOBAL_DBNAME = stdby)
)
)
Aplicar el reload del listener luego de salvado el archive listener.ora.
************Base de datos Primaria********************
H. Modificar el tnsnames de la base de datos primaria.
orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora12p)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
27. stdby =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora12s)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = stdby)
)
)
I. Asegurarse que las ips de la máquina estén asignadas al archivo /etc/hosts en cada
máquina:
************Base de datos Primaria********************
J. Pararse en la ruta dbs /u01/app/oracle/product/12.2.0/db_1/dbs, y copiar el
password file de la primaria a la secundaria:
scp orapworcl oracle@ora12s:/u01/app/oracle/product/12.2.0/db_1/dbs
28. ***********Base de Datos Standby**************************
K. Pararse en la ruta dbs /u01/app/oracle/product/12.2.0/db_1/dbs, y renombrar el
archivo copiado.
mv orapworcl orapwstdby
L. En la misma ruta /u01/app/oracle/product/12.2.0/db_1/dbs crear el archivo
initstdby.ora, y agregar el contenido “DB_NAME=stdby” al archivo y guardar.
29. M. Pararse en la ruta /u01/app/oracle/ y crear las carpetas siguientes;
admin/sytdby/adump, admin/sytdby/dpdump y admin/sytdby/pfile
mkdir admin
cd admin
mkdir stdby
cd stdby
mkdir adump dpdump pfile
N. Setear las variables de ambiente de Oracle para proceder a iniciar en modo nomount la
instancia secundaria
. oraenv
? stdby
? /u01/app/oracle/product/12.2.0/db_1
sqlplus / as sysdba
startup nomount pfile=initstdby.ora
************Bases de datos primaria*************************
O. Probar conexión a la secundaria
tnsping stdby
P. Crear el spfile en la base de datos primaria fuera del ASM de la siguente manera:
create pfile from spfile;
create spfile=’/u01/app/oracle/product/12.2.0/db_1/dbs/spfileorcl.ora’
from pfile;
Q. Crear un archivo, por ejemplo, rman.txt y copiar el siguiente contenido:
run {
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate channel prmy3 type disk;
allocate channel prmy4 type disk;
allocate auxiliary channel stby type disk;
duplicate target database for standby
from active database
dorecover
spfile
set "db_unique_name"="stdby"
set log_archive_dest_2="service=stdby ASYNC REGISTER
valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=orcl"
set FAL_SERVER="orcl"
set db_file_name_convert="orcl","stdby"
30. set audit_file_dest="/u01/app/oracle/admin/stdby/adump";
}
Con eso se estaria configurando scripts para una duplicación con preparación de una instancia
standby.
R. Luego conectarse a la base de datos primaria y la base de datos secundaria con RMAN
rman
connect target sys/password@orcl
connect auxiliary sys/password@stdby
S. Correr el archivo creado con el comando @:
@rman.txt
31. ***************************Base de datos Secundaria************************
T. en la secundaria agregar al /etc/oratab la entrada de stdby
U. Colocar en modo replicación la base de datos secundaria usando sqlplus:
alter database recover managed standby database using current
logfile disconnect;
V. Seleccionar los datos de una tabla, y luego colocar en modo lectura la base de datos
secundaria. Aquí ya estaríamos usando el modo Active Data Guard.
32.
33. *****************Base de datos Primaria******************
W. Habilitar el envío de cambios en la base de datos primaria:
alter system set log_archive_dest_state_2=enable scope=both;
X. Verificar tanto en la base de datos primaria como en la secundaria que estamos
sincronizados
SET echo ON
SELECT sequence#, first_time, next_time
FROM v$archived_log
ORDER BY sequence#
/
Si estamos al mismo orden de ultimo log, habremos ya implementado nuestra réplica de sitio
alterno exitosamente.
Y. Ahora probar el envío efectivo de cambios agregando un registro en una tabla en la base de
datos primaria y revisar en la base de datos standby el cambio.
Ejemplo:
Insert into hr.countries values (‘VZ’, ‘Venezuela’, 2);
34.
35. Z. Verificar que el cambio se replicó en la secundaria:
select * from hr.countries
Con esto comprobamos la implementación exitosa de nuestro sitio alterno, dejandolo replicando
completamente y en modo lectura en el sitio secundario.
F I N