Cómo configurar la replicación transaccional punto a punto (programación de la replicación con Transact-SQL)

En este tema se describe cómo configurar y mantener una topología de replicación del mismo nivel utilizando los procedimientos almacenados. El tema muestra primero cómo crear una topología de tres nodos y, a continuación, describe cómo agregar y conectar un nuevo nodo. Se muestra los diferentes procedimientos para agregar un nodo que está ejecutando SQL Server 2005 y agregar un nodo que está ejecutando SQL Server 2008 o una versión posterior de SQL Server. En este tema no se incluye información sobre los parámetros que se utilizan para detectar conflictos en la replicación del mismo nivel. Para obtener información sobre la detección de conflictos, vea Cómo configurar la detección de conflictos en la replicación transaccional punto a punto (programación de la replicación con Transact-SQL).

La configuración de una topología es muy similar a la configuración de una serie de suscripciones y publicaciones transaccionales estándar. Lo más importante es cómo se inicializan los nodos y cuáles son los valores especificados para el parámetro @sync_type de sp_addsubscription:

  • El primer nodo de una topología contiene la base de datos original de la publicación, por lo que no tiene que inicializarse con esquema y datos. Por consiguiente, debe especificar el valor replication support only para las suscripciones que replican datos de otros nodos al primer nodo. Esta opción garantiza que los objetos que necesita la replicación se copian en el primer nodo.

  • Una vez configurado el primer nodo, los nodos se inicializan normalmente desde una copia de seguridad del primer nodo. Por consiguiente, deberá especificar el valor initialize with backup o compatibilidad de la replicación para las suscripciones que replican datos del primer nodo a los otros nodos. Se puede utilizar el valor replication support only si en el sistema no se está produciendo ninguna actividad pero si el sistema está activo, hace falta el valor initialize with backup. Al especificar initialize with backup se garantiza que todas las transacciones pertinentes se replican a un nuevo nodo.

  • Una vez inicializado un nodo, las suscripciones que replican datos de otros nodos no tienen que inicializar de nuevo el nodo. Por consiguiente, debe especificar el valor replication support only o initialize from lsn. Se puede utilizar el valor replication support only si en el sistema no se está produciendo ninguna actividad pero si el sistema está activo, hace falta un valor initialize from lsn. Al especificar initialize from lsn se garantiza que todas las transacciones pertinentes se replican a un nuevo nodo.

    SQL Server 2005 no admite initialize from lsn. Si una topología incluye nodos SQL Server 2005, puede conectar un nuevo nodo a un nodo ya existente, pero debe detener el sistema para conectarlo a más de un nodo. Para detener el sistema, hay que detener la actividad de las tablas publicadas en todos los nodos y asegurarse de que cada nodo haya recibido todos los cambios de los demás nodos. Este proceso se describe en detalle en la última sección de este tema.

Procedimiento

Si está configurando una topología para las bases de datos que están activas, utilice el procedimiento siguiente para agregar los primero y segundos nodos (Nodo A y Nodo B). A continuación, utilice el procedimiento subsiguiente para el Nodo C y cualquier nodo adicional. El procedimiento subsiguiente utiliza un valor @sync_type de initialize from lsn. Esta opción le permite configurar una topología mientras el sistema está activo sin que se pierda ninguna transacción.

Para preparar la replicación del mismo nivel entre tres nodos

  1. Configure cada nodo como publicador y asócielo a un distribuidor local o remoto. Si utiliza un distribuidor remoto, se recomienda que no utilice el mismo para todos los nodos, porque podría ser un punto único de error. Para obtener más información, vea Cómo configurar la publicación y la distribución (programación de la replicación con Transact-SQL).

  2. En el Nodo A, ejecute sp_addpublication. Especifique el valor true para @enabled_for_p2p, un valor active para @status y un valor true para @ allow_initialize_from_backup. Para agregar artículos a la publicación, ejecute sp_addarticle.

  3. Los datos iniciales deben estar presentes en cada nodo antes de que se configure la topología. Utilice la funcionalidad de copia de seguridad y restauración de SQL Server para inicializar los datos para la publicación en cada nodo de la topología. La copia de seguridad debería proceder del primer nodo que se configura; en este caso, el Nodo A. La copia de seguridad debe hacerse después de que se cree la publicación en el Nodo A y se habilite para la replicación del mismo nivel. En este tema se presupone que no se está produciendo ninguna actividad en ninguno de los nodos nuevos antes de que se agreguen todos los nodos; por consiguiente puede utilizar la misma copia de seguridad para inicializar cada nodo.

    Si se produce actividad en alguno de los nuevos nodos antes de que se agreguen todos, debe hacer una nueva copia de seguridad después de que se agregue y sincronice cada nodo, por lo menos una vez con el Nodo A. De esta forma, se garantiza que la copia de seguridad del Nodo A contenga metadatos de todos los otros nodos. Por ejemplo, si agrega el Nodo B y el Nodo C con actividad en estos nodos: inicialice el Nodo B con una copia de seguridad del Nodo A; configure y sincronice el Nodo B; haga una nueva copia de seguridad del Nodo A; inicialice el Nodo C con la nueva copia de seguridad y configure y sincronice el Nodo C.

    Para obtener más información acerca de las operaciones de copia de seguridad y restauración de bases de datos, vea Realizar copias de seguridad y restaurar bases de datos en SQL Server.

    Nota importanteImportante

    Al restaurar la base de datos, no especifique la opción KEEP_REPLICATION (para Transact-SQL) ni la opción Conservar la configuración de replicación (para SQL Server Management Studio). La replicación configurará la base de datos como corresponda al ejecutar el Asistente de configuración de la topología del mismo nivel.

    Una copia de seguridad contiene la base de datos completa; por lo tanto, cada base de datos del mismo nivel contiene una copia completa de la base de datos de publicaciones al inicializarse. La copia de seguridad podría contener tablas que no estén especificadas como artículos para la publicación. El administrador o la aplicación son responsables de quitar todos los objetos o datos no deseados una vez restaurada la copia de seguridad. En las siguientes sincronizaciones, los cambios de datos sólo se replicarán si se aplican a las tablas especificadas como artículos.

  4. En el Nodo A, ejecute sp_addsubscription. Especifique el nombre de la publicación creada en el Nodo A como @publication, el nombre del Nodo B como @subscriber, el nombre de la base de datos de destino en el Nodo B como @destination_db, el valor initialize with backup para @sync_typey los valores adecuados para los parámetros @ backupdevicetype y @backupdevicename.

  5. En el Nodo A, ejecute de nuevo sp_addsubscription. Esta vez, especifique el nombre de la publicación como @publication, el nombre del Nodo C como @subscriber, el nombre de la base de datos de destino en el Nodo C como @destination_db, el valor initialize with backup para @sync_typey los valores adecuados para los parámetros @ backupdevicetype y @backupdevicename.

  6. En el Nodo B, ejecute sp_addpublication. Especifique el nombre de la publicación para @publication, un valor true para @enabled_for_p2p, un valor active para @status y el valor true para @allow_initialize_from_backup. Para agregar artículos a la publicación, ejecute sp_addarticle.

  7. En el Nodo B, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo A como @subscriber, el nombre de la base de datos de destino en el Nodo A como @destination_db y el valor replication support only para @sync_type.

  8. En el Nodo B, ejecute de nuevo sp_addsubscription. Esta vez, especifique el nombre de la publicación como @publication, el nombre del Nodo C como @subscriber, el nombre de la base de datos de destino en el Nodo C como @destination_db y el valor replication support only para @sync_type.

  9. En el Nodo C, ejecute sp_addpublication. Especifique el nombre de la publicación para @publication, el valor true para @enabled_for_p2p, un valor active para @status y un valor true para @allow_initialize_from_backup. Para agregar artículos a la publicación, ejecute sp_addarticle.

  10. En el Nodo C, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo A como @subscriber, el nombre de la base de datos de destino en el Nodo A como @destination_db y el valor replication support only para @sync_type.

  11. En el Nodo C, ejecute de nuevo sp_addsubscription. Esta vez, especifique el nombre de la publicación como @publication, el nombre del Nodo B como @subscriber, el nombre de la base de datos de destino en el Nodo B como @destination_db y el valor replication support only para @sync_type.

  12. Si hay alguna columna de identidad en tablas publicadas, después de la operación de restauración, el intervalo de identidad que asignó para las tablas del Nodo A también se utilizaría en las tablas del Nodo B y el Nodo C. Debe utilizar DBCC CHECKIDENT para reinicializar las tablas del Nodo B y el Nodo C y así asegurarse de que se utiliza un intervalo diferente para cada uno.

    Para obtener más información acerca de la administración de los intervalos de identidad, vea la sección sobre asignación de intervalos para la administración manual de intervalos de identidad en el tema Replicación de columnas de identidad.

Utilice el procedimiento siguiente para agregar uno o más nodos a una topología compuesta de nodos que están ejecutando SQL Server 2008 o versiones posteriores de SQL Server.

Para agregar un nodo que ejecuta SQL Server 2008 o posterior a la topología

  1. Configure el Nodo D como publicador y asócielo a un distribuidor local o remoto.

  2. Restaure una copia de seguridad del Nodo A al Nodo D.

  3. En el Nodo D, ejecute sp_addpublication. Especifique el nombre de la publicación para @publication, un valor true para @enabled_for_p2p, el valor active para @status y un valor true para @allow_initialize_from_backup. Para agregar artículos a la publicación, ejecute sp_addarticle.

  4. En el Nodo D, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo A como @subscriber, el nombre de la base de datos de destino en el Nodo A como @destination_db y el valor replication support only para @sync_type.

  5. En el Nodo A, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo D como @subscriber, el nombre de la base de datos de destino en el Nodo D como @destination_db, el valor initialize with backup para @sync_typey los valores adecuados para los parámetros @ backupdevicetype y @backupdevicename.

    El Nodo D ha podido recibir transacciones del Nodo B y el Nodo C a través del Nodo A. Estas transacciones están consideradas en el paso siguiente.

  6. En el Nodo D, vea la tabla MSpeer_lsns. Utilice las columnas originator y originator_lsn para determinar el número de secuencia de registro (LSN) de la transacción más reciente que haya recibido el Nodo D del Nodo B.

  7. En el Nodo D, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo B como @subscriber, el nombre de la base de datos de destino en el Nodo B como @destination_db y el valor replication support only para @sync_type.

  8. En el Nodo B, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo D como @subscriber, el nombre de la base de datos de destino en el Nodo D como @destination_db, el valor initialize from lsn para @sync_typey el LSN recuperado para el Nodo B para @ subscriptionlsn.

  9. En el Nodo D, vea la tabla MSpeer_lsns. Utilice las columnas originator y originator_lsn para determinar el LSN de la transacción más reciente que haya recibido el Nodo D del Nodo C.

  10. En el Nodo D, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo C como @subscriber, el nombre de la base de datos de destino en el Nodo C como @destination_db y el valor replication support only para @sync_type.

  11. En el Nodo C, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo D como @subscriber, el nombre de la base de datos de destino en el Nodo D como @destination_db, el valor initialize from lsn para @sync_typey el LSN recuperado para el Nodo C para @ subscriptionlsn.

  12. Si hay alguna columna de identidad en tablas publicadas, después de la operación de restauración, el intervalo de identidad que asignó para las tablas del Nodo A también se utilizaría en las tablas del Nodo B y el Nodo C. Debe utilizar DBCC CHECKIDENT para reinicializar las tablas del Nodo D y así asegurarse de que se utiliza un intervalo diferente para cada uno.

    Para obtener más información acerca de la administración de los intervalos de identidad, vea la sección sobre asignación de intervalos para la administración manual de intervalos de identidad en el tema Replicación de columnas de identidad.

Como se señalaba en la introducción a este tema, la diferencia principal entre agregar un nodo de SQL Server 2005 y agregar un nodo que está ejecutando una versión posterior de SQL Server, es que SQL Server 2005 requiere que usted detenga el sistema para conectar el nuevo nodo a todos los nodos existentes. En el siguiente procedimiento se muestra cómo agregar un nodo SQL Server 2005 a la topología existente por etapas:

  • La primera etapa cubre los pasos 1 a 5. Esta etapa supone en parte conectar el Nodo D a la topología creando suscripciones entre el Nodo A y el Nodo D. Esto permite que se sigan produciendo cambios en el Nodo A, el Nodo B y el Nodo C. En el Nodo D los cambios pueden comenzar en cuanto se hayan creado las suscripciones entre el Nodo A y el Nodo D. Los cambios del Nodo B y el Nodo C se replican al Nodo D a través del Nodo A.

  • La segunda etapa cubre los pasos 6 a 9. Esta etapa supone en su totalidad conectar el Nodo D a la topología creando suscripciones entre el Nodo B y el Nodo D, y entre el Nodo C y el Nodo D. Para esta etapa, debe detener el sistema.

    La segunda etapa no es obligatoria, pero proporciona una mayor tolerancia a errores que cuando se tiene una sola conexión entre el Nodo A y el Nodo D.

Para agregar un nodo SQL Server 2005 a la topología

  1. Configure el Nodo D como publicador y asócielo a un distribuidor local o remoto.

  2. Restaure una copia de seguridad del Nodo A al Nodo D.

  3. En el Nodo D, ejecute sp_addpublication. Especifique el nombre de la publicación para @publication, el valor true para @enabled_for_p2p, el valor active para @status y el valor true para @allow_initialize_from_backup. Para agregar artículos a la publicación, ejecute sp_addarticle.

  4. En el Nodo D, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo A como @subscriber, el nombre de la base de datos de destino en el Nodo A como @destination_db y el valor replication support only para @sync_type.

  5. En el Nodo A, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo D como @subscriber, el nombre de la base de datos de destino en el Nodo D como @destination_db, el valor initialize with backup para @sync_typey los valores adecuados para los parámetros @ backupdevicetype y @backupdevicename.

  6. Detenga la topología siguiendo estos pasos:

    1. Detenga toda la actividad en todas las tablas publicadas de la topología del mismo nivel.

    2. Ejecute sp_requestpeerresponse en la base de datos del Servidor A, el Servidor B, el Servidor C y el Servidor D y recupere el parámetro de salida @request_id.

    3. De forma predeterminada, el Agente de distribución está configurado para ejecutarse de forma continua, por lo que los tokens deben enviarse automáticamente a todos los nodos. Si el Agente de distribución no se está ejecutando de forma continua, ejecútelo. Para obtener más información, vea Conceptos de los ejecutables del Agente de replicación o Cómo iniciar y detener un agente de replicación (SQL Server Management Studio).

    4. Ejecute sp_helppeerresponses, proporcionando el valor @request_id recuperado en el paso 2. Espere hasta que todos los nodos indiquen que han recibido la solicitud del mismo nivel.

    5. Asigne nuevos intervalos de identidad en el Nodo D si es necesario. Ahora puede conectar completamente la topología, agregando las suscripciones restantes.

  7. En el Nodo D, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo B como @subscriber, el nombre de la base de datos de destino en el Nodo B como @destination_db y el valor replication support only para @sync_type.

  8. En el Nodo D, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo C como @subscriber, el nombre de la base de datos de destino en el Nodo C como @destination_db y el valor replication support only para @sync_type.

  9. En el Nodo B, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo D como @subscriber, el nombre de la base de datos de destino en el Nodo D como @destination_db y el valor replication support only para @sync_type.

  10. En el Nodo C, ejecute sp_addsubscription. Especifique el nombre de la publicación como @publication, el nombre del Nodo D como @subscriber, el nombre de la base de datos de destino en el Nodo D como @destination_db y el valor replication support only para @sync_type.