jueves, noviembre 23, 2006

Entornos de Replicación en SQL Server

La replicación de base de datos es una herramienta muy potente en el mundo de las aplicaciones distribuidas. Sus aplicaciones en el mundo real son muy variadas. Sin embargo, para que se pueda utilizar de forma correcta y funcione como esperamos es importante conocer realmente cómo funciona y las diferentes opciones que nos ofrece. En principio este artículo está orientado a la replicación sobre bases de datos SQL Server 2000/2005 aunque la teoría es extrapolable a otros gestores del mercado.

En este artículo entenderemos la replicación y veremos cómo planificar una replicación:
  • Beneficios de la Replicación
  • Elementos que influyen en la Replicación
  • ¿Qué Replicación se adecua mejor a mi entorno?
  • ¿Qué tipo de suscripción debo utilizar?
  • ¿Qué artículos debo publicar?

Beneficios de la Replicación
Los beneficios o los entornos donde es aplicable la replicación de bases de datos son los siguientes:

  • Usuarios trabajando en ubicaciones geográficamente alejados trabajando con sus propias copias locales de la base de datos.
  • Entornos en los que se replica la base de datos principal en una secundaria como copia de seguridad. En el caso que la primaria caiga, la secundaria toma el control.
  • En entornos en los que la carga de usuarios sea muy grande para un sólo gestor, se pueden replicar las bases de datos en varios servidores asignando a cada usuario un servidor. Balanceando de esta manera la carga podremos aliviar a los gestores.
Como observamos, los entornos son variados y comunes en muchos casos. El problema reside en la configuración y la elección correcta del tipo de replicación.

Modelo de Replicación
Antes de empezar, vamos a clarificar los conceptos y términos que se utilizan cuando hablamos de la replicación. Los elementos que componen la replicación son los siguientes:

  • Publicador: es la instancia que pone sus datos a disposición de otras localizaciones mediante la replicación. El Publicador puede tener varias publicaciones configuradas cada una relacionada con un conjuntos lógico de objetos y datos.
  • Distribuidor: es la base de datos destinada a almacenar la información específica asociada a la replicación de uno o más publicadores. Cada publicador es asociado con una base de datos (conocida como la base de datos de distribución) en el Distribuidor. La base de datos de distribución guarda el estado de la replicación, metadatos y en algunos casos hace de cola de distribución entre el publicador y el suscriptor. En la mayoría de los casos, la misma base de datos actúa como Publicador y Distribuidor. Cuando el Publicador y el Distribuidor se encuentran en servidores separados, el Distribuidor es conocido como "Distribuidor Remoto".
  • Suscriptores: es una base de datos configurada para recibir datos replicados. Un suscriptor puede recibir datos de múltiples Publicadores y publicaciones. Dependiendo del tipo de replicación elegida, el suscriptor también puede pasarle datos al Publicador.
  • Artículo: un artículo identifica un objeto de base de datos que es incluido en la publicación. Una publicación puede tener varios tipos de artículos: procedimientos almacenados, vistas, tablas y otro tipo de objetos. Cuando las tablas son publicadas, se pueden establecer filtros para restringir los datos y/o columnas que se envían al suscriptor.
  • Publicación: es una colección de no o más artículos de una base de datos. La agrupación de artículos en una publicación hace más fácil especificar el conjunto de datos asociados en la replicación como una sola unidad.
  • Suscripción: es una petición para que una copia de la publicación sea enviada al suscriptor. La suscripción define qué publicación será recibida, cuando y donde. Hay dos tipos de suscripción: de inserción y de extracción.
  • Agentes: son los encargados de gestionar la comunicación y el envío de los datos entre los suscriptores y los publicadores.
Una vez aclarados los conceptos, vemos un diagrama del flujo simplificado de los datos y de los elementos que intervienen en una replicación:




















Tipos de Replicación
Una vez claros los conceptos, tenemos que decidir qué tipo de replicación se adecua de mejor manera a nuestro entorno de servidores. Lógicamente, independientemente de la replicación elegida, la aplicación sobre la que trabajemos debe estar preparada para funcionar en este tipo de entornos. Los tipos de replicación existentes son los siguientes:

Replicación Transaccional: también es conocida como replicación dinámica. En la replicación transaccional, las modificaciones en la publicación son propagadas a los suscriptores de forma incremental. Las características de este tipo de replicación son:
  • El publicador y el suscriptor siempre están sincronizados.
  • El entorno de transacción es respetado, si una transacción involucra a 5 registros, se replican estos 5 registros o ninguno.
  • El publicador y el suscriptor deben estar siempre conectados.
Las situaciones en las que se aplica este tipo de replicación son las siguientes:
  • Los suscriptores siempre necesitan estar al día en la información.
  • Mantener las transacciones es importante.
Replicación de Mezcla: la replicación de mezcla provee de ventajas sobre la replicación de instantánea y la transaccional. La instantánea inicial es aplicada al suscriptor y desde ese momento SQL Server gestiona los cambios de datos al nivel de suscriptor y publicador. Los datos son sincronizadas o bajo demanda o sobre una planificación. Como los cambios de datos se producen tanto en el suscriptor como en el publicador, los conflictos durante la replicación son comunes. Para solucionarlos, se define un resolutor de conflictos, que es aquel que dicta en un conflicto qué dato es el que se guarda. Las características de esta replicación son:
  • Los cambios de datos se realizan tanto en el suscriptor como en el publicador.
  • Los datos se mezclan según una planificación o bajo demanda.
  • Permite a los usuarios trabajar offline y sincronizarse en el momento que quieran.
Las situaciones en las que está replicación es la mejor son:
  • La autonomía de las diferentes localizaciones es crítica.
  • Múltiples suscriptores necesitan actualizar datos al mismo o diferente tiempo en el publicador.
Replicación de Instantánea: también es conocida como replicación estática. Este tipo de replicación copia los datos y objetos de la publicación exactamente como se encuentran en el publicador y los distribuye a los suscriptores. Cada suscriptor será una copia exacta del publicador. Las características de esta replicación son:
  • Los suscriptores son actualizados con todos los datos modificados no por transacciones individuales.
  • La propagación de cambios hacia el suscriptor lleva más tiempo, siendo un proceso que se ejecuta pocas veces al día y de forma programada.
Los entornos en los que se debe utilizar este tipo de replicación son:
  • Los objetos de base de datos no se modifican frecuentemente.
  • La cantidad de información a replicar no es grande.
  • Los usuarios suelen trabajar de manera desconectada no siendo importante el que trabajen con la información actualizada.
Tipos de Suscripción
Una vez que tenemos decidido el tipo de replicación a utilizar y que mejor se adapta a nuestro entorno, tendremos que decidir qué tipo de suscripción vamos a configurar. Existen dos tipos:
  • Suscripción de Inserción: el agente es gestionado por el publicador. Según las planificaciones realizadas, el agente se conectará al suscriptor que tenga configurado y le insertará la información. En el caso que los cambios se propaguen desde el suscriptor al publicador, este agente se encargará también de esta tarea.
  • Suscripción de Extracción: en este caso, cada suscriptor tendrá su propio agente que se conectará al distribuidor para obtener la información de la replicación.
En el tema de las suscripciones, el resultado es el mismo en una como en otra. Las consideraciones que hay que tener son de rendimiento. En el caso de las suscripciones de inserción, la administración se centraliza en un único servidor pero la carga de trabajo crece. Si tenemos demasiados suscriptores es posible que el rendimiento se vea gravemente afectado. En el caso de la suscripción de extracción no tendremos el problema del rendimiento pero serán más difíciles de administrar.

Artículos de la Publicación
Una vez que tengamos definidos toda la replicación tendremos que decidir qué artículos replicar. Este estudio es importante puesto que será la información que se transmita entre los suscriptores y publicadores. No hay que incluir en la replicación elementos extras que no influyan en ella.

El administrador de cada aplicación le orientará en este aspecto.

Conclusión
La replicación es, sin lugar a dudas, una herramienta muy importante en entornos distribuidos de trabajo. Sin embargo, mal utilizada puede llevar a pérdidas de información y desestabilizaciones de sistemas. La replicación como tal no es un sustituto real del balanceo de carga de servidores de bases de datos (Oracle RAC), pero usada correctamente nos puede permitir una movilidad de trabajo muy grande.

6 comentarios:

Miguel R. dijo...

Buen Dìa Amigo,
Actualmente tengo un problemita con una replica, te doy el ejemplo tengo dos publicadores y un suscriptor...cuando el primer publicador actualiza monta bien los datos pero cuando el segundo publicador mando los datos borra los datos del primer publicador y deja los de el...aprecio mucho tu ayuda

desde Venezuela glapmigue@gmail.com

Manuel Cardenas Thorlund dijo...

Buenos días Miguel,
hace ya mucho tiempo que no toco el tema de las replicaciones pero lo que dices creo que el problema que tienes es el tipo de replicación del publicador 2. Sin embargo, ¿tienes 2 publicadores y un suscriptor o 2 suscriptores de 1 publicación? Lo normal es tener varios suscriptores de un publicador que vayan actualizando los datos de todo el mundo. Revisa la replicación porque puede ser que el problema pueda venir por ahí también. Resumiendo, lo que te recomiendo es que:
1.- Revises cómo tienes configurado el tipo de la publicación porque debe ser de tipo "mezcla".
2.- Revises la configuración de publicadores y suscriptores para ver si es correcta.

Mayo dijo...

Buen articulo, en pocos minutos me aclaraste bastante mi situación y lo que debo elegir!

Salu2 desde Chile.

Ruben O dijo...

Hola

siguiendo tu tutorial, he montado replicacion entre dos SQL SERVER 2005. Transaccional, uno hace de publisher y distributor, y el segundo hace de subscriptor.

Lo tengo todo casi casi bien, pero algo que no me gusta es que cuando se hace la replicación de las Stored Procedures, no se porque demonios, les cambia el nombre.

Ejemplo:

en origen:
dbo.v1_SP_Contenido

en destino:
dbo.sp_MSdel_dboContenido

estoy probando cosas a ver si lo soluciono...¿es normal?

saludos, muy buena guía :)

Anónimo dijo...

Tengo el mismo problema de Miguel R.
mi topologia de replica es muchos pluicadores y un solo SUSCRIPTOR.
Replica transaccional.
y me borra los datos y me sobreescribe

Anónimo dijo...

Hola esta buena la informacion, pero podrias haber elegido otro fondo para que fuera mas legible...
Saludos.