Pregunta

Tenemos un problema con la replicación de mezcla. Nuestro editor ejecuta SQL Server 2008, mientras que nuestros dos suscriptores ejecutan 2005. Nuestro editor está intentando enviar un comando ALTER TABLE Foo SET (LOCK_ESCALATION) a nuestros suscriptores. Creo que recuerdo haber leído que este comando es nuevo en SQL Server 2008, y si es así, tiene sentido que el comando falle en nuestros servidores de 2005. Sin embargo, nuestra replicación de mezcla está configurada para compatibilidad con 2005.

  

El script de esquema 'si object_id (N' [dbo]. [Users] ') no es null exec (' ALTER TABLE [dbo]. [Users] SET (LOCK_ESCALATION = TABLE)   ')' no se pudo propagar al suscriptor.

¿Alguna idea sobre por qué nuestro editor intentaría hacer esto?

Editar: El nivel de compatibilidad de nuestro servidor 2008 está establecido en " Sql Server 2005 (90) "

¿Fue útil?

Solución

Es una nueva función en SQL 2008, por lo que no se admite en 2005. Dependiendo de la complejidad de su configuración, es posible que desee que su base de datos se ejecute en compatibilidad 90 (SQL 2005) para asegurarse de no agregar características de SQL 2008 a su base de datos. He tenido grandes problemas con la replicación de datos de esquema desde que surgieron, por lo que siempre es un poco reticente. Siempre trato de hacer que todo funcione y solo administre datos: tenía que admitir un sistema de combinación con 32 suscriptores con replicación de mezcla y tenía grandes problemas de esquema constantemente cuando impulsábamos los cambios de esquema.

Dicho esto, si funciona como se documenta, no debería intentar forzar el cambio de bloqueo. Compruebe que las suscripciones están marcadas como compatibles con SQL 2005. Es probable que no hayan creado un mapa automático de la configuración de 2008 a 2005 de la forma en que lo hicieron para los tipos de datos (por ejemplo)

Uno de los chicos de desarrollo de SQL blogueó sobre los nuevos tipos de bloqueo hace un tiempo

Otros consejos

Esto ocurre porque la incompatibilidad de esta instrucción con el servidor SQL 2005 y aparentemente cuando hago un cambio de esquema en una tabla que se está replicando pone esta instrucción en los cambios de esquema.

Hay dos formas: Eliminar y volver a crear la suscripción, no aplicable cuando se encuentra en el servidor de producción. La segunda forma es ir a la tabla sysmergeschemachange en la base de datos y eliminar la fila que tiene algo como esto:

  

El script de esquema 'si   object_id (N '[dbo]. [Users]') no es   null exec ('ALTER TABLE [dbo]. [Usuarios]   SET (LOCK_ESCALATION = TABLE) ')'   No se pudo propagar a la   suscriptor.

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top