Compartilhar via


Configurar a publicação e a distribuição

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

Este tópico descreve como configurar a publicação e a distribuição no SQL Server usando o SQL Server Management Studio, o Transact-SQL ou o Replication Management Objects (RMO).

Antes de começar

Segurança

Confira mais informações em Exibir e modificar as configurações de replicação de segurança.

Como usar o SQL Server Management Studio.

Configure a distribuição, usando o Assistente para Novas Publicações ou o Assistente para Configurar a Distribuição. Depois que o Distribuidor estiver configurado, exiba e modifique as propriedades na caixa de diálogo Propriedades do Distribuidor – <Distribuidor>. Use o Assistente para Configurar Distribuição se você desejar configurar um Distribuidor para que os membros de funções de banco de dados fixas db_owner possam criar publicações ou para configurar um Distribuidor remoto que não seja um Publicador.

Para configurar a distribuição

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

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

  3. Siga o Assistente para Configurar Distribuição para:

  • Selecionar um Distribuidor. Para usar um Distribuidor local, selecione ServerName atuará como seu próprio Distribuidor; o SQL Server criará um banco de dados de distribuição e um log. Para usar um Distribuidor remoto, selecione Use o seguinte servidor como Distribuidore, em seguida, selecione um servidor. O servidor já deve ser configurado como um Distribuidor e o Publicador deve ser habilitado a usar o Distribuidor. Para obter mais informações, consulte Habilitar um Publicador Remoto em um Distribuidor (SQL Server Management Studio).

    Se você selecionar um Distribuidor remoto, você deverá inserir uma senha na página Senha Administrativa para conexões feitas do Publicador ao Distribuidor. Esta senha deve corresponder à senha especificada quando o Publicador foi habilitado no Distribuidor remoto.

  • Especifique uma pasta de instantâneo de raiz (para um Distribuidor local). A pasta de instantâneo é simplesmente um diretório que você designou como um compartilhamento, agentes que leem essa pasta e gravam nela devem ter permissões suficientes para acessá-la. Cada Publicador que usa esse Distribuidor cria uma pasta na pasta raiz, e cada publicação cria pastas na pasta Publicador em que armazenará arquivos de instantâneos. Para obter mais informações sobre como proteger a pasta adequadamente, consulte Proteger a Pasta de Instantâneos.

  • Especifique o banco de dados de distribuição (para um Distribuidor local). O banco de dados de distribuição armazena metadados e dados de histórico para todos os tipos de replicação e transações para replicação transacional.

  • Além disso, permite que outros Publicadores usem o Distribuidor. Se outros Publicadores estiverem habilitados para usar o Distribuidor, você deverá inserir uma senha na página Senha do Distribuidor para conexões feitas desses Publicadores para os Distribuidores.

  • Além disso, faça o script das definições de configuração. Para obter mais informações, consulte Scripting Replication.

Usando o Transact-SQL

Publicação e distribuição de replicação podem ser configuradas de forma programada, usando-se procedimentos de replicação armazenados.

Para configurar publicação usando um distribuidor local

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

  • Se o valor distribution db installed no resultado definido for 0, execute sp_adddistributor (Transact-SQL) no Distribuidor no banco de dados mestre. Especifique o nome do banco de dados de distribuição para @database. Opcionalmente, você pode especificar o período máximo de retenção transacional para @max_distretention e o período de retenção de histórico para @history_retention. Se um banco de dados novo estiver sendo criado, especifique os parâmetros de propriedade de banco de dados desejados.

  1. No Distribuidor, que também é o Publicador, execute sp_adddistpublisher (Transact-SQL), especificando o compartilhamento UNC que será usado como pasta de instantâneo padrão para @working_directory.

    Para um distribuidor na Instância Gerenciada de SQL, use uma conta de armazenamento do Azure para @working_directory e a chave de acesso de armazenamento para @storage_connection_string.

  2. No Editor, execute sp_replicationdboption (Transact-SQL). Especifique o banco de dados que está sendo publicado para @dbname, o tipo de replicação para @optname, e o valor de true para @value.

Para configurar publicação usando um distribuidor remoto

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

    • Se o valor installed no resultado definido for 0, execute sp_adddistributor (Transact-SQL) no Distribuidor no banco de dados mestre. Especifique uma senha forte para @password. Essa senha para a conta distributor_admin será usada pelo Publicador ao se conectar ao Distribuidor.

    • Se o valor distribution db installed no resultado definido for 0, execute sp_adddistributor (Transact-SQL) no Distribuidor no banco de dados mestre. Especifique o nome do banco de dados de distribuição para @database. Opcionalmente, você pode especificar o período máximo de retenção transacional para @max_distretention e o período de retenção de histórico para @history_retention. Se um banco de dados novo estiver sendo criado, especifique os parâmetros de propriedade de banco de dados desejados.

  2. No Distribuidor, execute sp_adddistpublisher (Transact-SQL), especificando o compartilhamento UNC que será usado como pasta de instantâneo padrão para @working_directory. Se o Distribuidor usar a autenticação do SQL Server ao se conectar ao Publicador, você também deverá especificar um valor de 0 para @security_mode e as informações de logon do Microsoft SQL Server para @login e @password.

    Para um distribuidor na Instância Gerenciada de SQL, use uma conta de armazenamento do Azure para @working_directory e a chave de acesso de armazenamento para @storage_connection_string.

  3. No Editor do banco de dados mestre, execute sp_adddistributor (Transact-SQL). Especifique a senha forte usada na etapa 1 para @password. Essa senha será usada pelo Publicador ao se conectar ao Distribuidor.

  4. No Editor, execute sp_replicationdboption (Transact-SQL). Especifique o banco de dados que está sendo publicado para @dbname, o tipo de replicação para @optname e o valor de verdadeiro para @value.

Exemplo (Transact-SQL)

O exemplo a seguir mostra como configurar publicação e distribuição programaticamente. Nesse exemplo, o nome do servidor que está sendo configurado como publicador e um distribuidor local são fornecidos usando variáveis de script. Publicação e distribuição de replicação podem ser configuradas de forma programada, usando-se procedimentos de replicação armazenados.

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

Usando o RMO (Replication Management Objects)

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

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

  2. Criar uma instância da classe ReplicationServer. Passe o ServerConnection da etapa 1.

  3. Criar uma instância da classe DistributionDatabase.

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

  5. Instale o Distribuidor chamando o método InstallDistributor . Passe o objeto DistributionDatabase da etapa 3.

  6. Criar uma instância da classe DistributionPublisher.

  7. Defina as seguintes propriedades de DistributionPublisher:

  1. Chame o método Create .

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

  1. Crie uma conexão ao servidor do Distribuidor remoto usando a classe ServerConnection .

  2. Criar uma instância da classe ReplicationServer. Passe o ServerConnection da etapa 1.

  3. Criar uma instância da classe DistributionDatabase.

  4. Defina a propriedade Name ao nome do banco de dados e defina a propriedade ConnectionContext ao ServerConnection da etapa 1.

  5. Instale o Distribuidor chamando o método InstallDistributor . Especifique uma senha segura (usada pelo Publicador ao se conectar ao Distribuidor remoto) e o objeto DistributionDatabase da etapa 3. Para obter mais informações, consulte Proteger o Distribuidor.

    Importante

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

  6. Criar uma instância da classe DistributionPublisher.

  7. Defina as seguintes propriedades de DistributionPublisher:

  1. Chame o método Create .

  2. Crie uma conexão com o servidor do Publicador local usando a classe ServerConnection .

  3. Criar uma instância da classe ReplicationServer. Passe a ServerConnection da etapa 9.

  4. Chame o método InstallDistributor . Passe o nome do Distribuidor remoto e a senha para o Distribuidor remoto especificados na etapa 5.

Importante

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

Exemplo (RMO)

Você pode configurar a replicação da publicação e da distribuição de forma programada usando o RMO (Replication Management Objects).

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