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

Configuración de replicación transaccional de SQL Server

La replicación transaccional en SQL Server es una de las técnicas de replicación más utilizadas para copiar o distribuir datos entre múltiples destinos. En artículos anteriores, discutimos la replicación de SQL Server y cómo funciona internamente la replicación. Ahora nuestro objetivo es ver cómo configurar la replicación transaccional en SQL Server utilizando el enfoque de copia de seguridad y cómo agregar o quitar artículos de la replicación correctamente. Sin las medidas adecuadas, corremos el riesgo de invalidar la instantánea y enfrentar la necesidad de reconfigurar la replicación.

Administración de replicación transaccional

En mis artículos anteriores, repasamos las instrucciones paso a paso sobre los siguientes elementos:

  • Configurar distribución
  • Configurar publicación con la opción Instantánea
  • Configurar suscripción con opción de instantánea

Al configurar la replicación, primero configuramos el distribuidor. Luego se procedió a Crear una Publicación y Suscripción. Para descartar o limpiar la replicación, debemos realizar el proceso inverso. Primero, tendríamos que eliminar la Suscripción, luego la Publicación y, finalmente, eliminar el Distribuidor o la base de datos de distribución.

En este artículo, intentamos descartar la replicación transaccional en SQL Server que configuramos previamente. Usaremos el enfoque de copia de seguridad y agregaremos o quitaremos artículos de la replicación de la siguiente manera:

  • Cancelar suscripción
  • Eliminar publicación
  • Drop Distributor o base de datos de distribución
  • Limpie completamente la replicación si alguno de los pasos anteriores no funciona correctamente
  • Configurar la replicación con la copia de seguridad de la base de datos
  • Eliminar artículos de la replicación usando el asistente y el enfoque T-SQL
  • Agregue nuevos artículos a la replicación mediante el asistente y el enfoque T-SQL
  • Agregue un artículo de procedimiento almacenado y estudie la diferencia entre el artículo de tabla y el artículo de procedimiento almacenado

Cancelar suscripción

Para cancelar cualquier replicación configurada, primero debemos cancelar la suscripción.

En SSMS, conéctese a la instancia del publicador> Replicación > Publicaciones locales . Haga clic con el botón derecho en Suscripción> Eliminar o Soltar Suscripción:

SQL Server le pedirá que confirme su acción:

Haga clic en para dar de baja la Suscripción. Esto cancelará la suscripción por completo.

En mi configuración actual, tanto el publicador como el suscriptor están en la misma instancia. Por lo tanto, no se enviaron solicitudes para conectarse a la instancia del suscriptor para su validación. En caso de que lo tuviéramos en una instancia diferente de SQL Server, solicitaría conectarse a la instancia del suscriptor para validar antes de eliminar el suscriptor.

Dropping Publication utiliza internamente el sp_droppublication procedimiento y podemos usar este procedimiento para eliminar manualmente la publicación a través del enfoque T-SQL

Eliminar publicación

Una vez que se elimine la Suscripción, podemos continuar y eliminar la Publicación . Haga clic derecho en AdventureWorks_Pub y seleccione Eliminar del menú:

Verá un mensaje que le pedirá que confirme esa acción. Tenga en cuenta que va a eliminar la publicación. Sin embargo, no se eliminarán todos los registros que se replicaron en la base de datos del suscriptor. Tendremos que eliminar la base de datos manualmente para limpiar esos registros replicados. Haz clic en .

Descartar una publicación internamente aplica el sp_droppublication procedimiento.

Eliminar el distribuidor o la base de datos de distribución

Anteriormente mencionamos que la base de datos de distribución es una base de datos del sistema. Por lo tanto, no podemos soltarlo haciendo clic derecho en la base de datos y seleccionando la opción de eliminar como con las bases de datos de usuarios. Si hacemos clic derecho en la base de datos de distribución, solo obtenemos las siguientes opciones:

Cuando necesitemos eliminar la base de datos de distribución, primero debemos hacer clic con el botón derecho en Replicación nodo> Deshabilitar Publicación y distribución .

Se abrirá el Asistente.

Por defecto, la segunda opción (No, seguir usando este servidor como Publisher ) está seleccionado para evitar la caída accidental de todas las publicaciones en el servidor.

En nuestro caso, solo tenemos una publicación y nos gustaría limpiarla. Por lo tanto, seleccionamos la primera opción:Sí, deshabilitar la publicación en este servidor . Eliminará todas las publicaciones junto con las suscripciones si aún no las ha eliminado junto con la desactivación del distribuidor.

Podemos usar este asistente para limpiar todo si nuestro servidor solo tiene una replicación configurada. Sin embargo, si hay varias replicaciones configuradas, eliminamos la replicación transaccional en SQL Server siguiendo los pasos estándar compartidos anteriormente.

Ahora, debemos seleccionar la primera opción Sí, deshabilitar la publicación en este servidor y haga clic en Siguiente .

En la nueva ventana, marque ambas opciones:Desactivar publicación y distribución y Generar un archivo de script con pasos...

Para generar el archivo de secuencia de comandos, deberá proporcionar la ruta donde almacenarlo.

Haga clic en Siguiente y ver las opciones seleccionadas en el asistente. Verifique y asegúrese de haber seleccionado todo correctamente.

Haz clic en Finalizar .

Descartar la base de datos de distribución internamente usa el sp_dropdistributor procedimiento.

Una vez que el Distribuidor está deshabilitado, podemos ver que la base de datos de distribución se elimina de las bases de datos del sistema.

Limpiar la replicación por completo si alguno de los pasos anteriores no funciona correctamente

Si la Suscripción o la Publicación se eliminan a través de cualquier otro enfoque, terminamos en una eliminación inconsistente de la Replicación transaccional en SQL Server y obtenemos muchos errores. Para limpiar todos los residuos de Suscripción o Publicación, podemos usar el procedimiento del sistema sp_removedbreplication .

exec_spremovedbreplication

Ejecute este procedimiento solo si todavía hay problemas de replicación después de probar todos los demás enfoques mencionados. Procedimiento almacenado sp_removedbreplication debe ejecutarse en la base de datos de Publisher o desde la base de datos maestra y usar el siguiente comando después de reemplazar @dbname con el nombre de la base de datos de Publisher.

exec_spremovedbreplication @dbname

Configurar la replicación mediante el enfoque de copia de seguridad

Después de eliminar la replicación por completo, reconfiguremos la replicación transaccional en SQL Server utilizando el enfoque de copia de seguridad. Implica los siguientes pasos:

  • Configurar el distribuidor
  • Crear la publicación
  • Modifique las propiedades de la publicación para habilitar la creación de suscripciones a partir de la copia de seguridad completa o diferencial.
  • Realice una copia de seguridad completa del publicador y restáurelo como suscriptor.
  • Configure la suscripción y comience a inicializar desde la copia de seguridad.

Ya hemos realizado la mayoría de los pasos anteriormente cuando configuramos la replicación. Por lo tanto, no entraremos en detalles sobre esos pasos aquí.

Configurar distribuidor y publicación

Consulte las instrucciones paso a paso del artículo anterior sobre cómo configurar tanto la distribución como la publicación mediante el asistente Crear publicación. Para conocer los scripts T-SQL utilizados por el asistente para crear Distribución y Publicación, simplemente genere los scripts en un archivo durante el último paso del asistente y no ejecute los scripts desmarcando la opción "Crear la publicación" como se muestra a continuación. .

Ahora abra el archivo de script guardado en una nueva ventana de consulta para crear el distribuidor y la publicación usando esos scripts:

Tenga en cuenta la segunda línea comentada:indica que todos los valores de contraseña que ingresamos en el asistente se convirtieron en NULL o cadena vacía por razones de seguridad. Eche un vistazo a la línea resaltada con @password =valores en blanco. Reemplace eso con los valores de contraseña correctos, haga lo mismo para otras secciones con contraseñas y ejecute el script.

El script se ejecutó con éxito. Podemos ver que la ejecución de scripts ha creado la base de datos de distribución y todas las tablas del sistema dentro de ella. Al final del mensaje, podemos ver que el trabajo del Log Reader Agent también se ha creado y lanzado.

Si es necesario, puede almacenar los resultados para conocer todas las tablas, vistas y procedimientos críticos en la base de datos de distribución. Esta información será útil para solucionar problemas en el futuro.

Después de la ejecución exitosa de los scripts, podemos ver la base de datos de distribución y la publicación creada con éxito.

Modificar las propiedades de la publicación para habilitar la creación de suscripciones a partir de una copia de seguridad completa o diferencial

Si el tamaño de la base de datos es muy pequeño, el tiempo requerido para enviar la instantánea inicial será más rápido.

Por otro lado, la creación de una replicación transaccional en SQL Server usando Snapshot no es eficiente en los siguientes casos:

  1. Si la base de datos es enorme (300 GB o más). El tiempo necesario para enviar la instantánea inicial será demasiado largo.
  2. Si el suscriptor se encuentra en diferentes ubicaciones con poco ancho de banda de red. Luego, el proceso de instantánea inicial se llevará a cabo durante varios días.

Por lo tanto, hacer una copia de seguridad completa, transferirla a través de FTP o físicamente a la otra ubicación, restaurar esa copia de seguridad e inicializar el suscriptor será significativamente más rápido en comparación con el enfoque de instantánea.

Para permitir que la publicación admita la inicialización desde las copias de seguridad, debemos modificar una de las propiedades de la publicación. Se puede hacer a través de SSMS o T-SQL.

Enfoque SSMS

Haz clic derecho en AdventureWorks_pub publicación y elija Propiedades :

Haga clic en Opciones de suscripción :

Establecer Verdadero para Permitir inicialización desde archivos de copia de seguridad y haz clic en Aceptar . Esto nos permitirá inicializar desde Copia de seguridad completa y diferencial.

Enfoque T-SQL

En T-SQL, podemos llamar al procedimiento sp_changepublication para modificar esta propiedad.

El script para cambiar esta propiedad se encuentra a continuación:

USE AdventureWorks
GO
exec sp_changepublication @publication = 'AdventureWorks_pub', @property = 'allow_initialize_from_backup', @value = 'true'

Realice una copia de seguridad completa del publicador y restáurelo como suscriptor

Un factor clave para notar que debemos realizar una copia de seguridad completa después de implementar la propiedad de publicación anterior. Si el tamaño de la base de datos es enorme, podemos realizar una copia de seguridad completa y restaurarla en el modo RECUPERACIÓN en la instancia del suscriptor, y realizar una copia de seguridad diferencial después de realizar el cambio de configuración anterior y restaurarla en la base de datos del suscriptor con el modo NORECOVERY.

Configurar suscripción y comenzar a inicializar desde la copia de seguridad

De nuevo, consulte las instrucciones paso a paso. Necesitamos generar los scripts necesarios pero no ejecutarlos. La cuestión es que inicializaremos la suscripción desde una copia de seguridad completa o diferencial utilizando únicamente secuencias de comandos T-SQL. Creé esos scripts durante la creación de la suscripción la última vez. Vea el archivo abierto a continuación.

Nota :Los scripts para la creación de la Suscripción deben ejecutarse desde la base de datos del Publisher. Por lo tanto, abra la ventana de consulta que se conecta a la instancia de Publisher.

Necesitamos hacer algunos cambios para que la suscripción se inicialice desde la copia de seguridad:

  • Cambiar el @sync_type valor de automático para iniciar con copia de seguridad
  • Proporcione las contraseñas correctas para aquellas reemplazadas con NULL o cadenas vacías. Dado que utilicé la cuenta del servicio de agente dentro del servidor, no necesito cambiar las contraseñas.
  • Agregue los parámetros @backupdevicetype y @backupdevicename y proporcione la ruta a la copia de seguridad completa o diferencial en el servidor de publicación (el script se ejecutará en él).

Cuando termine, nuestro script se verá así:

Ejecute el script para completar la configuración de la Suscripción y recibiremos la finalización exitosa del script como se muestra a continuación.

Como indica el estado, el trabajo del Agente SQL Server del Agente de distribución se creó y se inició al crear la Suscripción.

Por lo tanto, hemos creado nuestra replicación con éxito utilizando el enfoque de copia de seguridad. Ahora podemos verificar la Suscripción disponible.

Inicie el Monitor de replicación y haga clic con el botón derecho en el Suscriptor. Mostrará el estado de la replicación:

Como podemos ver, todos los datos se han inicializado correctamente desde la copia de seguridad sin necesidad de ejecutar el trabajo del Agente de instantáneas. Dado que no hay transacciones activas en la base de datos, recibimos el mensaje "No hay transacciones replicadas disponibles" en el Monitor de replicación en este momento.

Eliminar artículos de la replicación

Habiendo aprendido cómo configurar la replicación transaccional en SQL Server a través del asistente de replicación o los scripts T-SQL, ahora podemos verificar cómo eliminar un artículo de la replicación a través de estos dos métodos.

Uso del Asistente

Haga clic derecho en AdventureWorks_pub Publicación> Propiedades . Haga clic en Artículo para ver la lista de artículos incluidos en la replicación.

De forma predeterminada, enumerará los objetos de la base de datos en el formato OBJECT_NAME (SCHEMA_NAME). Para propósitos de prueba, eliminemos la tabla Person.ContactType de la replicación.

Para eso, simplemente desmarque la casilla antes de Tipo de contacto (Persona). SQL Server mostrará el mensaje de advertencia o confirmación:

Como explica, si hay instantáneas disponibles actualmente, invalidará esas instantáneas debido a los cambios en los artículos.

Dado que hemos inicializado utilizando el método de copia de seguridad y no hemos utilizado instantáneas, podemos ignorar este mensaje de forma segura y hacer clic en . para eliminar este artículo de tabla de la replicación. Haz clic en Aceptar para completar la eliminación del artículo de la replicación.

Ahora el Person.ContactType la tabla se elimina de la replicación. Cualquier cambio que ocurra en el publicador no se enviará a la base de datos del suscriptor. Podemos probar esto INSERTAR/ACTUALIZAR/ELIMINAR registros en Person.ContactType mesa.

Uso de T-SQL

Otra forma es eliminar un artículo de la replicación con la ayuda de sp_droparticle procedimiento.

USE [AdventureWorks]
GO
EXEC sp_droparticle 
  @publication = N'AdventureWorks_pub', 
  @article = N'ContactType',
  @force_invalidate_snapshot = 1;
GO

Agregue nuevos artículos a la replicación a través del asistente o el enfoque TSQL

En algunos casos (como el mantenimiento de tablas), es posible que debamos eliminar algunos artículos y volver a agregarlos a la replicación después de completar el mantenimiento.

Hemos aprendido con éxito cómo eliminar artículos de la replicación. Consideremos cómo agregar nuevos artículos a la replicación. Agregaremos el Person.ContactType mesa que hemos eliminado anteriormente de vuelta a la replicación.

Uso del asistente

Para volver a agregar un artículo de tabla a la replicación, haga clic con el botón derecho en Publicación > Propiedades > Artículos . Mostrará la lista de artículos disponibles en la Publicación.

No pudimos encontrar el Person.ContactType tabla:la pantalla muestra solo las tablas que formaban parte de la replicación. Para ver todas las tablas disponibles en la base de datos de Publisher, desmarque Mostrar solo los artículos seleccionados en la lista para ver todas las tablas.

Ahora, podemos ver el Person.ContactType tabla listada.

Como comentamos anteriormente, todas las tablas sin claves principales tendrán un círculo rojo icono que indica que estas tablas no se pueden incluir en la replicación mediante el asistente o el enfoque T-SQL.

Compruebe el Tipo de contacto (persona) para volver a agregarla a la replicación y haga clic en Aceptar .

La tabla se agrega nuevamente a la replicación. Sin embargo, necesitamos encontrar un método para enviar la instantánea inicial para este artículo de tabla recién agregado.

Si ha leído el artículo hasta ahora, habrá acertado:simplemente ejecute el trabajo del agente de instantáneas para enviar la instantánea inicial de esta tabla.

Hagámoslo ahora:haga clic derecho en Publicación > ver el agente de instantáneas estado.

Haz clic en Iniciar para enviar la instantánea de los artículos elegibles. Envíe esos datos a la base de datos de Distribución y, finalmente, a la base de datos de Suscriptor.

Enfoque T-SQL

Podemos realizar acciones similares utilizando el sp_addarticle procedimiento.

La siguiente secuencia de comandos agregará artículos a la replicación.

use [AdventureWorks]
GO
exec sp_addarticle @publication = N'AdventureWorks_pub', @article = N'ContactType', @source_owner = N'Person', @source_object = N'ContactType'
, @type = N'logbased', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509F
, @identityrangemanagementoption = N'manual', @destination_table = N'ContactType', @destination_owner = N'Person', @vertical_partition = N'false'
, @ins_cmd = N'CALL sp_MSins_PersonContactType'
, @del_cmd = N'CALL sp_MSdel_PersonContactType'
, @upd_cmd = N'SCALL sp_MSupd_PersonContactType'
GO

Anteriormente notamos cómo funciona la replicación para un artículo de tabla al aplicar 3 procedimientos creados en la base de datos del suscriptor para manejar las operaciones INSERTAR/ACTUALIZAR y ELIMINAR.

Usando el enfoque T-SQL, sabemos cómo se hace referencia a estos procedimientos. Si es necesario, podemos cambiar el nombre de los objetos, los nombres de las tablas de destino o los procedimientos predeterminados. Para ello, realizaremos cambios en el sp_addarticle procedimiento.

NOTA :Si hacemos alguna modificación a la Replicación, deberíamos documentarlas todas correctamente. De lo contrario, podría conducir a un desastre más adelante.

Agregue un artículo de procedimiento almacenado y estudie la diferencia entre un artículo de tabla y un artículo de procedimiento almacenado

Para agregar un procedimiento almacenado a la replicación, debemos ir a los Artículos página y verifique el procedimiento almacenado requerido para que se replique. Podemos hacer lo mismo para Vistas , Vistas indexadas o Funciones definidas por el usuario también.

Para obtener más información sobre la diferencia entre artículos de tabla y vistas/procedimiento almacenado/vistas indexadas/funciones definidas por el usuario, podemos agregar uno de cada artículo para cada categoría usando T-SQL:

Agregar un nuevo artículo de procedimiento almacenado a la replicación

use [AdventureWorks]
exec sp_addarticle @publication = N'AdventureWorks_pub', @article = N'uspGetBillOfMaterials', @source_owner = N'dbo'
, @source_object = N'uspGetBillOfMaterials', @type = N'proc schema only', @description = null, @creation_script = null
, @pre_creation_cmd = N'drop', @schema_option = 0x0000000008000001, @force_invalidate_snapshot = 1
, @destination_table = N'uspGetBillOfMaterials', @destination_owner = N'dbo'

Agregar un nuevo artículo de vista a la replicación

use [AdventureWorks]
exec sp_addarticle @publication = N'AdventureWorks_pub', @article = N'vVendorWithContacts', @source_owner = N'Purchasing'
, @source_object = N'vVendorWithContacts', @type = N'view schema only', @description = null, @creation_script = null, @pre_creation_cmd = N'drop'
, @schema_option = 0x0000000008000001, @destination_table = N'vVendorWithContacts', @destination_owner = N'Purchasing'
GO

Agregar un nuevo artículo de vista indexada a la replicación

use [AdventureWorks]
exec sp_addarticle @publication = N'AdventureWorks_pub', @article = N'vStateProvinceCountryRegion', @source_owner = N'Person'
, @source_object = N'vStateProvinceCountryRegion', @type = N'indexed view schema only', @description = null, @creation_script = null
, @pre_creation_cmd = N'drop', @schema_option = 0x0000000008000001, @force_invalidate_snapshot = 1
, @destination_table = N'vStateProvinceCountryRegion', @destination_owner = N'Person'

Agregar un nuevo artículo de función definida por el usuario a la replicación

use [AdventureWorks]
exec sp_addarticle @publication = N'AdventureWorks_pub', @article = N'ufnGetStock', @source_owner = N'dbo', @source_object = N'ufnGetStock'
, @type = N'func schema only', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x0000000008000001
, @force_invalidate_snapshot = 1, @destination_table = N'ufnGetStock', @destination_owner = N'dbo'

Usamos el sp_addarticle procedimiento para agregar cualquier tipo de artículo a la replicación con los parámetros de entrada necesarios y las opciones cambiando el @type incluido parámetro.

También podemos agregar estos artículos a la Publicación haciendo clic derecho en Publicación > Propiedades > Artículos y agregarlos a la Publicación.

Propiedades de artículos de tabla

Ahora, cambiemos las propiedades del artículo a través de Artículos menú en la Publicación propiedades:

Haga clic en nuestro Person.ContactType favorito tabla> Propiedades del artículo . Habrá una opción para cambiar las Propiedades del artículo solo para esta Tabla o para todas las Tablas incluidas en la Replicación. Para una prueba, seleccionamos Establecer propiedades del artículo de tabla resaltado para ver las propiedades de Person.ContactType mesa.

Ver todas las opciones disponibles para esta tabla Artículo:

Copiar objetos y configuraciones al suscriptor y Entrega de estados de cuenta son las configuraciones más importantes para la replicación. Debemos tener mucho cuidado al cambiar cualquiera de estos parámetros.

Haga clic en el formato de envío INSERTAR\ACTUALIZAR\ELIMINAR para obtener las siguientes opciones.

  • No replicar declaraciones INSERT\UPDATE\DELETE:para personalizar la replicación y no enviar comandos específicos a la base de datos del suscriptor
  • Instrucción INSERT\UPDATE\DELETE:para enviar la declaración INSERT\UPDATE\DELETE directamente al suscriptor en lugar de reconstruir los datos de los registros de transacciones
  • CALL :ejecuta el procedimiento almacenado incorporado que se muestra arriba en sp_addarticle para replicar datos.
  • XCALL :ejecuta un procedimiento almacenado extendido para replicar los cambios.

Propiedades del artículo de procedimiento almacenado

Haga clic en Propiedades del artículo. en cualquiera de los Procedimientos almacenados para ver las Propiedades

Una de las propiedades clave del procedimiento almacenado es la opción de replicación – vea las opciones disponibles a continuación:

  • Solo definición de procedimiento almacenado – replica solo los cambios en la estructura DDL del procedimiento almacenado. Esta es la opción predeterminada para cualquier procedimiento almacenado.
  • Ejecución del procedimiento almacenado – utilice esta opción para reducir la carga de replicación. Realiza todos los cambios a través de la ejecución del procedimiento almacenado en el suscriptor sin enviar comandos individuales. Podemos ver acerca de esta función para resolver problemas de rendimiento al replicar grandes cambios de datos en mi próximo artículo.
  • Ejecución en una transacción serializada del SP – una opción híbrida para elegir Ejecución del procedimiento almacenado solo si el procedimiento se ejecuta dentro de una transacción serializada. De lo contrario, se replicaría como comandos DML individuales.

Ver propiedades del artículo

Haga clic en Propiedades del artículo para cualquier Vista para obtener las Propiedades :

Propiedades de artículos de vista indexada

Haga clic en Propiedades del artículo para cualquiera de las Vistas indexadas para las Propiedades :

Propiedades de artículos de funciones definidas por el usuario

Haga clic en Propiedades del artículo. en cualquier función definida por el usuario para sus Propiedades

Las propiedades de las vistas, las vistas indexadas y las funciones definidas por el usuario son prácticamente las mismas. Por lo tanto, no podemos personalizarlos mucho.

Conclusión

Gracias por leer otro artículo lleno de energía relacionado con la replicación. Hoy, hemos aclarado los detalles sobre la eliminación de la suscripción, la publicación, la base de datos de distribución y la limpieza completa de la replicación, incluso si encontramos algún problema.

Hemos configurado una replicación recién inicializada desde la copia de seguridad y probado cómo agregar nuevos artículos a la replicación o eliminarlos de ella. En el trabajo posterior con bases de datos y, en particular, en la búsqueda de discrepancias entre ellas, se beneficiará enormemente de las herramientas profesionales. El paquete de comparación de dbForge para SQL Server identifica y analiza todas esas diferencias y las informa.

En nuestro próximo artículo, examinaremos los problemas de replicación más frecuentes y cómo resolverlos profesionalmente.