Compartilhar via


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

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

Neste tópico

  • Antes de começar:

    Segurança

  • Para configurar publicação e distribuição, usando:

    SQL Server Management Studio

    Transact-SQL

    RMO (Replication Management Objects)

Antes de começar

Segurança

Para obter mais informações, consulte Implantação segura (Replicação).

Ícone de seta usado com o link Voltar ao Início[Início]

Usando 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, visualize 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 é 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, então, 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 '<Nome_do_Servidor>' agirá como seu próprio Distribuidor; o SQL Server criará um banco de dados e um log de distribuição 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 uma pasta de instantâneo.

    • 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 Replicação de script.

Ícone de seta usado com o link Voltar ao Início[Início]

Usando 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 de installed no conjunto de resultados for 0, execute sp_adddistributor (Transact-SQL) no Distribuidor no banco de dados mestre.

    • Se o valor de distribution db installed no conjunto de resultados for 0, execute sp_adddistributiondb (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, que também é o Publicador, execute sp_adddistpublisher (Transact-SQL), especificando o compartilhamento UNC que será usado como pasta padrão de instantâneo @working_directory.

  3. No Publicador, 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 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 de installed no conjunto de resultados 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 de distribution db installed no conjunto de resultados for 0, execute sp_adddistributiondb (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 padrão de instantâneo 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.

  3. No Publicador 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 Publicador, 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'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 

Ícone de seta usado com o link Voltar ao Início[Início]

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. Crie uma instância da classe ReplicationServer. Passe o ServerConnection da etapa 1.

  3. Crie 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. Crie uma instância da classe DistributionPublisher.

  7. Defina as seguintes propriedades de DistributionPublisher:

  8. 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. Crie uma instância da classe ReplicationServer. Passe o ServerConnection da etapa 1.

  3. Crie 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.

    Observação sobre segurançaObservação sobre segurança

    Quando possível, solicite aos usuários que 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 .NET Framework do Windows.

  6. Crie uma instância da classe DistributionPublisher.

  7. Defina as seguintes propriedades de DistributionPublisher:

  8. Chame o método Create.

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

  10. Crie uma instância da classe ReplicationServer. Passe o ServerConnection da etapa 9.

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

    Observação sobre segurançaObservação sobre segurança

    Quando possível, solicite aos usuários que 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 = "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

Ícone de seta usado com o link Voltar ao Início[Início]

Consulte também

Conceitos

Exibir e modificar propriedades de Publicador e Distribuidor

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

Conceitos dos procedimentos armazenados do sistema de replicação

Configurar a distribuição

Conceitos de Replication Management Objects

Configurar a replicação para grupos de disponibilidade AlwaysOn (SQL Server)