Você está na página 1de 9

ORACLE STREAM Replicacion con capturas Syncronous.

Datos: Para esta prctica se toma en cuanta que contamos con dos servidores oracle (en este caso Oracle Enterprise 11g R2 sobre Oracle Linux 6,3), ya sean en mquinas separadas o en dos mquinas virtuales los cuales constan de los siguientes datos. Servidor1 SID=DB11G IP= 192,168,2,25 Servidor2 SID=DB11G2 IP=192,168,2,26 NOTA: A medida que se vayan ejecutando los pasos siempre es bueno seguir grabando con el comando: commit; Lo primero que debemos hacer es configurar la comunicacin entre los dos servidores, para esto modificamos los archivo tnsnames.ora las ubicaciones y contenidos son: Servidor1: /u01/app/oracle/product/11.2.0/db1/network/admin/tnsnames.ora su contenido es el siguiente (utilizo vim) y agrego la informacin del servidor 2.

Como podemos apreciar en la parte superior del archivo se encuentra las configuraciones de mi servidor local (servidor1) y en la parte inferior colocamos la informacin del servidor2.

De igual manera hacemos con nuestro servidor2, en este caso en mi servidor2 la ubicacin del archivo tnsnames.ora es la siguiente. /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora su contenido lo editamos (en este caso con el editor vim)

De igual manera que en el servidor1 su contenido corresponde a: En la parte superior son las configuraciones del servidor local (servidor2) y en la parte inferior se encuentra de nuestro servidor que queremos acceder (servidor1). Guardamos los cambios hechos en los dos servidores. El siguiente paso es comprobar las conexiones entre los dos servidores para esto utilizamos el comando tnsping [ALIAS]; En nuestro servidor1 digitamos tnsnames DB11G2 (para comprobar con nuestro servidor2), si todo esta bien tendra que arrojarnos esta informacin.

En la ltima lnea nos dice Ok (0 msec) Que indica una conexin exitosa con 0 milisegundos de tiempo de respuesta.

Ahora en nuestro servidor2 lo hacemos de igual manera. tnsping DB11G Y de igual manera nos debe arrojar un resultado similar para confirmar que nuestras conexiones estn correctas.

Conexin OK. Hasta aqu ya tenemos configurada la conexin entre nuestros servidores, para ratificar esta conexin podemos intentar ingresar de un servidor a otro. Desde el servidor1: Digitamos el siguiente comando. sqlplus system@DB11G2 Nos pedir la contrasea del usuario system del servidor2, la ingresamos y si tenemos el siguiente resultado es porque nos conectamos correctamente.

Conexion exitosa. exit (para salir) Ahora de igual manera nos ubicamos en nuestro servidor2 e ingresamos al system del Servidor1 de

igual manera. sqlplus system@DB11G nos pide la contrasea del usuario system del servidor1, la ingresamos y est comprobado la conexin entre las dos bases.

Conexin satisfactoria. exit; (para salir) NOTA: Si en la prueba de tnsping nos di respuesta satisfactoria y al intentar conectarse al usuario system del otro servidor nos da el siguiente error: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA Probamos conectarnos con la siguiente sentencia: sqlplus system/contrasea@192,168,2,26/DB11G2 Corresponde a Nombre_Usuario/Contrasea@Ip_Maquina_Destino/Nombre_Alias

AHORA SI PODEMOS COMENZAR A CONFIGURAR STREM REPLICATION. Ahora si comenzaremos con el servidor1 en el cual nos conectamos con privilegios dba de la siguiente manera. sqlplus / as sysdba una vez ingresado digitamos o pegamos el siguiente cdigo.
/*configurar administrador stream de oracle */ alter system set global_names=true;

/*Creamos un tablespace*/ CREATE TABLESPACE streams_tbs DATAFILE '/u01/app/oracle/oradata/DB11G/streams_tbs.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED; /*Creamos el ususario strmadmin*/ CREATE USER strmadmin IDENTIFIED BY oracle DEFAULT TABLESPACE streams_tbs QUOTA UNLIMITED ON streams_tbs; /*Le otorgamos privilegios DBA y ejecucin DBMS al usuario creado */ GRANT DBA TO strmadmin; GRANT EXECUTE ON DBMS_FILE_TRANSFER TO strmadmin; /*Por ltimo activamos banderas de privilegios en los DBMS_STREAMS*/ BEGIN DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE( grantee => 'strmadmin', grant_privileges => TRUE); END; /

Para el servidor2. En ser servidor2 corremos los mismos comandos, tomando en cuenta claro est la ubicacin de donde vamos a crear nuestro tablespace: En este caso para mi servidor2 el codigo para crear el tablespace es el siguiente.
CREATE TABLESPACE streams_tbs DATAFILE '/u01/app/oracle/oradata/DB11G2/streams_tbs.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

De ahi todo el cdigo es exactamente igual. Creacin de los Database Link entre los servidores. Ahora vamos a crear los link entre los servidores (tema Vistas Materializadas). Como ya creamos nuestro usuario strmadmin, ingresaremos con este usuario: Servidor1. sqlplus strmadmin/oracle y procedemos a crear el enlace hacia el servidor2 con el siguiente cdigo:
create database link DB11G2 connect to strmadmin identified by oracle using 'DB11G2';

luego de esto nos ubicamos en el servidor2 y digitamos un cdigo muy similar para enlazarnos al servidor1.
create database link DB11G connect to strmadmin identified by oracle using 'DB11G';

Luego de esto procedemos a dar los respectivos permisos y crear las respectivas reglas de acceso y disponibilidad de informacin en los servidores.

Servidor1: Nota: Adjunto script1.sql para ingresarlo fcilmente a nuestra base pero por aclarar algunos puntos a continuacin describo las lneas de cdigo que encontrarn en el script.sql
DECLARE cscn NUMBER; BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE(queue_name=>'capture_queue', queue_user=>'STRMADMIN'); DBMS_STREAMS_ADM.SET_UP_QUEUE(queue_name=>'apply_queue', queue_user=>'STRMADMIN'); //AHORA CONFIGURAMOS EL PROECESO EN BASE1 PARA QUE APLIQUE CAMBIOS COMPARTIDOS QUE SERAN CAPTURADOS POR LA BASE2// DBMS_APPLY_ADM.CREATE_APPLY( queue_name => 'strmadmin.apply_queue', apply_name => 'apply_hr_jobs', apply_captured => FALSE); //Aplicamos las reglas, estas reglas regirn al proceso apply_hr_jobs y capturara todas los cambios dml en hr.jobs que aparecen en apply_queue creado anteriormente y especificamos que los cambios los capturar en la base 2 /// DBMS_STREAMS_ADM.ADD_TABLE_RULES( table_name => 'hr.jobs', streams_type => 'apply', streams_name => 'apply_hr_jobs', queue_name => 'strmadmin.apply_queue', source_database => 'DB11G2'); //especificamos la propagacion desde la base1 hacia la base2 /// DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES( table_name => 'hr.jobs', streams_name => 'send_hr_jobs', source_queue_name => 'strmadmin.capture_queue', destination_queue_name => 'strmadmin.apply_queue@DB11G2', source_database => 'DB11G', queue_to_queue => TRUE); //configurar captura synchronous en la base1 // DBMS_STREAMS_ADM.ADD_TABLE_RULES( table_name => 'hr.jobs', streams_type => 'sync_capture', streams_name => 'sync_capture', queue_name => 'strmadmin.capture_queue'); //especifica instancias SCN en la tabla de la base1 esta instancia podra realizar cambios a nivel de datos si fuera necesario, esta debe ser especificada para cada tabla compartida//

cscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER(); DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@DB11G2( source_object_name => 'hr.jobs', source_database_name => 'DB11G', instantiation_scn => cscn); DBMS_APPLY_ADM.START_APPLY( apply_name => 'apply_hr_jobs'); END; /

Espero no estar muy equivocado en mis aclaraciones pero si desean informacin oficial, pueden revisar el siguiente enlace. http://docs.oracle.com/cd/B19306_01/server.102/b14228/gen_rep.htm Para ingresar el script1.sql a nuestra base nos ubicamos en la carpeta donde se encuentra el script (claro est todo en una terminal) en mi caso cd /home/oracle/streamRepli/ si en esta carpeta ejecuto el comando ls podr apreciar que se encuentra el archivo script1.sql para ingresar el script1.sql a nuestra base primero ingresamos con nuestro usuario strmadmin sqplus strmadmin/oracle y cuando ya hemos ingresado, digitamos el siguiente comando. @script1.sql Y entonces todo el script se ingresar automticamente a nuestra base. Servidor2: Para nuestro servidor 2 la nica diferencia es que en las partes de script1.sql donde se encontraba DB11G la cambiamos por DB11G2 y donde se encuentre DB11G2 la cambiamos por DB11G y listo el ingreso es exactamente igual. Por comodidad adjunto de igual manera el script2.sql correspondiente al servidor2. Una vez hecho esto estamos listos para realizar las pruebas respectivas de nuestros servidores. Nos conectamos en el servidor1 con el usuario system. sqlplus system/contrasea visualizamos la informacin de nuestra tabla replicada. select * from hr.jobs; Y nos debe dar el siguiente resultado.

Ahora nos conectamos en nuestro servidor2 y realizamos la misma consulta: nos debe dar exactamente el mismo resultado. Ahora en nuestro servidor1 vamos a realizar una modificacin a un campo para esto digitamos: update hr.jobs set job_title='Presidentesss' where job_title='President'; commit; Ahora hacemos un nuevo select * from hr.jobs; y podemos apreciar que se cambio la informacin de la tabla.

Ahora nos ubicamos en el servidor2 y realizamos un select a ver si se han replicado los cambios. Nos conectamos con system sqlplus system/contrasea y realizamos un: select * from hr.jobs; Y sorpresa!!! Se replicaron los cambios.

Ahora para comprobar en la otra va la replicacin realizamos un update en el servidor2 update hr.jobs set job_title='Presidente_yo' where job_title='Presidentesss; commit; Y al realizar la consulta en el servidor1 de igual manera se ha cambiado el registro de la base.

CON ESTO HEMOS CONCLUIDO NUESTRO PEQUEO EJEMPLO DE DATABASE REPLICATION ENVIRONMENT WITH SYNCHRONOUS CAPTURES.

Você também pode gostar