sql >> Base de Datos >  >> RDS >> Sqlserver

Internos de replicación transaccional de SQL Server

La replicación transaccional de SQL Server es una de las técnicas de replicación más comunes que se utilizan para compartir, copiar o distribuir datos a varios destinos. En este artículo, analizaremos la replicación, varios tipos de replicación y prestaremos especial atención al trabajo de replicación transaccional.

¿Qué es la replicación transaccional de SQL?

La replicación es la tecnología de SQL Server para copiar o distribuir datos de una base de datos a otra manteniendo la coherencia de los datos.

La replicación se puede utilizar para transferir datos de una base de datos a otra

  • en la misma instancia o en otra instancia en el mismo servidor;
  • o entre servidores en una sola ubicación o en varias ubicaciones.

Primero, debemos pasar por la arquitectura de replicación y comprender las terminologías de replicación.

Arquitectura y terminologías de replicación de SQL Server

  • El editor es la instancia de la base de datos de origen que publica los cambios de datos que se pueden distribuir a otra base de datos. Datos de un editor único se puede enviar a un suscriptor único o varios suscriptores .
  • Suscriptor es la instancia de la base de datos de destino donde distribuimos los cambios de datos capturados de la base de datos del editor. El suscriptor puede ser una instancia de Publisher u otra instancia en Publisher Server/otro servidor en la misma ubicación/ubicación distante. Antes de que los cambios de datos se distribuyan a la instancia de la base de datos de suscriptores, estos datos se almacenan en el distribuidor. .
  • El Distribuidor es una base de datos que almacena registros de cambios capturados de las bases de datos de Publisher. Cuando un servidor está habilitado como distribuidor, creará una base de datos del sistema denominada base de datos de distribución .

Según la ubicación de las bases de datos de distribución, se pueden clasificar como distribuidores locales o remotos.

Distribuidor Local es una base de datos de distribución que reside en la instancia de la base de datos de Publisher.
Distribuidor Remoto es una base de datos de distribución que reside en la instancia de la base de datos del Suscriptor o en cualquier otra instancia de SQL Server aparte de la instancia de la base de datos del Publicador.

El factor decisivo es dónde colocar la base de datos de distribución en la instancia de Publisher (otra instancia). depende de los recursos del servidor disponibles para manejar la carga de distribución de datos.

De acuerdo con la forma en que se enviarán los datos desde la base de datos de Distribución a la instancia del Suscriptor, se pueden clasificar en Push o Extraer suscripciones .

Suscripción automática significa que la base de datos de distribución asume la responsabilidad de enviar los datos a la instancia de la base de datos del suscriptor.
Extraer suscripción significa que la instancia de la base de datos del suscriptor asume la responsabilidad de extraer los datos disponibles de la base de datos de distribución y aplicarlos a la base de datos del suscriptor.

  • Artículos son la unidad fundamental de la replicación. Indica cualquier cambio de datos en este objeto o artículo de la base de datos que se replicará del publicador al suscriptor. El artículo puede ser una tabla, una vista, una vista indexada, un procedimiento almacenado o la función definida por el usuario.
  • Publicaciones son una colección de uno o más artículos de la base de datos en Publisher.
  • Suscripción define qué publicación se recibirá. Además, determina desde qué Publicación y en qué horario se replican los datos. La suscripción puede ser Push o Pull (de Publicación a Suscripción).
  • Agentes de replicación son programas independientes responsables de realizar un seguimiento de los cambios y distribuir datos entre el publicador, el distribuidor y el suscriptor. Todos los agentes de replicación se ejecutan como trabajos en el Agente SQL Server. Por lo tanto, se puede administrar a través de SSMS en Trabajos del Agente SQL Server o Monitor de replicación. Están disponibles los siguientes tipos de agentes de replicación:
  • Agente de instantáneas – Utilizado por casi todos los tipos de replicación. El Agente de instantáneas se ejecuta desde el servidor que contiene la base de datos de distribución. Elabora el Esquema y datos iniciales de todos los Artículos incluidos en una Publicación en una Editorial. Además, crea los archivos de instantáneas en una carpeta de instantáneas y registra los detalles de sincronización en la base de datos de distribución.
  • Agente de lectura de registros – Utilizado por la replicación transaccional. El objetivo es leer los cambios de datos de los artículos habilitados para la replicación desde los registros de transacciones de la base de datos del editor y almacenados en la base de datos de distribución. el Log Reader Agent se ejecuta desde el servidor de distribución.
  • Agente de distribución – Utilizado por la replicación transaccional y de instantáneas. Aplica los archivos de instantáneas iniciales y las transacciones pendientes incrementales o disponibles de la base de datos de distribución a la base de datos del suscriptor. El Agente de distribución se ejecuta desde el Servidor de distribución para suscripciones de inserción y el Servidor de suscriptor para suscripciones de extracción.
  • Agente de fusión – Utilizado solo por replicación de mezcla. Aplica los archivos de instantáneas iniciales y la reconciliación de cambios diferenciales o incrementales en el publicador o el suscriptor. El agente de mezcla se ejecuta en el servidor distribuidor para la replicación de envío y desde el servidor del suscriptor para las suscripciones de extracción.
  • Agente de lectura de cola – Queue Reader Agent es utilizado por Transactional Replication con la opción de actualización en cola. Mueve los cambios de Suscriptor a Publicador. El Queue Reader Agent se ejecuta desde el servidor de distribución.
  • Trabajos de mantenimiento de replicación – Como se explicó anteriormente, todos los agentes de replicación son programas independientes que se configuran al configurar la replicación. Se ejecutan como trabajos en Trabajos del Agente SQL Server. Algunos trabajos significativos a tener en cuenta son la limpieza de distribución:distribución, la limpieza del historial del agente:distribución y la limpieza de suscripciones vencidas.

Tipos de replicación en el servidor SQL

Ahora que conocemos la terminología, profundicemos en los tipos de replicación.

  1. Replicación transaccional . Como sugiere el nombre, cada transacción o cambio de datos dentro del alcance transaccional en Publisher se enviará al Suscriptor casi en tiempo real con demoras menores según el ancho de banda de la red y los recursos del servidor. La replicación transaccional utiliza el agente de lectura del registro para leer los cambios de datos de los registros transaccionales de la base de datos del publicador. También utiliza el Agente de distribución para aplicar cambios al Suscriptor. Ocasionalmente, puede usar el Agente de instantáneas para tomar datos de instantáneas iniciales de todos los artículos replicados. La publicación de replicación transaccional puede pertenecer a las siguientes categorías:
    • Replicación transaccional estándar – El suscriptor es una base de datos de solo lectura desde la perspectiva de la replicación transaccional. Cualquier cambio realizado por cualquier persona en la base de datos del suscriptor no será rastreado ni actualizado en la base de datos del editor. La replicación transaccional estándar a menudo se denomina replicación transaccional.
    • Replicación transaccional con suscripciones actualizables es una mejora de la replicación transaccional estándar que realiza un seguimiento de los cambios de datos que tienen lugar en los suscriptores. Siempre que se inicien cambios de datos en una Suscripción actualizable, primero se propagarán al Editor y luego a otros Suscriptores.
    • Replicación punto a punto es una mejora de la replicación transaccional estándar. Propaga cambios coherentes desde el punto de vista transaccional casi en tiempo real en varias instancias de servidor.
    • Replicación bidireccional es una mejora de la replicación transaccional estándar que permite que dos servidores (límite de solo 2 servidores y, por lo tanto, llamado bidireccional) intercambien los cambios de datos entre sí con cualquier servidor que actúe como publicador (para enviar cambios a otro servidor) o como suscriptor (para recibir cambios de otro servidor).
  2. Combinar replicación – Admite la captura de cambios de datos que tienen lugar tanto en el publicador como en el suscriptor y los distribuye al otro servidor. La replicación de combinación requiere el ROWGUID columna en la tabla Artículos involucrados en la replicación de mezcla. Utiliza disparadores para capturar los cambios de datos en el publicador y el suscriptor. Además, entrega los cambios a través de los servidores cuando tanto el publicador como el suscriptor están conectados a la red. La replicación de mezcla utiliza el Agente de mezcla para replicar los cambios de datos en el publicador y el suscriptor.
  3. Replicación de instantáneas – Como su nombre lo indica, Snapshot Replication no se basa en registros transaccionales o activadores para capturar los cambios. Toma una instantánea de los artículos involucrados en la publicación y la aplica al suscriptor con los registros disponibles en el momento de la instantánea. La replicación de instantáneas usa el Agente de instantáneas para tomar una instantánea del Publicador y usa el Agente de distribución para aplicar estos registros al Suscriptor.

Replicación transaccional de SQL Server

La replicación transaccional suele preferirse en escenarios en los que la base de datos del publicador de OLTP tiene muchas actividades de INSERCIÓN/ACTUALIZACIÓN y/o ELIMINACIÓN de datos.

Dado que la instancia del servidor Publisher tiene un gran DISK IO, la generación de informes puede causar bloqueos graves. También puede afectar el rendimiento del servidor. Por lo tanto, otro servidor con datos casi en tiempo real es bueno para descargar los requisitos de informes.

Uno de los requisitos fundamentales para la replicación transaccional es que las tablas replicadas deben tener una clave principal disponible.

Podemos resumir cómo funciona la replicación transaccional. Eche un vistazo al siguiente diagrama de arquitectura de replicación transaccional tomado de la documentación oficial de Microsoft.

La publicación se crea en la base de datos del editor que comprende la lista de artículos para replicar en la base de datos del suscriptor.

La replicación transaccional generalmente se inicializará del publicador al distribuidor a través del agente de instantáneas o las copias de seguridad completas. El Agente de instantáneas es compatible con el Asistente de configuración de replicación. La copia de seguridad completa se admite a través de declaraciones TSQL para inicializar la replicación transaccional.

El Log Reader Agent escanea el registro transaccional de la base de datos del editor en busca de artículos rastreados. Luego copia los cambios de datos del registro transaccional a la base de datos de distribución.

La base de datos de Distribución puede estar en Publicador o Suscriptor; también puede ser u otra instancia de SQL Server independiente.

Tenga en cuenta también las siguientes cosas:

  • El Log Reader Agent se ejecuta continuamente desde el servidor de distribución para buscar nuevos comandos marcados para replicación. Sin embargo, si no desea que se ejecute de forma continua y desea que se ejecute de forma programada, podemos cambiar el trabajo SQL del Agente de registro del registro que se creará.
  • Log Reader Agent recoge todos los registros marcados para replicación de los lotes de registro transaccional y los envía a la base de datos de distribución.
  • El agente de lectura del registro solo recoge transacciones confirmadas del registro transaccional de la base de datos del editor. Por lo tanto, cualquier consulta de ejecución prolongada en la base de datos de Publisher puede afectar directamente a la replicación, ya que está esperando que se complete la transacción activa.

El agente de distribución recoge todos los comandos nuevos no distribuidos de la base de datos de distribución y los aplica a la base de datos de suscripción a través del mecanismo Push o Pull. Como se mencionó anteriormente, si Push Subscription Distributor toma la propiedad de aplicar los cambios de la base de datos de distribución al suscriptor, mientras que en Pull Subscription la base de datos del suscriptor toma la propiedad de obtener los cambios de la base de datos de distribución al suscriptor.

Una vez que los registros se distribuyen correctamente desde la base de datos de distribución a suscriptor, se marcarán como distribuidos y se marcarán para su eliminación de la base de datos de distribución. Uno de los trabajos de mantenimiento de replicación clave denominado Limpieza de distribución:el trabajo de distribución se ejecuta una vez cada 10 minutos para eliminar los registros distribuidos de la base de datos de distribución para mantener el tamaño de la base de datos de distribución bajo control.

Con la explicación detallada de los conceptos de replicación y replicación transaccional, podemos tenerlo en nuestras manos configurando la replicación para AdventureWorks base de datos y verificar la replicación para cada componente discutido teóricamente.

Configuración de la replicación transaccional paso a paso (a través de la GUI de SSMS)

La configuración de la replicación transaccional implica 3 pasos principales:

  1. Configuración de la base de datos de distribución
  2. Creación de publicaciones
  3. Creación de suscripción

Antes de intentar configurar la replicación, asegúrese de que los componentes de replicación estén instalados como parte de la instalación de SQL Server o use los medios de SQL Server para instalar los componentes de replicación, ya que son necesarios para la tarea.

En SSMS, conéctese a la instancia de base de datos de Publisher y haga clic derecho en Replicación :

La distribución no está configurada en este momento. Por lo tanto, tenemos la opción Configurar distribución. Podemos configurar la base de datos de distribución mediante el asistente de configuración de distribución o mediante el asistente de creación de publicaciones.

Para configurar la base de datos de Distribución y Publicación, siga los siguientes pasos:

Expandir Replicación y haga clic derecho en Nueva publicación .

Asistente para nueva publicación pondrá en marcha. Haga clic en Siguiente para ver el Distribuidor opciones de configuración.

De forma predeterminada, elige el servidor de publicación para albergar la base de datos de distribución. Si desea utilizar una base de datos de distribución remota, elija la segunda opción. Haga clic en Siguiente .

La siguiente opción es para configurar la Carpeta de instantáneas . Cámbielo a la carpeta requerida. De lo contrario, se creará en la ruta de la carpeta de instalación de SQL Server de forma predeterminada. Haga clic en Siguiente .

Seleccione la Base de datos de publicación (aquí está AdventureWorks ) y haga clic en Siguiente .

Elija el Tipo de publicación Replicación transaccional . Haga clic en Siguiente .

Elija Artículos para esta publicación. Para fines de prueba, seleccione todas las Tablas y Vistas :

Antes de hacer clic en Siguiente , expanda las tablas una vez más para verificar algunos problemas.

Algunas tablas están marcadas con iconos rojos. Cuando hacemos clic en esas tablas, vemos la advertencia que indica que una tabla no se puede replicar porque no tiene una clave principal, uno de los requisitos cruciales para la replicación transaccional. Más adelante entraremos en más detalles. Ahora, haga clic en Siguiente .

Una página con Problemas de artículos aparecerán los relacionados con las dependencias. Haga clic en Siguiente .

La siguiente opción es Filtrar filas de tabla – dado que estamos probando la replicación básica, podemos ignorarla. Haga clic en Siguiente .

Configurar agente de instantáneas – ignorar y hacer clic en Siguiente .

Agente Configuración – haga clic en Configuración de seguridad para configurar la cuenta para ejecutar el agente de instantáneas y el agente de lectura de registros en él.

Luego, cambie el Proceso del agente de instantáneas para ejecutar bajo la cuenta de servicio del Agente SQL Server.

Configurar el agente de lectura de registros para Conectarse con el editor> Haciéndose pasar por la cuenta de proceso . Haz clic en Aceptar .

La seguridad del agente se actualizará.

Así, hemos configurado el Distribuidor y todos los elementos de la Publicación como Artículos , Agente de instantáneas , Agente de lectura de registros y Valores de agente . Casi hemos completado la creación de la publicación a través del asistente.

Si necesita estudiar más a fondo los scripts TSQL utilizados para crear la publicación, podemos consultar Generar un archivo de script para crear la publicación opción. De lo contrario, haga clic en Siguiente .

Dado que elegí guardar el archivo, el asistente me permite configurar la ruta del archivo de script y nombre . Proporcione estos detalles y haga clic en Siguiente .

El Asistente finalmente solicita el Nombre de la publicación , lo he llamado AdventureWorks_pub con el nombre de la base de datos y palabras claves para indicarla como publicación para una identificación más fácil.

Verifique todos los datos proporcionados en el Resumen página y haga clic en Finalizar .

El asistente mostrará el progreso en Creación de publicación . Cuando esté completo, veremos la confirmación. Haga clic en Cerrar .

Para verificar la creación exitosa del Distribuidor (Base de datos de distribución), expanda las bases de datos del sistema:

Para verificar la creación exitosa de Publicación , expanda Publicación local :

Hemos configurado la base de datos de distribución y creado la base de datos de publicación en la base de datos de AdventureWorks exitosamente. Ahora podemos continuar con la Suscripción creación

Haga clic derecho en la nueva Publicación acabamos de crear y seleccione Nuevas suscripciones :

El Asistente para nuevas suscripciones aparecerá. Para iniciar el proceso, haga clic en Siguiente .

La Publicación página solicita asegurarse de que tanto la Publicación y Editor bases de datos son seleccionados. Haga clic en Siguiente .

Establecer el agente de distribución para Empujar o Tirar Suscripción. Vamos a utilizar el Servidor de publicación como Suscriptor, y ese tipo no tendrá ningún impacto. Por lo tanto, dejamos el Push predeterminado. Suscripción. Haga clic en Siguiente .

Seleccione los Suscriptores (base de datos). Estoy seleccionando AdventureWorks_REPL restaurado desde la misma copia de seguridad de AdventureWorks Database. Haga clic en Siguiente .

Establecer la Seguridad del agente :

Como voy a hacer todo dentro de un solo servidor, estoy usando la cuenta de servicio del agente .

La siguiente ventana presenta la Seguridad del agente de distribución valores ya configurados. Haga clic en Siguiente .

Programa de sincronización – déjelo por defecto. Haga clic en Siguiente .

Inicializar suscripciones – déjelo con los valores predeterminados. Haga clic en Siguiente .

Después de proporcionar todos los detalles necesarios, podrá completar el proceso de creación de la Suscripción. Marque Generar archivo de secuencia de comandos... opción para estudiar los guiones más tarde y haga clic en Siguiente .

Proporcione la ruta para guardar los archivos, haga clic en Siguiente .

Echa un vistazo al resumen y comprueba todos los valores configurados. Una vez verificado, haga clic en Finalizar .

La creación de la suscripción está completa. Haga clic en Cerrar .

Ahora podemos ver la Suscripción se muestra en nuestra Publicación .

Configurar el Agente de Instantáneas

Nuestro próximo paso es trabajar en la Instantánea Agente para enviar los datos iniciales desde Editor a Suscriptor .

Antes de entrar en él, debemos observar el Monitor de replicación . Esta herramienta crítica está disponible en SSMS para ver el estado de la replicación en varios niveles, nivel de servidor, nivel de base de datos del editor, nivel de suscripción y nivel de agentes de replicación.

Haga clic derecho en Replicación /Publicación local /Suscripción local /Publicación o la Suscripción que creamos para lanzar el Monitor de replicación como se muestra a continuación:

En el Monitor de replicación , expanda Servidor de publicación (RRJ)> Publicación ([AdventureWorks]:AdventureWorks_pub) para mostrar los detalles de la suscripción. Haz clic derecho en Suscripción y seleccione Ver detalles .

Como podemos ver, la información sobre la Instantánea inicial para nuestra publicación AdventureWorks_pub aún no está disponible. Tendremos que ejecutar el trabajo del agente de instantáneas para enviar los datos iniciales a la base de datos del suscriptor .

Mantenga esta ventana abierta para ver el progreso de la instantánea después de iniciar el trabajo del agente de instantáneas .

Haga clic derecho en Publicación > Ver instantánea del estado del agente :

El agente nunca se ha ejecutado El mensaje indica que nunca hemos ejecutado el Agente de instantáneas. Haz clic en Iniciar .

Mientras se ejecuta el Agente de instantáneas, puede ver el progreso:

Cuando se creen todas las instantáneas, se producirá el mensaje de confirmación:

Podemos ver los archivos de instantáneas creados recientemente en la carpeta de instantáneas para la que proporcionamos la ruta anteriormente.

Después de que el Agente de distribución aplique todas las instantáneas a la base de datos de suscriptores , mostrará el siguiente estado en el Monitor de replicación abierto ventana:

¡Felicitaciones! Hemos configurado correctamente la replicación transaccional mediante el agente de instantáneas.

Nota :si tenemos una gran base de datos de editores, la creación de una instantánea puede llevar mucho tiempo. Por lo tanto, se recomienda utilizar la copia de seguridad completa de la base de datos de Publisher en lugar de ejecutar el Agente de instantáneas; trataremos este tema en artículos posteriores.

Verificación de componentes de replicación

Todos los componentes de replicación se pueden verificar mediante la GUI de SSMS y las consultas TSQL. Lo discutiremos en otros artículos, y aquí explicaremos rápidamente cómo ver las propiedades de los siguientes componentes.

Editor

En SSMS, haga clic con el botón derecho en Replicación > Propiedades del editor > Bases de datos de publicaciones :

Para ver detalles sobre el Editor , ejecute las siguientes consultas en la base de datos de distribución.

USE distribution
GO
exec sp_helpdistpublisher
GO
select * from MSpublisher_databases
GO

Suscriptor

La información del suscriptor se puede obtener con la siguiente consulta en SSMS.

USE distribution
GO
exec sp_helpsubscriberinfo
GO
select * from MSsubscriber_info

Distribuidor

En SSMS, haga clic con el botón derecho en Replicación > Distribuidor Propiedades :

Haga clic en Editores para mostrar la lista de todos los editores que utilizan esta base de datos de distribución.

En SSMS, podemos ejecutar la siguiente consulta para obtener los mismos detalles.

USE distribution
GO
exec sp_helpdistributor
GO
exec sp_helpdistributiondb
GO	

Artículos

Haga clic derecho en Publicación > Propiedades de publicación > Artículos . Verá la lista de todos los artículos disponibles. Las propiedades de los artículos individuales se pueden modificar haciendo clic en Propiedades del artículo también.

USE AdventureWorks
GO
-- To View all articles available under a Publication
exec sp_helparticle @publication = 'Adventureworks_pub'
GO
-- To View all article columns for a particular article available under a Publication
exec sp_helparticlecolumns @publication = 'Adventureworks_pub', @article = 'Address'
GO
USE distribution
GO
SELECT * from MSArticles

Publicación

Haga clic derecho en Publicación > Propiedades :

En SSMS, podemos ejecutar la siguiente consulta para ver las Propiedades de la publicación :

USE AdventureWorks
GO
exec sp_helppublication
GO
USE distribution
GO
SELECT * FROM MSPublications

Suscripción

Haz clic derecho en Suscripción > Propiedades de suscripción :

En SSMS, podemos ejecutar el siguiente script para obtener la información de suscripción:

USE AdventureWorks
GO
exec sp_helpsubscription
GO
USE distribution
GO
SELECT * FROM MSsubscriptions
GO

Agentes de replicación

En Trabajos del Agente SQL Server , podemos encontrar los Empleos específicos creado para todos los agentes de replicación:

En SSMS, podemos ejecutar la consulta para averiguar qué trabajo es el trabajo del agente de lectura de registros necesario. , Trabajo de agente de instantáneas y trabajos de agente de distribución . Además, podemos ver el trabajo de limpieza del agente de distribución y varios otros trabajos relacionados con la replicación creados mientras establecíamos la publicación y las suscripciones internamente.

Cómo funciona el Agente de lectura de registros

El agente del lector de registros lee todos los datos confirmados de los registros transaccionales de la base de datos del publicador y los envía a la base de datos del distribuidor. Aunque Microsoft no proporciona una forma oficial de leer los registros de transacciones, hay algunas funciones no documentadas como fn_dblog() y fn_dump_dblog() que puede leer los datos de los archivos de registro. Sin embargo, estas funciones no están documentadas y no están cubiertas por el soporte de Microsoft. Por lo tanto, no los exploraremos más.

Cómo el agente de distribución entrega los cambios de datos a la base de datos del suscriptor

Una vez que los datos se escriben en la base de datos de distribución, podemos leer cómo se almacenan esos datos en las tablas de distribución. Para eso, aplicamos el sp_browsereplcmds procedimiento:obtiene los registros a través de MSrepl_commands y MSrepl_transactions mesas.

Para fines de aprendizaje, tomemos una tabla con 3 columnas llamada Person.ContactType :

La suscripción creada realizará 3 procedimientos para cada artículo que forme parte de la publicación en la base de datos de suscriptores con las siguientes convenciones de nomenclatura:

  • dbo.sp_MSins_
  • dbo.sp_MSupd_
  • dbo.sp_MSdel_

Para el artículo de la tabla Person.ContactType, podemos ver los siguientes procedimientos creados en la base de datos del suscriptor:

  • dbo.sp_MSins_PersonContactType INSERTAR nuevos registros capturados de la base de datos de Registros de transacciones de Publisher y luego propagados a la base de datos de distribución.
  • dbo.sp_MSupd_PersonContactType ACTUALIZAR cambios capturados de la base de datos de registros de transacciones de Publisher y luego propagados a la base de datos de distribución.
  • dbo.sp_MSdel_PersonContactType ELIMINAR records captured from Transaction Logs of Publisher database and then propagated to the distribution database.

Script of the dbo.sp_MSins_PersonContactType Procedure

As you can see, it’s a straightforward INSERT statement that comes out of the distribution database:

ALTER procedure [dbo].[sp_MSins_PersonContactType]
    @c1 int,
    @c2 nvarchar(50),
    @c3 datetime
as
begin  
	insert into [Person].[ContactType] (
		[ContactTypeID],
		[Name],
		[ModifiedDate]
	) values (
		@c1,
		@c2,
		@c3	) 
end  
GO

Script of the dbo.sp_MSupd_PersonContactType Procedure

The script relies on the Primary Key values to identify the unique record for updating:

ALTER procedure [dbo].[sp_MSupd_PersonContactType]
		@c1 int = NULL,
		@c2 nvarchar(50) = NULL,
		@c3 datetime = NULL,
		@pkc1 int = NULL,
		@bitmap binary(1)
as
begin  
	declare @primarykey_text nvarchar(100) = ''
update [Person].[ContactType] set
		[Name] = case substring(@bitmap,1,1) & 2 when 2 then @c2 else [Name] end,
		[ModifiedDate] = case substring(@bitmap,1,1) & 4 when 4 then @c3 else [ModifiedDate] end
	where [ContactTypeID] = @pkc1
if @@rowcount = 0
    if @@microsoftversion>0x07320000
		Begin
			if exists (Select * from sys.all_parameters where object_id = OBJECT_ID('sp_MSreplraiserror') and [name] = '@param3')
			Begin
				
				set @primarykey_text = @primarykey_text + '[ContactTypeID] = ' + convert(nvarchar(100),@pkc1,1)
				exec sp_MSreplraiserror @errorid=20598, @param1=N'[Person].[ContactType]', @[email protected]_text, @param3=13233 
			End
			Else
				exec sp_MSreplraiserror @errorid=20598
		End
end 
GO

Script of the dbo.sp_MSdel_PersonContactType Procedure

This script relies on the Primary Key values to identify a unique record for deleting records from the Subscriber :

ALTER procedure [dbo].[sp_MSdel_PersonContactType]
		@pkc1 int
as
begin  
	declare @primarykey_text nvarchar(100) = ''
	delete [Person].[ContactType] 
	where [ContactTypeID] = @pkc1
if @@rowcount = 0
    if @@microsoftversion>0x07320000
		Begin
			if exists (Select * from sys.all_parameters where object_id = OBJECT_ID('sp_MSreplraiserror') and [name] = '@param3')
			Begin
				
				set @primarykey_text = @primarykey_text + '[ContactTypeID] = ' + convert(nvarchar(100),@pkc1,1)
				exec sp_MSreplraiserror @errorid=20598, @param1=N'[Person].[ContactType]', @[email protected]_text, @param3=13234 
			End
			Else
				exec sp_MSreplraiserror @errorid=20598
		End
end  
GO

This clearly explains why Transactional Replication enforces the Primary Key as a key requirement for tables to be added as part of Replication .

Now, let’s see the Transactional Replication in action. Let’s change some data in the Publisher database. For simplicity, I’ll take the same Person.ContactType mesa.

Executing the SELECT statement on the table yields 20 records:

Next, I INSERTed a sample record into the Person.ContactType tabla:

And, I UPDATE the newly inserted record:

DELETE the newly inserted record from the table:

We need to verify these transactions in Replication using sp_browsereplcmds

Changes from Person.ContactType were captured from the Transactional Logs of Publisher Database (AdventureWorks ) and sent to the Distribution database in the same order. Later, it was propagated to the Subscriber Database (AdventureWorks_REPL ).

Conclusión

Thanks for reading this long power-packed article! We have gone through a variety of topics, such as:

  • Replication Architecture and Terminologies
  • SQL Server Replication Types
  • SQL Server Transactional Replication in Detail
  • SQL Server Transactional Replication Configuration (Default approach)
  • SQL Server Transactional Replication Verification
  • SQL Server Transactional Replication in action

I hope that you’ve found lots of helpful information in this article. In subsequent parts, we’ll explore troubleshooting various issues that are frequently encountered in Replication, and learn how to handle them more efficiently.