Duplicación y claves primarias-Nuevos registros

06/09/2004 - 14:51 por Maria | Informe spam
Hola,

Tengo una base de datos duplicada en dos servidores
1 publicador: pub1
y 2 suscriptores: sus1,sus2

Publicación Transaccional
Subscripciones con actualización inmediata con actualización en cola.

Existe una tabla de clientes ( entre otras) con su clave primaria. Desde
cualquiera de los tres servidores los usuarios podrán crear nuevos clientes.

Hasta ahora no ha habido problemas, la tengo en prueba, aún los usuarios
no han empezado a atacar, pero me están surgiendo dudas.

Cuando los usuarios empiecen a acceder a las b.d. distribuidas y creen
nuevos clientes y esté la conexion con el publicador rota, esos clientes se
almacenarán en la cola.
La duda es si se han creado dos clientes con el mismo
identificador=misma clave, al intentar colocarlo en el servidor pub1 (cuando
se restablezca la conección) no podrán, ya que habría una duplicación de
clave.

¿COMO PUEDO EVITAR esto? Se me ocurre que añadiendo al identificador un
caracter para identificar la "localización o sevidor" de forma que no habría
dos claves idénticas nunca en distintos servidores / Otra idea es crear
rangos de numeros para las claves según el servidor, con la limitaciónes que
implica.

¿PERO CUAL SERÍA LA SOLUCIÓN IDEAL para este caso en que desde varios
servidores se puedan crear nuevos clientes y que se pueda dar el caso en que
la conexión no esté siempre establecida, y no queremos perder ninguno de los
nuevos clientes?

Gracias,
Maria
 

Leer las respuestas

#1 Adrian D. Garcia
06/09/2004 - 19:41 | Informe spam
Tal cual lo has escrito, no hay muchas mas opciones de las que planteas.
Ahora, cual es la ideal depende de la definicion de tu tabla. Por ejemplo:
Si la clave primara se genera a partir de una columna con el atributo
autonumerico entonces la solucion mas facil de implementar es la de rangos,
generando en cada tabla un SEED diferente. Si no es asi entonces la de
agregar una columna adicional que forme parte de la clave primaria que
identifique en donde se genero la fila.

Tambien puedes buscar un identificador unico de cada cliente, por ejemplo,
aqui en argentinapodriamos usar el nro. de CUIT (clave unica de
identificacion tributaria) como clave primaria.

Ademas puedes definir una columna del tipo GUID como clave primaria pero
personalmente mucho no me gusta esa solucion ya que no seria una clave
primaria natural.

Saludos
Adrian D. Garcia
MCSD
NDSoft Consultoria y Desarrollo

"Maria" wrote in message
news:
Hola,

Tengo una base de datos duplicada en dos servidores
1 publicador: pub1
y 2 suscriptores: sus1,sus2

Publicación Transaccional
Subscripciones con actualización inmediata con actualización en cola.

Existe una tabla de clientes ( entre otras) con su clave primaria.


Desde
cualquiera de los tres servidores los usuarios podrán crear nuevos


clientes.

Hasta ahora no ha habido problemas, la tengo en prueba, aún los


usuarios
no han empezado a atacar, pero me están surgiendo dudas.

Cuando los usuarios empiecen a acceder a las b.d. distribuidas y creen
nuevos clientes y esté la conexion con el publicador rota, esos clientes


se
almacenarán en la cola.
La duda es si se han creado dos clientes con el mismo
identificador=misma clave, al intentar colocarlo en el servidor pub1


(cuando
se restablezca la conección) no podrán, ya que habría una duplicación de
clave.

¿COMO PUEDO EVITAR esto? Se me ocurre que añadiendo al identificador


un
caracter para identificar la "localización o sevidor" de forma que no


habría
dos claves idénticas nunca en distintos servidores / Otra idea es crear
rangos de numeros para las claves según el servidor, con la limitaciónes


que
implica.

¿PERO CUAL SERÍA LA SOLUCIÓN IDEAL para este caso en que desde varios
servidores se puedan crear nuevos clientes y que se pueda dar el caso en


que
la conexión no esté siempre establecida, y no queremos perder ninguno de


los
nuevos clientes?

Gracias,
Maria





Preguntas similares