martes, 19 de noviembre de 2013

ACTIVIDAD #26



INTRODUCCIÓN

Para configurar una replicación por mezcla o combinación con SQL Server 2008, Windows Server 2008 64-bits y SQL Server CE 3.5, debemos tomar nota de algunas consideraciones especiales.
Este articulo es la primera parte, que trata de la configuración del SQL Server 2008. En la segunda parte, a ser publicada en los siguientes días, se dará el paso a paso para publicar la sincronización con IIS 7.0 de Windows Server 2008.

PRIMERA PARTE

A continuación, y paso a paso, configuraremos una replicación por combinación o mezcla (merge replication) con SQL Server 2008 y SQL Server CE 3.5 a bordo de un dispositivo.
Para ello lanzamos el SQL Server Management Studio. Supondremos que la base de datos que queremos publicar ya está diseñada e implementada, en nuestro caso la base de datos se llama devicesonline, y la tabla que deseamos publicar se llama training_input.

1. Iniciar el asistente. Hacemos clic con botón derecho sobre el nodo replicación (Replication), para abrir el menú contextual. Luego seleccionamos Nueva publicación:

image

2. Comienza el asistente de publicación:

image

3. Establecer el distribuidor. El primer paso del asistente es pedir la PC que funcione como distribuidor. Como opción por defecto se sugiere el equipo local, pero se da la posibilidad de seleccionar otro equipo que ya haya sido configurado como servidor distribuidor. Nosotros seleccionamos la opción por defecto, el equipo local:

image

4. Configurar el inicio del agente SQL Server. Este servicio es el encargado de administrar ciertos aspectos de funcionamiento complementario del gestor de base de datos. Entre otros, se encarga de tomar las instantáneas de replicación y automatizar las tareas relacionadas. En nuestro caso, deseamos que se configure el arranque automático del servicio Agente de SQL Server (recomendado):

image

5. Carpeta de instantáneas. Esta carpeta contendrá los archivos para sincronización en un formato compatible con el mecanismo de transmisión y recepción de las tablas por replicación. Por defecto, esta carpeta se llama Repldata (replication data), y se ubica de manera predeterminada en la carpeta del programa SQL Server, localizada dentro de \Archivos de Programa. En nuestro caso, está ubicada en \Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\ReplData.
 
image

Por ahora dejemos con la configuración por defecto.

6. Compartir la carpeta de instantáneas. Sin embargo, para que funcione correctamente con capacidad de suscripción iniciable desde el servidor o desde el móvil, es imprescindible:
  • definir dicha carpeta como compartida
  • dar permisos de lectura, escritura, modificación al usuario predeterminado de internet en el equipo, IUSR_nombre_de_equipo en IIS 6.x, e ISR solamente en IIS 7.x
En nuestro ejemplo, navegamos hasta la carpeta por defecto y luego hacemos clic en Uso compartido avanzado, para especificar los usuarios con acceso de lectura/escritura a dicha carpeta:
image

7. En la ventana de uso compartido avanzado hacemos clic en Permisos:

image

8. Luego agregamos al usuario IUSR (si es Windows Server 2008 / Vista) o bien IUSR_nombre_equipo (si es Windows Server 2003 /XP o anterior). Especificamos permisos de control total a dicho usuario porque deberá crear estructura de carpetas dentro de Repldata.

image




9. Luego de haberla compartido de esta forma, retornamos a la pantalla del asistente de SQL Server, y borramos la ubicación de la carpeta \Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\ReplData y escribimos la dirección UNC (universal naming convention) de la misma, en nuestro caso de la forma \\equipo\repldata. Se nos advertirá en el mensaje de abajo que el asistente no verificará los permisos porque en esta etapa del asistente no se conocen aún los nombres de las cuentas para ingresar a la misma:

image

10. Nombre de la base de datos a publicar. Seleccionamos la nuestra, devicesonline, y hacemos clic en Siguiente.

image


11. Tipo de replicación. Como hasta este momento el asistente no sabe que los suscriptores serán dispositivos móviles, ofrece las 4 posibles replicaciones. Seleccionamos Merge Replication, ya que SQL Server Compact Edition sólo puede subscribirse a replicaciones de combinación o mezcla. Luego hacemos clic en Siguiente..

image

12. Versiones de los suscriptores. Se debe marcar todas las versiones de los RDBMS que se suscribirán a esta publicación. En nuestro caso, sólo necesitamos sincronizar con dispositivos móviles, por lo que se marca solamente dicha opción y se hace clic en siguiente:

image

13. Objetos que se publicarán. A pesar de que el asistente permite seleccionar Tablas, Procedimientos almacenados y funciones definidas por el usuario, el cliente de suscripción SQL Server CE sólo permite sincronizar los objetos del tipo Tabla. Hacemos clic en el nodo tablas y seleccionamos las tablas que deseamos sincronizar con los móviles, en nuestro caso, training_input1, asegurándonos que no marcamos el resto:

image

14. Alerta por ROWGUID. Al hacer clic en Siguiente para pasar a la próxima pantalla, el asistente nos da un alerta, informándonos que alterará el esquema de la base de datos agregando columnas de identificadores únicos a las tablas. Se muestra un breve sumario en la pantalla del asistente, indicándonos que se producirían estos potenciales problemas por la adición de la nueva columna:
  • Las instrucciones INSERT-SQL que no tengan una lista de columnas explícitas van a fallar.
  • Se incrementará el tamaño de las tablas.
  • Se incrementará el tiempo requerido para generar la instantánea final.
SQL Server agrega una columna del tipo ROWGUIDCOL, con un índice único (es decir, se adiciona una clave candidata a las tablas que se publiquen). Leído esto, que no es más que informativo, hacemos clic en siguiente.
image

15. Filtrado de las filas de la tabla. En el caso que lo deseemos, hagamos clic en Agregar y seleccionemos Agregar Filtro
image

Donde podremos definir el filtrado de las publicaciones:

image

Una consideración importante es si deseamos particionar el filtrado para que cada fila del resultado vaya a todos los suscriptores (una sola partición), o bien vaya sólo a un subscriptor (múltiples particiones). En este ultimo caso de particiones múltiples, se debe utilizar un filtro parametrizado con una función como HOSTNAME o SUSER_NAME, por ejemplo
SELECT columna1,columna2.. FROM tablaPublicada WHERE columnaFiltro = HOSTNAME()
En un próximo artículo daremos más precisiones sobre el filtrado de partición múltiple. Por ahora, como no deseamos filtrar nada, todos los suscriptores recibirán el mismo conjunto de datos, hacemos clic en Siguiente.

16. Agente de Instantáneas. En esta pantalla se especifica cuando se deberá correr el Agente de Instantáneas para inicializar la publicación. Se marcan dos ajustes predeterminados: [ ] iniciar el agente de instantáneas inmediatamente luego de terminar el asistente, y [ ] Agendar el Agente de instantáneas para que corra automáticamente cada 14 dias, a las 5.00AM, comenzando el mismo día donde se está ejecutando el asistente (fecha actual). Dejamos estos ajustes sin tocar, y hacemos clic en siguiente:
image

17. Ajustes de seguridad del agente de instantáneas: En esta pantalla se debe especificar los ajustes de seguridad del Agente de Instantáneas, a saber: cuenta para correr ese servicio, y cuenta para conectar al Publicador. Hacemos clic en Ajustes de seguridad:
image

Luego especificamos las cuentas para controlar el proceso en la siguiente pantalla:

image
Para conectar al publicador especificamos alguna cuenta que ya esté creada como login de la instancia del SQL Server. Si no existe , podremos crearla a tal efecto, para especificarla debajo del apartado “Conectar al Publicador”.
Para pruebas. podemos ajustar la cuenta para correr el agente de instantáneas a la cuenta predeterminada, y para conectar la publicador podremos usar la del administrador de sistema, sa.
Una vez hecho esto, damos Aceptar (OK) y proseguimos con la próxima pantalla del asistente haciendo clic en Siguiente.
18. Acción final del asistente. En la ultima pantalla se nos pregunta si deseamos que el asistente cree la publicación, o bien genere un script-SQL que especifique los pasos para crear la publicación, o ambas cosas. Nosotros hemos marcado Crear la publicación, y no el Script, ya que deseamos crearlo inmediatamente.
image

19. Nombre de la publicación y sumario final: En la ultima pantalla del asistente, se completa el mismo especificando un nombre para la publicación. En este caso, damos a ésta el nombre TRAININGSETS: , luego revisamos el sumario con todas los ajustes que hemos hecho en los pasos anteriores. Si existe algún ajuste que deseamos modificar, debemos pulsar el botón Atrás (Back), regresar a la pantalla correspondiente , y efectuar las modificaciones deseadas, luego avanzar hasta el final nuevamente. Si estamos de acuerdo con los ajustes hecho, pulsamos finalizar.

image

20. Creación de la publicación y posibles problemas. En este paso ya se corre el procedimiento para crear la publicación:
image

Sin embargo, puede haber este problema, dependiendo del ajuste de seguridad si tenemos SQL Server 2008:

image

Si no experimentamos este problema, podemos dar por terminada la primera parte de la publicación
Sino, continuemos para solucionarlo:
20.1 Es posible que el distribuidor no se puede configurar correctamente porque para hacerlo se debe tener acceso al procedimiento almacenado llamado sp_set_sqlagent_properties del componente Agent XP. Esto sucede porque este componente está configurado para no formar parte de la configuración de seguridad de este servidor. El mensaje de advertencia (estrictamente hablando no es un error) es el siguiente:

image
20.2 Para evitar este problema, hay que reconfigurar el agente XP y el xp_cmdshell con el siguiente script:
sp_configure 'show advanced options',1
reconfigure with override
go
sp_configure 'xp_cmdshell',1
reconfigure with override
go
sp_configure 'Agent XPs',1
reconfigure with override
go

Esto lo debemos correr desde la base de datos master, en la ventana del SQL Server Management Studio:
image


20.3 Una vez hecho esto, iniciamos el servicio de Agente SQL Server. Este servicio corre con la cuenta nueva de Windows Server 2008, NT SERVICES/SQLSERVERAGENT., la cual debe tener permisos de lectura y escritura sobre la carpeta marcada para compartir.
Tenemos dos maneras de iniciar el servicio: (A) desde la línea de comandos, y (B) desde la interfaz administrativa
A. Iniciar el servicio desde la línea de comandos. Ejecutar el shell de comandos cmd.exe, y allí tipiar lo siguiente:
image

B. iniciarlo desde el mismo SQL Server Management Studio, que ya tenemos abierto:

image

Se nos presentará un cuadro de diálogo pidiendo confirmación de iniciar el servicio SQLSERVERAGENT en el equipo, hagamos clic en aceptar y el servicio ya estará corriendo, lo podemos confirmar viendo el nodo correspondiente, con el icono de “play” en verde:

image

20.4 Windows Vista y Server 2008 utilizan un nuevo mecanismo de elevación de privilegios. Las cuentas administrativas nunca corren con los máximos privilegios sino que, sólo cuando es necesario, elevan temporalmente sus permisos al nivel que le corresponde a dicha cuenta. Como la carpeta de instantáneas por defecto, definida en el paso 5 de este tutorial, se encuentra dentro de la carpeta \Archivos de Programa, es posible que existan problemas para su acceso. Por lo tanto, creemos una que se denomine igual (no es necesario que se llame repldata, lo hacemos aquí por motivos didácticos) en el directorio raíz del equipo, por ejemplo C:\repldata. Luego procedamos a dar acceso de control total a la cuenta del agente SQL Server, NT SERVICES/SQLSERVERAGENT.

image image

20.5 Con el agente SQL ya en ejecución y la carpeta definida fuera de \Archivos de Programa, volvemos al SQL Server Management Studio, localizamos nuestra publicación recién creada, buscamos en el árbol de objetos la replicación, y vamos a la ficha Propiedades de nuestra publicación:

image

Luego seleccionamos la ficha de Instantáneas (Snapshot) y marcamos [x] Colocar los archivos en la siguiente carpeta, y desmarcamos la opcion [ ] Colocar los archivos en la carpeta por defecto. Luego aceptamos haciendo clic en OK.

image

20.6 A continuación lanzamos el visor de estado del agente de instantánea, quien es el que hace el trabajo de armar la instantánea en la carpeta repldata:

image

El visor de estado del Agente de Instantáneas se inicia, comenzando el proceso de armar el contenido de la carpeta repldata donde se alojan las instantáneas.
Al comenzar deberemos algo de esto:

image
Y al finalizar tendremos:

image
Cerramos dicha ventana.

20.7 Para ver que la instantánea está correctamente inicializada, volvemos al árbol de objetos del SQL Server Management Studio, sobre el nombre de la publicación, hacemos clic con botón derecho nuevamente, y seleccionamos “Iniciar monitor de replicación” (debemos asegurarnos que el Agente de SQL Server está corriendo, según lo especificado en el punto 20.3).

image

Y debemos ver esta pantalla,

image


Replicacion con oracle database


Oracle Streams Propaga y administra datos, transacciones y eventos en una fuente de datos ya sea dentro de una base de datos, o de una base de datos a otra.

Bien a continuacion les dejo un paso a paso un tanto "extenso" para montar el Oracle Streams:

Requisitos:
Oracle version 10.2.0.1 en ambos casos
Windows XP / Windows 2003

Nombres del SID y TNS name:
DB1, db1 (Origen)
DB2, db2 (Destino)

Debemos configurar ambos parametros en cada base de datos (db1, db2):

1. Habilitamos el modo ARCHIVELOG en ambas bases de datos:

DB Origen: DB1
SQL> conn sys/sys as sysdba
Connected.
SQL> shutdown immediate
SQL> startup mount;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE ARCHIVE LOG START

2. Creamos un usuario administrador para el Stream

DB Origen: DB1
SQL> conn sys/sys as sysdba
Connected.
SQL> create user strmadmin identified by strmadmin;

User created.

SQL> grant connect, resource, dba to strmadmin;

Grant succeeded.

SQL> begin dbms_streams_auth.grant_admin_privilege
2 (grantee => 'strmadmin',
3 grant_privileges => true);
4 end;
5 /

PL/SQL procedure successfully completed.

SQL> grant select_catalog_role, select any dictionary to strmadmin;

Grant succeeded.

2.1 Ahora realizamos las mismas operaciones en la base de datos destino: DB2

SQL> conn sys/sys as sysdba
Connected.
SQL> create user strmadmin identified by strmadmin;

User created.

SQL> grant connect, resource, dba to strmadmin;

Grant succeeded.

SQL> begin dbms_streams_auth.grant_admin_privilege
2 (grantee => 'strmadmin',
3 grant_privileges => true);
4 end;
5 /

PL/SQL procedure successfully completed.

SQL> grant select_catalog_role, select any dictionary to strmadmin;

Grant succeeded.

3. Ahora deberemos configurar el fichero INIT.ORA con los siguientes parametros:

DB Origen: DB1
SQL> conn sys/sys as sysdba
Connected.
SQL> alter system set global_names=true;

System altered.

SQL> alter system set streams_pool_size = 100 m;

System altered.

DB destino: DB2
SQL> conn sys/sys as sysdba
Connected.
SQL> alter system set global_names=true;

System altered.

SQL> alter system set streams_pool_size = 100 m;

System altered.

4. Ahora crearemos el enlace en cada base de datos apuntando a la otra:

DB Origen: DB1
SQL> conn strmadmin/strmadmin@db1
Connected.
SQL> create database link db2
2 connect to strmadmin
3 identified by strmadmin
4 using 'DB2';

Database link created.

DB Destino: DB2
SQL> conn strmadmin/strmadmin@db2
Connected.
SQL> create database link db1
2 connect to strmadmin
3 identified by strmadmin
4 using 'DB1';

Database link created.

5. Configuramos el origen y el destino de las consultas:

DB origen: DB1
SQL> conn strmadmin/strmadmin@db1
Connected.
SQL> EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();

PL/SQL procedure successfully completed.

DB Destino: DB2
SQL> conn strmadmin/strmadmin@db2
Connected.
SQL> EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();

PL/SQL procedure successfully completed.

6. Configuramos el esquema para los streams:

Esquema: SCOTT
Table: pibe

NOTA: El esquema scott viene bloqueado en las versiones 10g asi que deberemos desbloquearlos:

DB Origen: DB1
SQL> conn sys/sys as sysdba
Connected.
SQL> alter user scott account unlock identified by tiger;

User altered.

SQL> conn scott/tiger@db1
Connected.
SQL> create table pibe ( no number primary key,name varchar2(20),ddate date);

Table created.

DB Destino: DB2
SQL> conn sys/sys as sysdba
Connected.
SQL> alter user scott account unlock identified by tiger;

User altered.

SQL> conn scott/tiger@db2
Connected.
SQL> create table pibe ( no number primary key,name varchar2(20),ddate date);

Table created.

7. Creamos un acceso suplementario en la base de datos origen:

DB Origen: DB1
SQL> conn scott/tiger@db1
Connected.
SQL> alter table pibe
2 add supplemental log data (primary key,unique) columns;

Table altered.

8. Configuramos el proceso de captura en la base de datos origen:

DB Origen: DB1
SQL> conn strmadmin/strmadmin@db1
Connected.
SQL> begin dbms_streams_adm.add_table_rules
2 ( table_name => 'scott.pibe',
3 streams_type => 'capture',
4 streams_name => 'capture_stream',
5 queue_name=> 'strmadmin.streams_queue',
6 include_dml => true,
7 include_ddl => true,
8 inclusion_rule => true);
9 end;
10 /

PL/SQL procedure successfully completed.

9. Configuramos el proceso de propagacion:

DB Origen: DB1
SQL> conn strmadmin/strmadmin@db1
Connected.
SQL> begin dbms_streams_adm.add_table_propagation_rules
2 ( table_name => 'scott.pibe',
3 streams_name => 'DB1_TO_DB2',
4 source_queue_name => 'strmadmin.streams_queue',
5 destination_queue_name => 'strmadmin.streams_queue@DB2',
6 include_dml => true,
7 include_ddl => true,
8 source_database => 'DB1',
9 inclusion_rule => true);
10 end;
11 /

PL/SQL procedure successfully completed.

10. Configuramos el SCN:

DB Origen: DB1
SQL> CONN STRMADMIN/STRMADMIN@DB1
Connected.
SQL> declare
2 source_scn number;
3 begin
4 source_scn := dbms_flashback.get_system_change_number();
5 dbms_apply_adm.set_table_instantiation_scn@DB2
6 ( source_object_name => 'scott.pibe',
7 source_database_name => 'DB1',
8 instantiation_scn => source_scn);
9 end;
10 /

PL/SQL procedure successfully completed.

11. Configuramos el proceso de aplicacion en la base de datos destino:

DB Destino: DB2
SQL> conn strmadmin/strmadmin@db2
Connected.
SQL> begin dbms_streams_adm.add_table_rules
2 ( table_name => 'scott.pibe',
3 streams_type => 'apply',
4 streams_name => 'apply_stream',
5 queue_name => 'strmadmin.streams_queue',
6 include_dml => true,
7 include_ddl => true,
8 source_database => 'DB1',
9 inclusion_rule => true);
10 end;
11 /

PL/SQL procedure successfully completed.

12. Iniciamos la captura y el proceso de aplicacion de datos:

DB Origen: DB1
SQL> conn strmadmin/strmadmin@db1
Connected.
SQL> begin dbms_capture_adm.start_capture
2 ( capture_name => 'capture_stream');
3 end;
4 /

PL/SQL procedure successfully completed.

Db Destino: DB2
SQL> conn strmadmin/strmadmin@db2
Connected.
SQL> begin dbms_apply_adm.set_parameter
2 ( apply_name => 'apply_stream',
3 parameter => 'disable_on_error',
4 value => 'n');
5 end;
6 /

PL/SQL procedure successfully completed.

SQL> begin
2 dbms_apply_adm.start_apply
3 ( apply_name => 'apply_stream');
4 end;
5 /

PL/SQL procedure successfully completed.

NOTA: El entorno de replicacion ya esta listo!, lo que debemos hacer a continuacion es probarlo...

SQL> conn scott/tiger@db1
Connected.
SQL> --DDL operation
SQL> alter table pibe add (flag char(1));

Table altered.

SQL> --DML operation
SQL> begin
2 insert into pibe values (1,'first_entry',sysdate,1);
3 commit;
4 end;
5 /

PL/SQL procedure successfully completed.

SQL> conn scott/tiger@db2
Connected.
SQL> --TEST DDL operation
SQL> desc pibe
Name Null? Type
----------------------------------------- -------- ----------------------------

NO NOT NULL NUMBER
NAME VARCHAR2(20)
DDATE DATE
FLAG CHAR(1)

SQL> --TEST DML operation
SQL> select * from pibe;

NO NAME DDATE F
---------- -------------------- --------- -
1 first_entry 28-AGO-10 1

Como pueden ver, hemos actualizado la tabla en la DB1 y el stream se ha replicado a la DB2.




No hay comentarios:

Publicar un comentario