Inicializar Replicación Transaccional desde un Backup


En algunos escenarios de disaster recovery, tenemos que volver a añadir los subscriptores a las publicaciones corruptas y en muchas oportunidades, tanto por el tipo de replica transaccional como por el tamaño de la BBDD dan como resultado un grupo de variables que hacen que el tiempo de resolución sea mas extenso y en algunos casos, muy difícil de calcular.

Como lo dice el titulo de este post, vamos a presentar los pasos necesarios para restaurar un subscriptor mediante un Backup, sin necesidad de tener que añadirlo y generar nuevamente todo el Sanpshot, ya que truncaría todas las tablas del destino y pasaría de forma secuencial y transaccional registro por registro de cada uno de los artículos de nuestra replica.

En este ejemplo, se toma una replica que tiene alrededor de 500 artículos y un tamaño de BBDD superior a los 90GB

Pasemos a detallar los pasos:

1 – Eliminar el Subscriptor de la replica actual.
2 – Cambiar el valor de 0 a 1 del parámetro (allow initialize from backup) de nuestra replica actual.

EXEC sp_changepublication @publication = 'Nombre_Publicacion', @property = N'allow_initialize_from_backup', @value = true

3 – Regenerar el Snapshot, estoy no tendría que demorar mucho, porque ya se encuentra actualizado.
3 – Realizar un Backup FULL de la BBDD en replica.
4 – Restaurar dicho Backup en el server de subscripcion (el que eliminamos en el paso 1).
5 – Aplicar Script de Alta de Subscripcion:

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'NombrePublicacion';
SET @subscriber = 'SERVER_SUBSCRIPTOR';
SET @subscriptionDB = N'Nombre_BBDD';

--Add a push subscription to a transactional publication.
USE Nombre_BBDD
EXEC sp_addsubscription
  @publication = @publication,
  @subscriber = @subscriber,
  @destination_db = @subscriptionDB,
  @sync_type = 'initialize with backup',
  @backupdevicetype = 'disk',
  @backupdevicename = 'Z:\Backup\BBDD.BAK',
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent
  @publication = @publication,
  @subscriber = @subscriber,
  @subscriber_db = @subscriptionDB,
  @job_login = 'SERVER_PUBLICADOR',
  @job_password = 'StrongPassword';
GO

Hay que tener como precaución, que si el tiempo que se demora en hacerse el backup, copiarlo, restaurarlo en el destino, etc..se puede llegar a generar algún Backup diferencia hora a hora, si es que lo tenemos habilitado para dicha BBDD.
En caso de que se genere algún backup, posterior al generado para re-generar la replica, el script del paso 5 dará un error, ya que el SID de la BBDD original, ya no coincide con el SID del backup generado de la BBDD.

Deja un comentario