Problema con claves en replicacion

26/06/2006 - 13:36 por joseforos | Informe spam
Hola,os comento mi problema

Tengo un servidor "Central" que reparte trabajos a las distintas
"Sucursales"

A la hora de repartir los datos no hay problema , ya que localmente en
cada sucursal se intentara que no se trabaje nada mas que con los datos
de la central , asi todo he separado los datos de uno y de otro para
que no se solapen ( en local los ids son pares, y en la central
impares)

El problema me viene porque si yo envio un "trabajo" a la sucursal ,
esta , a fin de relizar ese trabajo insertara filas nuevas en las
tablas relacionadas al trabajo . Una vez se suba el trabajo a la
central , esas nuevas filas entraran en conflicto con las de otras
sucursales.A ver si con un ejemplo se ve mejor


Central -> envia el trabajo 1 -> Sucursal A
Central -> envia el trabajo 3 -> Sucursal B

Sucursal A crea un registro en una tabla relacionada al trabajo
,localmente , al ser el primer registro le dara el numero 1

Sucursal B crea un registro en una tabla relacionada al trabajo
,localmente , al ser el primer registro le dara el numero 1

Al subir los datos a la central , en esa tabla relacionada ,llegaran
dos registros con id numero 1

¿Existe alguna solucion viable para solventar esto? . Tanto en la
central como en las sucursales se trabaja con una aplicacion ya
realizada en la que no estaba previsto realizar estas tareas de
replicacion , cno lo que cuantos menos cambios realize en la base de
datos , menos tendre que tocar la aplicacion (lo digo mas que nada por
la posible solucion de eliminar los campos identity)

Gracias

Preguntas similare

Leer las respuestas

#6 Javier Loria
26/06/2006 - 20:38 | Informe spam
Hola:
Te copio una vieja respuesta:
Hay varias alternativas, las 4 mas populares:
a) Por bloques: En esta caso simulas el comportamiento de un vendedor o un
cobrador que pide un "talorario" de recibos o facturas. En este caso cada
servidor pide un bloque de por ejemplo 100 numeros a la Oficina Central.
Esta informacion se registra en la BD Central, en una tabla dedicada a esta
funcion. Los servidores cuando van "gastando" numeros y cuando se acercan al
final piden otro bloque que la BD Central les otorga. Cuando llega el
momento se modifica el "Seed" del Identity para empezar el nuevo bloque.
b) Por multiplos: El servidor uno usa un Identity con incrementos de 10 e
iniciando en 1. O sea otorga: 1,11,21,31,etc. El servidor 2 igual pero
iniciando en 2: 2,22,32,42, etc.
c) Temporal: Las sucursales solo asginan un numero temporal (Identity
cualquiera) y en el momento que se ejecuta el proceso de actualizacion es la
Oficina Central la que asigna el numero definitivo. Hay que asegurarse que
Oficina Central nunca choque con el de la Sucursal.
d) Agregas una columna Sucursal a todas las tablas en cuestion, con un
DEFAULT y un CHECK que exija que sea el numero que asignaste a dicha
sucursal (o sea es una CONSTANTE) y, defines la llave Primaria sobre ambas
columnas. Usas el Identity como si nada.
La que a mi mas gusta no esta dentro de estas 4, y es remover el
Identity y usar alguna Llave Natural.
Saludos,


Javier Loria
Costa Rica
wrote in message
news:
Gracias Jorge , te comento :

La idea de añadir un campo sucursal fue lo primero que pense,pero sin
darle muchas vueltas la descarte por tener que cambiar la aplicacion
(sobre todo al tener que eliminar la opcion de autoincremento de los
identitys)

La solución de los seeds la habia tenido en cuenta, pero la descarte
por lo que me comentas de que suele ser propensa a errores ( y mas que
nada , a lo problematico de la forma de solucionarlos) . Tampoco me
parecia una solución del todo idonea ni comoda , aunque no la descarto
completamente.

Lo valorare mas detenidamente si no existe otra solución.

El diseño no tiene en cuenta la replicación porque en un principio
esta aplicacion no estaba pensada ni remotamente para utilizarse en
varias sucursales

Gracias




Jorge Gonzalez ha escrito:

Mostrar la cita
Ads by Google
Search Busqueda sugerida