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:
2. Comienza el asistente de publicación:
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:
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):
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.
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
7. En la ventana de uso compartido avanzado hacemos clic en Permisos:
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.
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:
10. Nombre de la base de datos a publicar. Seleccionamos la nuestra, devicesonline, y hacemos clic en Siguiente.
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..
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:
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:
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.
15. Filtrado de las filas de la tabla. En el caso que lo deseemos, hagamos clic en Agregar y seleccionemos Agregar Filtro
Donde podremos definir el filtrado de las publicaciones:
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:
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:
Luego especificamos las cuentas para controlar el proceso en la siguiente pantalla:
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.
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.
20. Creación de la publicación y posibles problemas. En este paso ya se corre el procedimiento para crear la publicación:
Sin embargo, puede haber este problema, dependiendo del ajuste de seguridad si tenemos SQL Server 2008:
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:
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:
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:
B. iniciarlo desde el mismo SQL Server Management Studio, que ya tenemos abierto:
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:
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.
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:
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.
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:
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:
Y al finalizar tendremos:
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).
Y debemos ver esta pantalla,
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