Dudas replicación

21/10/2005 - 12:03 por Oscar | Informe spam
Hola,

Estoy "jugueteando" con la replicación del sqlserver.

Ahora mismo tengo creada un publicación P-A en la instancia A y una
subcripción de tipo pull en la instancia B.

Ayer realice una carga masiva de datos sobre la instancia A. Esta carga
inserta datos en todas las tablas del esquema, pero siguiendo un orden, es
decir si tengo dos tablas t1 y t2, y en t1 hay una clave primaria PK_t1 y en
t2 un foreing que sobre PK_t1 primero se insertan todos los datos en t1 y
luego en t2.

Pues bien, al sincronizar estas bases de datos el sqlserver de la máquina A
(donde esta la pulicación A) coje el 99% de la cpu y claro TODOS los
procesos de esa máquina se quedan "fritos".

Al revisar los agentes de replicación he visto que da errores del tipo :

INSERT statement conflicted with COLUMN FOREIGN KEY constraint 'fk_aop_alr'.
The conflict occurred in database 'tad2', table 'ACTUACIONES_OPERADOR',
column .

Es decir parece que esta llevandose los cambios de una base de datos a otra
en el orden que le da la gana no en el que se hicieron. Esto es asi ???
y si no es asi (eso espero), ¿Que puede estar pasando? ¿Alguna idea o
sugerencia ?.

Saludos.



www.metasincro.es

Preguntas similare

Leer las respuestas

#1 Miguel Egea
21/10/2005 - 14:39 | Informe spam
La replicación transaccional envia los comando en el mismo orden en que se
enviaron, el problema debe estar en otro sitio. Intenta quitar la
integridad referencial y mira como queda al final tus tablas. De todas
formas en mi experiencia eso siempre lo hace en el orden adecuado.

El único problema que tiene algunas veces es que algunos updates (los que se
hacen sobre el íncie agrupado) se suelen cambiar por delete + insert y eso
da problemas con la integridad referencial muchas veces (no se puede borrar
algo pero si actualizarlo)

Saludos
Miguel Egea
"Oscar" wrote in message
news:%
Hola,

Estoy "jugueteando" con la replicación del sqlserver.

Ahora mismo tengo creada un publicación P-A en la instancia A y una
subcripción de tipo pull en la instancia B.

Ayer realice una carga masiva de datos sobre la instancia A. Esta carga
inserta datos en todas las tablas del esquema, pero siguiendo un orden, es
decir si tengo dos tablas t1 y t2, y en t1 hay una clave primaria PK_t1 y
en t2 un foreing que sobre PK_t1 primero se insertan todos los datos en t1
y luego en t2.

Pues bien, al sincronizar estas bases de datos el sqlserver de la máquina
A (donde esta la pulicación A) coje el 99% de la cpu y claro TODOS los
procesos de esa máquina se quedan "fritos".

Al revisar los agentes de replicación he visto que da errores del tipo :

INSERT statement conflicted with COLUMN FOREIGN KEY constraint
'fk_aop_alr'. The conflict occurred in database 'tad2', table
'ACTUACIONES_OPERADOR', column .

Es decir parece que esta llevandose los cambios de una base de datos a
otra en el orden que le da la gana no en el que se hicieron. Esto es asi
???
y si no es asi (eso espero), ¿Que puede estar pasando? ¿Alguna idea o
sugerencia ?.

Saludos.



www.metasincro.es

Respuesta Responder a este mensaje
#2 Oscar
24/10/2005 - 11:14 | Informe spam
Hola Miguel, muchas gracias por contestar.

Bueno yo estoy utilizando replicación de mezcla (merge).
Efectivamente deshabilitando las contraints en la base de datos destino la
replicación funciona.

Lo de los updates que comentas no lo sabia, es más para nuestro sistema es
un gran faena (putada queda muy feo ;-) ),
ya que por el propio funcionamiento del sistema se realizan muchos updates
que no se pueden transforma en delete + inser, por ejemplo:

Se inserta en la tabla A un registro que contiene varias foreign keys y más
tarde se hace un update sobre un campo de ese registro
para cambiar el estado (campo="nuevo estado"), si esto se cambia por delete
+ insert casca.

El cambio de update por delete + insert solo se hace si se realiza un
update sobre un indice agrupado (cluster index ?) ???
o existe algun caso más ??, solo pasa con la replicación transaccional?? o
con la replicacion de mezcla tambien???

Saludos.

www.metasincro.es
"Miguel Egea" wrote in message
news:%
La replicación transaccional envia los comando en el mismo orden en que se
enviaron, el problema debe estar en otro sitio. Intenta quitar la
integridad referencial y mira como queda al final tus tablas. De todas
formas en mi experiencia eso siempre lo hace en el orden adecuado.

El único problema que tiene algunas veces es que algunos updates (los que
se hacen sobre el íncie agrupado) se suelen cambiar por delete + insert y
eso da problemas con la integridad referencial muchas veces (no se puede
borrar algo pero si actualizarlo)

Saludos
Miguel Egea
"Oscar" wrote in message
news:%
Hola,

Estoy "jugueteando" con la replicación del sqlserver.

Ahora mismo tengo creada un publicación P-A en la instancia A y una
subcripción de tipo pull en la instancia B.

Ayer realice una carga masiva de datos sobre la instancia A. Esta carga
inserta datos en todas las tablas del esquema, pero siguiendo un orden,
es decir si tengo dos tablas t1 y t2, y en t1 hay una clave primaria
PK_t1 y en t2 un foreing que sobre PK_t1 primero se insertan todos los
datos en t1 y luego en t2.

Pues bien, al sincronizar estas bases de datos el sqlserver de la máquina
A (donde esta la pulicación A) coje el 99% de la cpu y claro TODOS los
procesos de esa máquina se quedan "fritos".

Al revisar los agentes de replicación he visto que da errores del tipo :

INSERT statement conflicted with COLUMN FOREIGN KEY constraint
'fk_aop_alr'. The conflict occurred in database 'tad2', table
'ACTUACIONES_OPERADOR', column .

Es decir parece que esta llevandose los cambios de una base de datos a
otra en el orden que le da la gana no en el que se hicieron. Esto es asi
???
y si no es asi (eso espero), ¿Que puede estar pasando? ¿Alguna idea o
sugerencia ?.

Saludos.



www.metasincro.es





Respuesta Responder a este mensaje
#3 Miguel Egea
24/10/2005 - 17:20 | Informe spam
Hola, solo pasa si se hace el update sobre el clustered index, o la clave
primaria, no pasa si se hace sobre los demás campos, puedes comprobarlo con
un ejemplito y la funcion ::fn_dblog, eso es lo que realmente transmite la
replicación transaccional.

Con la replicación de mezcla la cosa cambia, es en base a triggers, y no se
garantiza la coherencia transaccional, lo que ya se que es una putada, pero
no se puede garantizar, ya que no sabes si tu comando va a tener éxito o no,
en fin, que hay muchas consideraciones. Lo que si que puedes hacer es crear
las constrains con la cláusula not for replication y puede mantener tu
integridad refernecial sin que estas cosas te compliquen mucho la existencia

Saludos
Miguel Egea


"Oscar" wrote in message
news:
Hola Miguel, muchas gracias por contestar.

Bueno yo estoy utilizando replicación de mezcla (merge).
Efectivamente deshabilitando las contraints en la base de datos destino la
replicación funciona.

Lo de los updates que comentas no lo sabia, es más para nuestro sistema es
un gran faena (putada queda muy feo ;-) ),
ya que por el propio funcionamiento del sistema se realizan muchos updates
que no se pueden transforma en delete + inser, por ejemplo:

Se inserta en la tabla A un registro que contiene varias foreign keys y
más tarde se hace un update sobre un campo de ese registro
para cambiar el estado (campo="nuevo estado"), si esto se cambia por
delete + insert casca.

El cambio de update por delete + insert solo se hace si se realiza un
update sobre un indice agrupado (cluster index ?) ???
o existe algun caso más ??, solo pasa con la replicación transaccional?? o
con la replicacion de mezcla tambien???

Saludos.

www.metasincro.es
"Miguel Egea" wrote in message
news:%
La replicación transaccional envia los comando en el mismo orden en que
se enviaron, el problema debe estar en otro sitio. Intenta quitar la
integridad referencial y mira como queda al final tus tablas. De todas
formas en mi experiencia eso siempre lo hace en el orden adecuado.

El único problema que tiene algunas veces es que algunos updates (los que
se hacen sobre el íncie agrupado) se suelen cambiar por delete + insert y
eso da problemas con la integridad referencial muchas veces (no se puede
borrar algo pero si actualizarlo)

Saludos
Miguel Egea
"Oscar" wrote in message
news:%
Hola,

Estoy "jugueteando" con la replicación del sqlserver.

Ahora mismo tengo creada un publicación P-A en la instancia A y una
subcripción de tipo pull en la instancia B.

Ayer realice una carga masiva de datos sobre la instancia A. Esta carga
inserta datos en todas las tablas del esquema, pero siguiendo un orden,
es decir si tengo dos tablas t1 y t2, y en t1 hay una clave primaria
PK_t1 y en t2 un foreing que sobre PK_t1 primero se insertan todos los
datos en t1 y luego en t2.

Pues bien, al sincronizar estas bases de datos el sqlserver de la
máquina A (donde esta la pulicación A) coje el 99% de la cpu y claro
TODOS los procesos de esa máquina se quedan "fritos".

Al revisar los agentes de replicación he visto que da errores del tipo
:

INSERT statement conflicted with COLUMN FOREIGN KEY constraint
'fk_aop_alr'. The conflict occurred in database 'tad2', table
'ACTUACIONES_OPERADOR', column .

Es decir parece que esta llevandose los cambios de una base de datos a
otra en el orden que le da la gana no en el que se hicieron. Esto es asi
???
y si no es asi (eso espero), ¿Que puede estar pasando? ¿Alguna idea o
sugerencia ?.

Saludos.



www.metasincro.es









email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida