Compartir a través de


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

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

Antes de empezar

Seguridad

Para obtener más información, consulte Implementación de replicación segura.

Uso de SQL Server Management Studio

Configure la distribución mediante el Asistente para nueva publicación o el Asistente para configurar distribución. Una vez configurado el distribuidor, vea y modifique las propiedades en el cuadro de diálogo Propiedades del distribuidor : <distribuidor> . Use el Asistente para configurar la distribución si desea configurar un distribuidor para que los miembros de los roles fijos de base de datos de db_owner puedan crear publicaciones o porque desea configurar un distribuidor remoto que no sea un publicador.

Para configurar la distribución

  1. En Microsoft SQL Server Management Studio, conéctese al servidor que será el distribuidor (en muchos casos, el publicador y el distribuidor son el mismo servidor) y, a continuación, expanda el nodo de servidor.

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

  3. Siga el Asistente de Configuración de Distribución para:

    • Seleccione un distribuidor. Para usar un distribuidor local, seleccione "<ServerName>" como su propio distribuidor; SQL Server creará una base de datos de distribución y un registro. Para usar un distribuidor remoto, seleccione Usar el siguiente servidor como distribuidor y, 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 obtener 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 contraseña especificada cuando el publicador se ha habilitado 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 que ha designado como recurso compartido; Los agentes que leen y escriben en esta carpeta deben tener permisos suficientes para acceder a ella. Cada publicador que usa este distribuidor crea una carpeta en la carpeta raíz y cada publicación crea carpetas en la carpeta Publisher en la que se almacenan los archivos de instantáneas. Para obtener más información sobre cómo proteger la carpeta correctamente, 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 los metadatos y los datos del historial de todos los tipos de replicación y transacciones para la replicación transaccional.

    • Opcionalmente, habilite a otros publicadores para que usen el distribuidor. Si otros publicadores están habilitados para usar el distribuidor, debe escribir una contraseña en la página Contraseña del distribuidor para las conexiones realizadas desde estos publicadores al distribuidor.

    • Opcionalmente, configurar los ajustes del script. Para más información, consulte Scripting de replicación.

Uso de Transact-SQL

La publicación y distribución de la replicación se pueden configurar programáticamente mediante 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 distribuidor.

    • Si el valor de instalado en el conjunto de resultados es 0, ejecute sp_adddistributor (Transact-SQL) en el Distribuidor de la base de datos maestra.

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

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

  3. En el publicador, ejecute sp_replicationdboption (Transact-SQL). Especifique la base de datos que se publica para @dbname, el tipo de replicación para @optname y un valor de 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 distribuidor.

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

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

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

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

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

Ejemplo (Transact-SQL)

En el ejemplo siguiente se muestra cómo configurar la publicación y la distribución mediante programación. En este ejemplo, el nombre del servidor que se configura como publicador y un distribuidor local se proporciona mediante variables de scripting. La publicación y distribución de replicación se pueden configurar de forma programática utilizando 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'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 

El uso de Replication Management Objects (RMO)

Para configurar la publicación y distribución en un solo servidor

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

  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 Name propiedad en el nombre de la base de datos y establezca la ConnectionContext propiedad en el ServerConnection del paso 1.

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

  6. Cree una instancia de la clase DistributionPublisher.

  7. Establezca las siguientes propiedades de DistributionPublisher:

  8. Llame al método Create.

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

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

  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 Name propiedad en el nombre de la base de datos y establezca la ConnectionContext propiedad en el ServerConnection del paso 1.

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

    Importante

    Cuando sea posible, pida a los usuarios que escriban credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales, use los servicios criptográficos proporcionados por Microsoft Windows .NET Framework.

  6. Cree una instancia de la clase DistributionPublisher.

  7. Establezca las siguientes propiedades de DistributionPublisher:

  8. Llame al método Create.

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

  10. Cree una instancia de la clase ReplicationServer. Pase el valor ServerConnection del paso 9.

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

    Importante

    Cuando sea posible, pida a los usuarios que escriban credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales, use los servicios criptográficos proporcionados por Windows .NET Framework.

Ejemplo (RMO)

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

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

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 AdventureWorks2012 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 occured 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 = "AdventureWorks2012"

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 AdventureWorks2012 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 occured when installing distribution and publishing.", ex)

Finally
    conn.Disconnect()

End Try

Véase también

Ver y modificar las propiedades del distribuidor y del publicador
Conceptos de procedimientos almacenados del sistema de replicación
Configurar distribución
Conceptos de objetos de gestión de replicación
Configurar la replicación para grupos de disponibilidad AlwaysOn (SQL Server)