Configurar Publicação e Distribuição

Aplica-se a: SQL ServerAzure SQL Managed Instance

Este tópico descreve como configurar a publicação e distribuição no SQL Server utilizando o SQL Server Management Studio, Transact-SQL ou Objectos de Gestão de Replicação (RMO).

Segurança

Para obter mais informações, consulte Exibir e modificar configurações de segurança de replicação.

Usando o SQL Server Management Studio

Configure a distribuição usando o Assistente de Nova Publicação ou o Assistente de Configuração de Distribuição. Depois de configurar o Distribuidor, visualize e modifique as propriedades na caixa de diálogo Propriedades do Distribuidor - <Distribuidor> . Use o Assistente de Configurar Distribuição se quiser configurar um Distribuidor para que membros dos db_owner papéis fixos da base de dados possam criar publicações, ou porque quer configurar um Distribuidor remoto que não seja um Publisher.

Para configurar a distribuição

  1. No Microsoft SQL Server Management Studio, ligue-se ao servidor que será o Distribuidor (em muitos casos, o Publisher e o Distribuidor são o mesmo servidor) e depois expanda o nó do servidor.

  2. Clique com o botão direito na pasta Replicação e depois clique em Configurar Distribuição.

  3. Siga o Assistente de Configuração de Distribuição para:

  • Escolha um distribuidor. Para usar um Distribuidor local, selecione o Nome do Servidor que atuará como seu próprio Distribuidor; O SQL Server criará uma base de dados de distribuição e registo. Para usar um Distribuidor remoto, selecione Usar o seguinte servidor como Distribuidor e depois selecione um servidor. O servidor deve já estar configurado como Distribuidor, e o Publisher deve estar habilitado para usar o Distribuidor. Para mais informações, consulte Habilitar um Publisher Remoto num Distribuidor (SQL Server Management Studio).

    Se selecionar um Distribuidor remoto, deve introduzir uma palavra-passe na página de Palavra-passe Administrativa para as ligações feitas do Publisher ao Distribuidor. Esta palavra-passe deve corresponder à especificada quando o Publisher foi ativado no Distribuidor remoto.

  • Especifique uma pasta de snapshot raiz (para um distribuidor local). A pasta snapshot é simplesmente um diretório que designou como partilha; Os agentes que leem e escrevem nesta pasta devem ter permissões suficientes para a aceder. Cada Publisher que utiliza este Distribuidor cria uma pasta sob a pasta raiz, e cada publicação cria pastas sob a pasta Publisher onde armazenar ficheiros snapshot. Para mais informações sobre como proteger adequadamente a pasta, consulte Proteger a Pasta de Snapshot.

  • Especifique a base de dados de distribuição (para um distribuidor local). A base de dados de distribuição armazena metadados e dados históricos para todos os tipos de replicação e transações para replicação transacional.

  • Opcionalmente, permitir que outros Editores usem o Distribuidor. Se outros Editores estiverem autorizados a usar o Distribuidor, deve introduzir uma palavra-passe na página de Palavra-passe do Distribuidor para as ligações feitas entre esses Editores e o Distribuidor.

  • Opcionalmente, definições de configuração de scripts. Para obter mais informações, consulte Scripting Replication.

Usando Transact-SQL

A publicação e distribuição de replicação podem ser configuradas programaticamente usando procedimentos armazenados de replicação.

Para configurar a publicação usando um distribuidor local

  1. Execute sp_get_distributor (Transact-SQL) para determinar se o servidor já está configurado como Distribuidor.
  • Se o valor de installed no conjunto de resultados for 0, execute sp_adddistributor (Transact-SQL) no Distribuidor na base de dados mestre.

  • Se o valor de distribution db installed no conjunto de resultados for 0, execute sp_adddistributiondb (Transact-SQL) no Distribuidor na base de dados mestre. Especifique o nome da base de dados de distribuição para @database. Opcionalmente, pode especificar o período máximo de retenção transacional para @max_distretention e o período de retenção do histórico para @history_retention. Se estiver a ser criada uma nova base de dados, especifique os parâmetros desejados da propriedade da base de dados.

  1. No Distribuidor, que é também o Publisher, execute sp_adddistpublisher (Transact-SQL), especificando a partilha UNC que será usada como pasta de snapshots padrão para @working_directory.

    Para um distribuidor no SQL Managed Instance, utilize uma conta de armazenamento do Azure para @working_directory e a chave de acesso ao armazenamento para @storage_connection_string.

  2. No Publicador, execute sp_replicationdboption (Transact-SQL). Especifique a base de dados publicada para @dbname, o tipo de replicação para @optname, e um valor de true para @value.

Para configurar a publicação usando um distribuidor remoto

  1. Execute sp_get_distributor (Transact-SQL) para determinar se o servidor já está configurado como Distribuidor.

    • Se o valor de installed no conjunto de resultados for 0, execute sp_adddistributor (Transact-SQL) no Distribuidor na base de dados mestre. Especifique uma palavra-passe forte para @password. Esta palavra-passe da distributor_admin conta será usada pelo Publisher ao ligar-se ao Distribuidor.

    • Se o valor de distribution db installed no conjunto de resultados for 0, execute sp_adddistributiondb (Transact-SQL) no Distribuidor na base de dados mestre. Especifique o nome da base de dados de distribuição para @database. Opcionalmente, pode especificar o período máximo de retenção transacional para @max_distretention e o período de retenção do histórico para @history_retention. Se estiver a ser criada uma nova base de dados, especifique os parâmetros desejados da propriedade da base de dados.

  2. No Distribuidor, execute sp_adddistpublisher (Transact-SQL), especificando a partilha UNC que será usada como pasta de snapshots predefinida para @working_directory. Se o Distribuidor usar Autenticação SQL Server ao ligar-se ao Publisher, deve também especificar um valor de 0 para @security_mode e a informação de login do Microsoft SQL Server para @login e @password.

    Para um distribuidor no SQL Managed Instance, utilize uma conta de armazenamento do Azure para @working_directory e a chave de acesso ao armazenamento para @storage_connection_string.

  3. No Publisher da base de dados principal, execute sp_adddistributor (Transact-SQL). Especifique a palavra-passe forte usada no passo 1 para @password. Esta palavra-passe será usada pelo Publisher ao ligar-se ao Distribuidor.

  4. No Publicador, execute sp_replicationdboption (Transact-SQL). Especifique a base de dados a publicar para @dbname, o tipo de replicação para @optname e o valor true para @value.

Exemplo (Transact-SQL)

O exemplo seguinte demonstra como configurar a publicação e a distribuição programáticamente. Neste exemplo, o nome do servidor que está a ser configurado como editor e distribuidor local é fornecido usando variáveis de scripting. A publicação e distribuição de replicação podem ser configuradas programaticamente usando procedimentos armazenados de replicação.

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

Utilização de Objetos de Gestão de Replicação (RMO)

Para configurar a publicação e distribuição num único servidor

  1. Crie uma ligação ao servidor usando a ServerConnection classe.

  2. Crie uma instância da ReplicationServer classe. Passe o ServerConnection do passo 1.

  3. Crie uma instância da DistributionDatabase classe.

  4. Defina a Name propriedade para o nome da base de dados e defina a ConnectionContext propriedade para o ServerConnection do passo 1.

  5. Instale o distribuidor chamando o InstallDistributor método. Passe o objeto DistributionDatabase do passo 3.

  6. Crie uma instância da DistributionPublisher classe.

  7. Defina as seguintes propriedades de DistributionPublisher:

  1. Chame o método Create.

Para configurar a publicação e distribuição usando um Distribuidor remoto

  1. Crie uma ligação ao servidor Distribuidor remoto usando a ServerConnection classe.

  2. Crie uma instância da ReplicationServer classe. Passe o ServerConnection do passo 1.

  3. Crie uma instância da DistributionDatabase classe.

  4. Defina a Name propriedade para o nome da base de dados e defina a ConnectionContext propriedade para o ServerConnection a partir do passo 1.

  5. Instale o distribuidor chamando o InstallDistributor método. Especifique uma palavra-passe segura (usada pelo Publisher ao ligar ao Distribuidor remoto) e o DistributionDatabase objeto do passo 3. Para mais informações, consulte Proteger o Distribuidor.

    Importante

    Quando possível, solicite que os usuários insiram credenciais de segurança em tempo de execução. Se precisar de armazenar credenciais, utilize os serviços criptográficos fornecidos pelo Microsoft Windows .NET Framework.

  6. Crie uma instância da DistributionPublisher classe.

  7. Defina as seguintes propriedades de DistributionPublisher:

  1. Chame o método Create.

  2. Crie uma ligação ao servidor local do Publisher usando a ServerConnection classe.

  3. Crie uma instância da ReplicationServer classe. Passe o ServerConnection do passo 9.

  4. Chame o método InstallDistributor. Passe o nome do Distribuidor remoto e a palavra-passe do Distribuidor remoto especificada no passo 5.

Importante

Quando possível, solicite que os usuários insiram credenciais de segurança em tempo de execução. Se tiver de armazenar credenciais, utilize os serviços criptográficos fornecidos pelo Windows .NET Framework.

Exemplo (RMO)

Pode configurar programaticamente a publicação e distribuição de replicação usando os Objectos de Gestão de Replicação (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