Me di cuenta de que cuando configura una replicación transaccional, SQL Server establecerá la administración del rango de identidad en manual. Lo que esto significa es que en mi base de datos de suscripción, cuando trato de insertar un nuevo registro en una tabla cuyo PK es una columna de identidad, me dará un error y dirá que intentó insertar un PK de "1", "2 "," 3 ", etc. Esto se debe a que el valor de identidad actual para todas las columnas de identidad en el suscriptor se restablece al valor inicial (generalmente 1) en lugar de permanecer en lo que estaba en el editor.
Entiendo por qué SQL Server hace esto: se supone que debes dejar la tabla de suscriptores como de solo lectura. Sin embargo, mi escenario es un poco poco ortodoxo: actualizo a mi suscriptor de vez en cuando a través de la replicación, hago una copia de seguridad inmediata de esa base de datos, luego quiero hacer algunas actualizaciones para el suscriptor que NO se enviarán al editor, luego cuando vuelvo a actualizar el suscriptor, restauro su base de datos de la copia de seguridad anterior y obtengo las últimas actualizaciones. Debido a que quiero hacer actualizaciones al suscriptor entre estas actualizaciones ('deltas temporales' si lo desea), necesito que la columna de identidad funcione y no se restablezca a 1 cuando se replica.
Intenté activar la administración automática del rango de identidad al configurar mi publicación, pero eso solo me da el siguiente error cuando intento agregar una tabla a la publicación:
Msg 21231, Nivel 16, Estado 1, Procedimiento sp_MSrepl_addarticle, Línea 2243
El soporte de rango de identidad automático es útil solo para publicaciones que permiten actualizar suscriptores.
¿Hay alguna forma de solucionar este problema? Quiero presentar esta replicación a SQL Server como si fuera de solo lectura al final del suscriptor porque no planeo hacer actualizaciones que serán enviadas de vuelta al editor , pero sí quiero hacer actualizaciones temporales que será borrado antes de la próxima replicación.
También he considerado que la replicación de instantáneas podría ser un método más apropiado que la replicación transaccional para mi patrón de uso, pero el problema es que la replicación de instantáneas requiere enviar toda la base de datos a cada actualización; Como estoy planeando realizar una copia de seguridad inmediata de la base de datos después de la última replicación, no debería necesitar hacer esa transferencia completa cada vez; solo los cambios desde la última vez.
Is there any way I can get round this problem?
Debe establecer la columna de identidad como NO PARA REPLICAR usando sys.sp_identitycolumnforreplication para sql server 2005 y versiones posteriores. Incluso no tiene que volver a capturar sus artículos cuando cambia la columna de identidad como no para la replicación. Simplemente no lo hagas usando GUI.