Compartir a través de


Configurar la publicación y la distribución

Se aplica a: SQL Server Azure SQL Managed Instance

En este tema se describe cómo configurar la publicación y distribución en SQL Server mediante SQL Server Management Studio, Transact-SQL o Replication Management Objects (RMO).

Antes de empezar

Seguridad

Para más información, consulte Ver y modificar la configuración de seguridad de la replicación.

Uso de SQL Server Management Studio

Configure la distribución con el Asistente para nueva publicación o el Asistente para configurar la distribución. Después de configurar el distribuidor, vea y modifique las propiedades en el cuadro de diálogo Propiedades del distribuidor - <distribuidor>. Utilice el Asistente para configurar la distribución si desea configurar un distribuidor para que los miembros de los roles fijos de base de datos db_owner puedan crear publicaciones o si desea configurar un distribuidor remoto que no sea un publicador.

Para configurar la distribución

  1. En Microsoft SQL Server Management Studio, conecte con el servidor que vaya a ser el distribuidor (en muchos casos, el publicador y el distribuidor son el mismo servidor) y expanda el nodo de servidor.

  2. Haga clic con el botón secundario en la carpeta Replicación y, a continuación, en Configurar distribución.

  3. Siga las indicaciones del Asistente para configurar la distribución:

  • Seleccione un distribuidor. Para usar un distribuidor local, seleccione ServerName, que actuará como su propio distribuidor. SQL Server creará una base de datos y un registro de distribución. Para utilizar un distribuidor remoto, seleccione Utilizar el siguiente servidor como distribuidory, a continuación, seleccione un servidor. El servidor ya debe estar configurado como distribuidor y el publicador debe estar habilitado para usar el distribuidor. Para más información, vea Habilitar un publicador remoto en un distribuidor (SQL Server Management Studio).

    Si selecciona un distribuidor remoto, debe escribir una contraseña en la página Contraseña administrativa para las conexiones realizadas desde el publicador al distribuidor. Esta contraseña debe coincidir con la especificada cuando se habilitó el publicador en el distribuidor remoto.

  • Especifique una carpeta de instantáneas raíz (para un distribuidor local). La carpeta de instantáneas es simplemente un directorio designado como recurso compartido; los agentes que leen y escriben en esta carpeta deben tener permisos de acceso suficientes a ella. Cada publicador que utiliza este distribuidor crea una carpeta bajo la carpeta raíz, y cada publicación crea carpetas bajo la carpeta de publicador donde almacena los archivos de instantáneas. Para más información sobre cómo proteger la carpeta adecuadamente, vea Proteger la carpeta de instantáneas.

  • Especifique la base de datos de distribución (para un distribuidor local). La base de datos de distribución almacena metadatos y datos del historial de todos los tipos de replicación y transacciones para la replicación transaccional.

  • Opcionalmente, habilite otros publicadores para utilizar el distribuidor. Si se habilitan otros publicadores para utilizar el distribuidor, debe escribir una contraseña en la página Contraseña del distribuidor para las conexiones realizadas desde esos publicadores al distribuidor.

  • Opcionalmente, genere un script de opciones de configuración. Para más información, consulte Scripting Replication.

Usar Transact-SQL

La publicación y distribución de replicaciones se puede configurar mediante programación usando procedimientos almacenados de replicación.

Para configurar la publicación mediante un distribuidor local

  1. Ejecute sp_get_distributor (Transact-SQL) para determinar si el servidor ya está configurado como un distribuidor.
  • Si el valor de installed en el conjunto de resultados es 0, ejecute sp_adddistributor (Transact-SQL); en el distribuidor en la base de datos maestra.

  • Si el valor de distribution db installed en el conjunto de resultados es 0, ejecute sp_adddistributiondb (Transact-SQL); en el distribuidor en la base de datos maestra. Especifique el nombre de la base de datos de distribución para @database. Opcionalmente, puede especificar el período de retención de transacción máximo para @max_distretention y el período de retención del historial para @history_retention. Si se está creando una nueva base de datos, especifique los parámetros de propiedad de la base de datos que desee.

  1. En el distribuidor, que también es el publicador, ejecute sp_adddistpublisher (Transact-SQL) y especifique el recurso compartido UNC que se usará como carpeta de instantáneas predeterminada para @working_directory.

    Para un distribuidor en SQL Managed Instance, use una cuenta de Azure Storage para @working_directory y la clave de acceso de almacenamiento para @storage_connection_string.

  2. En el publicador, ejecute sp_replicationdboption (Transact-SQL). Especifique la base de datos que se está publicando para @dbname, el tipo de replicación para @optname y el valor true para @value.

Para configurar la publicación mediante un distribuidor remoto

  1. Ejecute sp_get_distributor (Transact-SQL) para determinar si el servidor ya está configurado como un distribuidor.

    • Si el valor de installed en el conjunto de resultados es 0, ejecute sp_adddistributor (Transact-SQL); en el distribuidor en la base de datos maestra. Especifique una contraseña segura para @password. Esta contraseña para la cuenta distributor_admin la utilizará el publicador para conectarse al distribuidor.

    • Si el valor de distribution db installed en el conjunto de resultados es 0, ejecute sp_adddistributiondb (Transact-SQL); en el distribuidor en la base de datos maestra. Especifique el nombre de la base de datos de distribución para @database. Opcionalmente, puede especificar el período de retención de transacción máximo para @max_distretention y el período de retención del historial para @history_retention. Si se está creando una nueva base de datos, especifique los parámetros de propiedad de la base de datos que desee.

  2. En el distribuidor, ejecute sp_adddistpublisher (Transact-SQL) y especifique el recurso compartido UNC que se usará como carpeta de instantáneas predeterminada para @working_directory. Si el distribuidor va a usar autenticación de SQL Server para conectarse al publicador, también debe especificar el valor 0 para @security_mode y la información de inicio de sesión de Microsoft SQL Server para @login y @password.

    Para un distribuidor en SQL Managed Instance, use una cuenta de Azure Storage para @working_directory y la clave de acceso de almacenamiento para @storage_connection_string.

  3. En la base de datos maestra del publicador, ejecute sp_adddistributor (Transact-SQL). Especifique la contraseña segura usada en el paso 1 para @password. El publicador utilizará esta contraseña cuando se conecte al distribuidor.

  4. En el publicador, ejecute sp_replicationdboption (Transact-SQL). Especifique la base de datos que se está publicando para @dbname, el tipo de replicación para @optname y el valor true para @value.

Ejemplo (Transact-SQL)

El ejemplo siguiente muestra cómo configurar mediante programación la publicación y la distribución. En este ejemplo, se proporciona el nombre del servidor que se está configurando como un publicador y un distribuidor local mediante las variables de scripting. La publicación y distribución de replicaciones se puede configurar mediante programación usando procedimientos almacenados de replicación.

-- 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'AdventureWorks2022'; 

-- 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 AdventureWorks2022 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

Usar Replication Management Objects (RMO)

Para configurar la publicación y distribución en un único servidor

  1. Cree una conexión al servidor mediante la clase ServerConnection .

  2. Cree una instancia de la clase ReplicationServer. Pase el objeto ServerConnection del paso 1.

  3. Cree una instancia de la clase DistributionDatabase.

  4. Establezca la propiedad Name en el nombre de la base de datos y la propiedad ConnectionContext en el ServerConnection del paso 1.

  5. Instale el distribuidor llamando al método InstallDistributor . Pase el objeto DistributionDatabase del paso 3.

  6. Cree una instancia de la clase DistributionPublisher.

  7. Establezca las siguientes propiedades de DistributionPublisher:

  1. Llame al método Create.

Para configurar la publicación y distribución mediante un distribuidor remoto

  1. Cree una conexión al servidor del distribuidor remoto mediante la clase ServerConnection .

  2. Cree una instancia de la clase ReplicationServer. Pase el objeto ServerConnection del paso 1.

  3. Cree una instancia de la clase DistributionDatabase.

  4. Establezca la propiedad Name en el nombre de la base de datos y la propiedad ConnectionContext en el ServerConnection del paso 1.

  5. Instale el distribuidor llamando al método InstallDistributor . Especifique una contraseña segura (la que utiliza el publicador al conectarse al distribuidor remoto) y el objeto DistributionDatabase del paso 3. Para más información, vea Proteger el distribuidor.

    Importante

    Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales, use los servicios de cifrado (en inglés) proporcionados por Microsoft Windows .NET Framework.

  6. Cree una instancia de la clase DistributionPublisher.

  7. Establezca las siguientes propiedades de DistributionPublisher:

  1. Llame al método Create.

  2. Cree una conexión al servidor publicador local mediante la clase ServerConnection .

  3. Cree una instancia de la clase ReplicationServer. Transfiera el objeto ServerConnection del paso 9.

  4. Llame al método InstallDistributor. Pase el nombre del distribuidor remoto y la contraseña para el distribuidor remoto especificado en el paso 5.

Importante

Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales, use los servicios de cifrado (en inglés) proporcionados por Windows .NET Framework.

Ejemplo (RMO)

Puede configurar la publicación y distribución de replicación mediante programación utilizando Replication Management Objects (RMO).

// Set the server and database names
string distributionDbName = "distribution";
string publisherName = publisherInstance;
string publicationDbName = "AdventureWorks2022";

DistributionDatabase distributionDb;
ReplicationServer distributor;
DistributionPublisher publisher;
ReplicationDatabase publicationDb;

// Create a connection to the server using Windows Authentication.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the server acting as the Distributor 
    // and local Publisher.
    conn.Connect();

    // Define the distribution database at the Distributor,
    // but do not create it now.
    distributionDb = new DistributionDatabase(distributionDbName, conn);
    distributionDb.MaxDistributionRetention = 96;
    distributionDb.HistoryRetention = 120;

    // Set the Distributor properties and install the Distributor.
    // This also creates the specified distribution database.
    distributor = new ReplicationServer(conn);
    distributor.InstallDistributor((string)null, distributionDb);

    // Set the Publisher properties and install the Publisher.
    publisher = new DistributionPublisher(publisherName, conn);
    publisher.DistributionDatabase = distributionDb.Name;
    publisher.WorkingDirectory = @"\\" + publisherName + @"\repldata";
    publisher.PublisherSecurity.WindowsAuthentication = true;
    publisher.Create();

    // Enable AdventureWorks2022 as a publication database.
    publicationDb = new ReplicationDatabase(publicationDbName, conn);

    publicationDb.EnabledTransPublishing = true;
    publicationDb.EnabledMergePublishing = true;
}
catch (Exception ex)
{
    // Implement appropriate error handling here.
    throw new ApplicationException("An error occurred when installing distribution and publishing.", ex);
}
finally
{
    conn.Disconnect();
}
' Set the server and database names
Dim distributionDbName As String = "distribution"
Dim publisherName As String = publisherInstance
Dim publicationDbName As String = "AdventureWorks2022"

Dim distributionDb As DistributionDatabase
Dim distributor As ReplicationServer
Dim publisher As DistributionPublisher
Dim publicationDb As ReplicationDatabase

' Create a connection to the server using Windows Authentication.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the server acting as the Distributor 
    ' and local Publisher.
    conn.Connect()

    ' Define the distribution database at the Distributor,
    ' but do not create it now.
    distributionDb = New DistributionDatabase(distributionDbName, conn)
    distributionDb.MaxDistributionRetention = 96
    distributionDb.HistoryRetention = 120

    ' Set the Distributor properties and install the Distributor.
    ' This also creates the specified distribution database.
    distributor = New ReplicationServer(conn)
    distributor.InstallDistributor((CType(Nothing, String)), distributionDb)

    ' Set the Publisher properties and install the Publisher.
    publisher = New DistributionPublisher(publisherName, conn)
    publisher.DistributionDatabase = distributionDb.Name
    publisher.WorkingDirectory = "\\" + publisherName + "\repldata"
    publisher.PublisherSecurity.WindowsAuthentication = True
    publisher.Create()

    ' Enable AdventureWorks2022 as a publication database.
    publicationDb = New ReplicationDatabase(publicationDbName, conn)

    publicationDb.EnabledTransPublishing = True
    publicationDb.EnabledMergePublishing = True

Catch ex As Exception
    ' Implement appropriate error handling here.
    Throw New ApplicationException("An error occurred when installing distribution and publishing.", ex)

Finally
    conn.Disconnect()

End Try