Compartir a través de


Conceptos de procedimientos almacenados del sistema de replicación

En SQL Server, el acceso mediante programación a toda la funcionalidad configurable por el usuario en una topología de replicación se proporciona mediante procedimientos almacenados del sistema. Aunque los procedimientos almacenados se pueden ejecutar individualmente mediante SQL Server Management Studio o la utilidad de línea de comandos sqlcmd, puede ser beneficioso escribir Transact-SQL archivos de script que se pueden ejecutar para realizar una secuencia lógica de tareas de replicación.

Las tareas de replicación de scripting proporcionan las siguientes ventajas:

  • Mantiene una copia permanente de los pasos que se usan para implementar la topología de replicación.

  • Usa un solo script para configurar varios suscriptores.

  • Instruye rápidamente a los nuevos administradores de bases de datos al permitirles evaluar, comprender, cambiar o solucionar problemas del código.

    Importante

    Los scripts pueden ser el origen de vulnerabilidades de seguridad; pueden invocar funciones del sistema sin conocimiento del usuario ni intervención y pueden contener credenciales de seguridad en texto sin formato. Revise los scripts para ver si hay problemas de seguridad antes de usarlos.

Creación de scripts de replicación

Desde el punto de vista de la replicación, un script es una serie de una o varias instrucciones Transact-SQL donde cada instrucción ejecuta un procedimiento almacenado de replicación. Los scripts son archivos de texto, a menudo con una extensión de archivo .sql, que se puede ejecutar mediante la utilidad sqlcmd. Cuando se ejecuta un archivo de script, la utilidad ejecuta las instrucciones SQL almacenadas en el archivo. Del mismo modo, un script se puede almacenar como un objeto de consulta en un proyecto de SQL Server Management Studio.

Los scripts de replicación se pueden crear de las maneras siguientes:

  • Cree manualmente el script.

  • Use las características de generación de scripts que se proporcionan en los asistentes de replicación o

  • SQL Server Management Studio. Para más información, consulte Scripting de replicación.

  • Use Replication Management Objects (RMOs) para generar mediante programación el script para crear un objeto RMO.

Al crear manualmente scripts de replicación, tenga en cuenta las siguientes consideraciones:

  • Transact-SQL scripts tienen uno o varios lotes. El comando GO indica el final de un lote. Si un script de Transact-SQL no tiene ningún comando GO, se ejecuta como un único lote.

  • Al ejecutar varios procedimientos almacenados de replicación en un solo lote, después del primer procedimiento, todos los procedimientos posteriores del lote deben ir precedidos de la palabra clave EXECUTE.

  • Todos los procedimientos almacenados de un lote deben compilarse antes de que se ejecute un lote. Sin embargo, una vez compilado el lote y se ha creado un plan de ejecución, puede producirse o no un error en tiempo de ejecución.

  • Al crear scripts para configurar la replicación, debe usar la autenticación de Windows para evitar almacenar las credenciales de seguridad en el archivo de script. Si debe almacenar credenciales en un archivo de script, debe proteger el archivo para evitar el acceso no autorizado.

Script de replicación de ejemplo

El siguiente script se puede ejecutar para configurar la publicación y distribución en un servidor.

-- This script uses sqlcmd scripting variables. They are in the form  
-- $(MyVariable). For information about how to use scripting variables    
-- on the command line and in SQL Server Management Studio, see the   
-- "Executing Replication Scripts" section in the topic  
-- "Programming Replication Using System Stored Procedures".  
  
-- Install the Distributor and the distribution database.  
DECLARE @distributor AS sysname;  
DECLARE @distributionDB AS sysname;  
DECLARE @publisher AS sysname;  
DECLARE @directory AS nvarchar(500);  
DECLARE @publicationDB AS sysname;  
-- Specify the Distributor name.  
SET @distributor = $(DistPubServer);  
-- Specify the distribution database.  
SET @distributionDB = N'distribution';  
-- Specify the Publisher name.  
SET @publisher = $(DistPubServer);  
-- Specify the replication working directory.  
SET @directory = N'\\' + $(DistPubServer) + '\repldata';  
-- Specify the publication database.  
SET @publicationDB = N'AdventureWorks2012';   
  
-- Install the server MYDISTPUB as a Distributor using the defaults,  
-- including autogenerating the distributor password.  
USE master  
EXEC sp_adddistributor @distributor = @distributor;  
  
-- Create a new distribution database using the defaults, including  
-- using Windows Authentication.  
USE master  
EXEC sp_adddistributiondb @database = @distributionDB,   
    @security_mode = 1;  
GO  
  
-- Create a Publisher and enable AdventureWorks2012 for replication.  
-- Add MYDISTPUB as a publisher with MYDISTPUB as a local distributor  
-- and use Windows Authentication.  
DECLARE @distributionDB AS sysname;  
DECLARE @publisher AS sysname;  
-- Specify the distribution database.  
SET @distributionDB = N'distribution';  
-- Specify the Publisher name.  
SET @publisher = $(DistPubServer);  
  
USE [distribution]  
EXEC sp_adddistpublisher @publisher=@publisher,   
    @distribution_db=@distributionDB,   
    @security_mode = 1;  
GO  
  

Este script se puede guardar localmente para instdistpub.sql que se pueda ejecutar o volver a ejecutar cuando sea necesario.

El script anterior incluye variables de scripting sqlcmd , que se usan en muchos de los ejemplos de código de replicación en los Libros en pantalla de SQL Server. Las variables de scripting se definen mediante la $(MyVariable) sintaxis . Los valores de las variables se pueden pasar a un script en la línea de comandos o en SQL Server Management Studio. Para obtener más información, consulte la siguiente sección de este tema, "Ejecución de scripts de replicación".

Ejecución de scripts de replicación

Una vez creado, se puede ejecutar un script de replicación de una de las maneras siguientes:

Creación de un archivo de consulta SQL en SQL Server Management Studio

Se puede crear un archivo de script de replicación Transact-SQL como un archivo de consulta SQL en un proyecto de SQL Server Management Studio. Una vez escrito el script, se puede realizar una conexión a la base de datos para este archivo de consulta y se puede ejecutar el script. Para obtener más información sobre cómo crear scripts de Transact-SQL mediante SQL Server Management Studio, vea Editores de consultas y texto (SQL Server Management Studio)).

Para usar un script que incluya variables de scripting, SQL Server Management Studio debe ejecutarse en modo sqlcmd . En el modo sqlcmd , el Editor de consultas acepta una sintaxis adicional específica de sqlcmd, como :setvar, que se usa para un valor para una variable. Para obtener más información sobre el modo sqlcmd , vea Editar scripts SQLCMD con el Editor de consultas. En el siguiente script, :setvar se usa para proporcionar un valor para la $(DistPubServer) variable.

:setvar DistPubServer N'MyPublisherAndDistributor';  
  
-- Install the Distributor and the distribution database.  
DECLARE @distributor AS sysname;  
DECLARE @distributionDB AS sysname;  
DECLARE @publisher AS sysname;  
DECLARE @directory AS nvarchar(500);  
DECLARE @publicationDB AS sysname;  
-- Specify the Distributor name.  
SET @distributor = $(DistPubServer);  
-- Specify the distribution database.  
SET @distributionDB = N'distribution';  
-- Specify the Publisher name.  
SET @publisher = $(DistPubServer);  
  
--  
-- Additional code goes here  
--  

Uso de la utilidad sqlcmd desde la línea de comandos

En el ejemplo siguiente se muestra cómo se usa la línea de comandos para ejecutar el archivo de instdistpub.sql script mediante la utilidad sqlcmd:

sqlcmd.exe -E -S sqlserverinstance -i C:\instdistpub.sql -o C:\output.log -v DistPubServer="N'MyDistributorAndPublisher'"  

En este ejemplo, el -E modificador indica que se usa la autenticación de Windows al conectarse a SQL Server. Al usar la autenticación de Windows, no es necesario almacenar un nombre de usuario y una contraseña en el archivo de script. El modificador especifica el -i nombre y la ruta de acceso del archivo de script y el modificador especifica el nombre del archivo de salida (la -o salida de SQL Server se escribe en este archivo en lugar de la consola cuando se usa este modificador). La sqlcmd utilidad permite pasar variables de scripting a un script de Transact-SQL en tiempo de ejecución mediante el -v modificador . En este ejemplo, sqlcmd reemplaza cada instancia de en el script por el valor N'MyDistributorAndPublisher' antes de $(DistPubServer) la ejecución.

Nota:

El -X modificador deshabilita las variables de scripting.

Automatización de tareas en un archivo por lotes

Mediante un archivo por lotes, las tareas de administración de replicación, las tareas de sincronización de replicación y otras tareas se pueden automatizar en el mismo archivo por lotes. El siguiente archivo por lotes usa la utilidad sqlcmd para quitar y volver a crear la base de datos de suscripciones y agregar una suscripción de extracción de mezcla. A continuación, el archivo invoca al agente de mezcla para sincronizar la nueva suscripción:

REM ----------------------Script to synchronize merge subscription ----------------------  
REM -- Creates subscription database and   
REM -- synchronizes the subscription to MergeSalesPerson.  
REM -- Current computer acts as both Publisher and Subscriber.  
REM -------------------------------------------------------------------------------------  
  
SET Publisher=%computername%  
SET Subscriber=%computername%  
SET PubDb=AdventureWorks  
SET SubDb=AdventureWorksReplica  
SET PubName=AdvWorksSalesOrdersMerge  
  
REM -- Drop and recreate the subscription database at the Subscriber  
sqlcmd /S%Subscriber% /E /Q"USE master IF EXISTS (SELECT * FROM sysdatabases WHERE name='%SubDb%' ) DROP DATABASE %SubDb%"  
sqlcmd /S%Subscriber% /E /Q"USE master CREATE DATABASE %SubDb%"  
  
REM -- Add a pull subscription at the Subscriber  
sqlcmd /S%Subscriber% /E /Q"USE %SubDb% EXEC sp_addmergepullsubscription @publisher = %Publisher%, @publication = %PubName%, @publisher_db = %PubDb%"  
sqlcmd /S%Subscriber% /E /Q"USE %SubDb%  EXEC sp_addmergepullsubscription_agent @publisher = %Publisher%, @publisher_db = %PubDb%, @publication = %PubName%, @subscriber = %Subscriber%, @subscriber_db = %SubDb%, @distributor = %Publisher%"  
  
REM -- This batch file starts the merge agent at the Subscriber to   
REM -- synchronize a pull subscription to a merge publication.  
REM -- The following must be supplied on one line.  
"\Program Files\Microsoft SQL Server\120\COM\REPLMERG.EXE"  -Publisher  %Publisher% -Subscriber  %Subscriber%  -Distributor %Publisher%  -PublisherDB  %PubDb% -SubscriberDB %SubDb% -Publication %PubName% -PublisherSecurityMode 1 -OutputVerboseLevel 1  -Output  -SubscriberSecurityMode 1  -SubscriptionType 1 -DistributorSecurityMode 1 -Validate 3  
  

Scripting Common Replication Tasks

A continuación se muestran algunas de las tareas de replicación más comunes que se pueden crear scripts mediante procedimientos almacenados del sistema:

  • Configuración de la publicación y distribución

  • Modificación de las propiedades del publicador y del distribuidor

  • Deshabilitación de la publicación y distribución

  • Creación de publicaciones y definición de artículos

  • Eliminación de publicaciones y artículos

  • Creación de una suscripción de extracción

  • Modificación de una suscripción de extracción

  • Eliminación de una suscripción de extracción

  • Creación de una suscripción de inserción

  • Modificación de una suscripción de inserción

  • Eliminación de una suscripción de inserción

  • Sincronización de una suscripción de extracción

Véase también

Conceptos de la programación de replicación
Procedimientos almacenados de replicación (Transact-SQL)
Replicación de scripts