Está en la página 1de 9

ORACLE STREAM Replicacion con capturas Syncronous.

Datos: Para esta práctica 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 máquinas separadas o en dos máquinas 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 comunicación 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 información 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 información del servidor2.

De igual manera hacemos con nuestro servidor2. Guardamos los cambios hechos en los dos servidores. .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). El siguiente paso es comprobar las conexiones entre los dos servidores para esto utilizamos el comando tnsping [ALIAS]. En la última línea nos dice Ok (0 msec) Que indica una conexión exitosa con 0 milisegundos de tiempo de respuesta.ora es la siguiente.2. En nuestro servidor1 digitamos tnsnames DB11G2 (para comprobar con nuestro servidor2).0/dbhome_1/network/admin/tnsnames. en este caso en mi servidor2 la ubicación del archivo tnsnames. si todo esta bien tendría que arrojarnos esta información. /u01/app/oracle/product/11.

exit (para salir) Ahora de igual manera nos ubicamos en nuestro servidor2 e ingresamos al system del Servidor1 de . la ingresamos y si tenemos el siguiente resultado es porque nos conectamos correctamente. Desde el servidor1: Digitamos el siguiente comando. para ratificar esta conexión podemos intentar ingresar de un servidor a otro. tnsping DB11G Y de igual manera nos debe arrojar un resultado similar para confirmar que nuestras conexiones están correctas.Ahora en nuestro servidor2 lo hacemos de igual manera. sqlplus system@DB11G2 Nos pedirá la contraseña del usuario system del servidor2. Hasta aquí ya tenemos configurada la conexión entre nuestros servidores. Conexion exitosa. Conexión OK.

26/DB11G2 Corresponde a Nombre_Usuario/Contraseña@Ip_Maquina_Destino/Nombre_Alias AHORA SI PODEMOS COMENZAR A CONFIGURAR STREM REPLICATION.igual manera. la ingresamos y está comprobado la conexión entre las dos bases. sqlplus system@DB11G nos pide la contraseña del usuario system del servidor1. /*configurar administrador stream de oracle */ alter system set global_names=true. 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 código.2. Conexión satisfactoria. exit.168. (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/contraseña@192. .

/ Para el servidor2. /*Le otorgamos privilegios DBA y ejecución DBMS al usuario creado */ GRANT DBA TO strmadmin. END. Ahora vamos a crear los link entre los servidores (tema Vistas Materializadas). /*Creamos el ususario strmadmin*/ CREATE USER strmadmin IDENTIFIED BY oracle DEFAULT TABLESPACE streams_tbs QUOTA UNLIMITED ON streams_tbs. De ahi todo el código es exactamente igual. luego de esto nos ubicamos en el servidor2 y digitamos un código muy similar para enlazarnos al servidor1. CREATE TABLESPACE streams_tbs DATAFILE '/u01/app/oracle/oradata/DB11G2/streams_tbs.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED. En ser servidor2 corremos los mismos comandos. grant_privileges => TRUE). /*Por último activamos banderas de privilegios en los DBMS_STREAMS*/ BEGIN DBMS_STREAMS_AUTH. Creación de los Database Link entre los servidores. ingresaremos con este usuario: Servidor1. sqlplus strmadmin/oracle y procedemos a crear el enlace hacia el servidor2 con el siguiente código: create database link DB11G2 connect to strmadmin identified by oracle using 'DB11G2'.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED. . create database link DB11G connect to strmadmin identified by oracle using 'DB11G'. GRANT EXECUTE ON DBMS_FILE_TRANSFER TO strmadmin. tomando en cuenta claro está la ubicación de donde vamos a crear nuestro tablespace: En este caso para mi servidor2 el codigo para crear el tablespace es el siguiente./*Creamos un tablespace*/ CREATE TABLESPACE streams_tbs DATAFILE '/u01/app/oracle/oradata/DB11G/streams_tbs. Como ya creamos nuestro usuario strmadmin. Luego de esto procedemos a dar los respectivos permisos y crear las respectivas reglas de acceso y disponibilidad de información en los servidores.GRANT_ADMIN_PRIVILEGE( grantee => 'strmadmin'.

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

digitamos el siguiente comando.jobs. source_database_name => 'DB11G'. / Espero no estar muy equivocado en mis aclaraciones pero si desean información oficial.sql para ingresar el script1.htm Para ingresar el script1. Y nos debe dar el siguiente resultado. instantiation_scn => cscn).com/cd/B19306_01/server. Nos conectamos en el servidor1 con el usuario system.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. DBMS_APPLY_ADM. Por comodidad adjunto de igual manera el script2. DBMS_APPLY_ADM. select * from hr.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.SET_TABLE_INSTANTIATION_SCN@DB11G2( source_object_name => 'hr. Una vez hecho esto estamos listos para realizar las pruebas respectivas de nuestros servidores.GET_SYSTEM_CHANGE_NUMBER().cscn := DBMS_FLASHBACK.sql a nuestra base primero ingresamos con nuestro usuario strmadmin sqplus strmadmin/oracle y cuando ya hemos ingresado.sql Y entonces todo el script se ingresará automáticamente a nuestra base.jobs'. http://docs. Servidor2: Para nuestro servidor 2 la única diferencia es que en las partes de script1.102/b14228/gen_rep.START_APPLY( apply_name => 'apply_hr_jobs'). pueden revisar el siguiente enlace. sqlplus system/contraseña visualizamos la información de nuestra tabla replicada.oracle. END. @script1. .sql correspondiente al servidor2.

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

Ahora para comprobar en la otra vía la replicación realizamos un update en el servidor2 update hr.jobs. Y sorpresa!!! Se replicaron los cambios. CON ESTO HEMOS CONCLUIDO NUESTRO PEQUEÑO EJEMPLO DE DATABASE REPLICATION ENVIRONMENT WITH SYNCHRONOUS CAPTURES. commit. . Y al realizar la consulta en el servidor1 de igual manera se ha cambiado el registro de la base.Ahora nos ubicamos en el servidor2 y realizamos un select a ver si se han replicado los cambios. Nos conectamos con system sqlplus system/contraseña y realizamos un: select * from hr.jobs set job_title='Presidente_yo' where job_title='Presidentesss.