Compartilhar via


Conceitos de objetos de gerenciamento de replicação

O RMO (Replication Management Objects) é um assembly de código gerenciado que encapsula funcionalidades de replicação para o SQL Server. O RMO é implementado pelo namespace Microsoft.SqlServer.Replication.

Os tópicos das seções a seguir descrevem como você pode usar o RMO para controlar as tarefas de replicação de forma programática.

Configurar Distribuição
Os tópicos desta seção mostram como usar o RMO para configurar a publicação e a distribuição.

Criar uma publicação
Os tópicos desta seção mostram como usar o RMO para criar, excluir e modificar publicações e artigos.

Assinar publicações
Os tópicos desta seção mostram como usar o RMO para criar, excluir e modificar assinaturas.

Proteger uma topologia de replicação
Os tópicos desta seção mostram como usar o RMO para exibir e modificar configurações de segurança.

Sincronizar assinaturas (Replicação)
Os tópicos desta seção mostram como sincronizar assinaturas.

Monitorando a Replicação
Os tópicos desta seção mostram como monitorar uma topologia de replicação programaticamente.

Introdução à programação RMO

O RMO foi projetado para programar todos os aspectos da replicação do SQL Server. O namespace RMO é Microsoft.SqlServer.Replication, e é implementado pelo Microsoft.SqlServer.Rmo.dll, que é um assembly do Microsoft .NET Framework. O assembly Microsoft.SqlServer.Replication.dll, que também pertence ao namespace Microsoft.SqlServer.Replication, implementa uma interface de código gerenciado para a programação de vários agentes de replicação (Snapshot Agent, Distribution Agent e Merge Agent). Suas classes podem ser acessadas do RMO para a sincronização de assinaturas. As classes do namespace Microsoft.SqlServer.Replication.BusinessLogicSupport, implementadas pelo assembly Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, são usadas na criação de lógica de negócios personalizada para replicação de mesclagem. Esse assembly é independente do RMO.

Implantando aplicativos baseados em RMO

O RMO depende dos componentes de replicação e dos componentes de conectividade do cliente incluídos em todas as versões do SQL Server, exceto o SQL Server Compact. Para implantar um aplicativo baseado no RMO, você deve instalar uma versão do SQL Server que inclua componentes de replicação e componentes de conectividade do cliente no computador no qual o aplicativo será executado.

Introdução ao RMO

Esta seção descreve como iniciar um projeto RMO simples usando o Microsoft Visual Studio.

Para criar um novo projeto do Microsoft Visual C#

  1. Inicie o Visual Studio.

  2. No menu Arquivo , clique em NovoProjeto. A caixa de diálogo Novo projeto é exibida.

  3. Na caixa de diálogo Tipos de Projeto, selecione Projetos do Visual C#. No painel Modelos, selecione Aplicativos do Windows.

  4. (Opcional) Em Nome, digite o nome do novo aplicativo.

  5. Clique em OK para carregar o modelo do Windows do Visual C#.

  6. No menu Projeto, selecione o item Adicionar Referência. A caixa de diálogo Adicionar Referência é exibida.

  7. Selecione os assemblies a seguir na lista da guia .NET e clique em OK.

    • Interface de programação .NET Microsoft.SqlServer.Replication

    • Microsoft.SqlServer.ConnectionInfo

    • Biblioteca de agentes de replicação

    Observação

    Use a tecla CTRL para selecionar mais de um arquivo.

  8. (Opcional) Repita a etapa 6. Clique na guia Procurar , navegue até C:\Program Files\Microsoft SQL Server\120\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dlle clique em OK.

  9. No menu Exibir , clique em Código.

  10. No código, antes da instrução namespace, digite as seguintes using instruções para qualificar os tipos nos namespaces RMO:

    // These namespaces are required.  
    using Microsoft.SqlServer.Replication;  
    using Microsoft.SqlServer.Management.Common;  
    // This namespace is only used when creating custom business  
    // logic for merge replication.  
    using Microsoft.SqlServer.Replication.BusinessLogicSupport;   
    

Para criar um novo projeto do Microsoft Visual Basic .NET

  1. Inicie o Visual Studio.

  2. No menu Arquivo, selecione Novo Projeto. A caixa de diálogo Novo Projeto aparecerá.

  3. No painel Tipos de Projeto, selecione Visual Basic. No painel Modelos, selecione Aplicativos do Windows.

  4. (Opcional) Na caixa Nome, digite o nome do novo aplicativo.

  5. Clique em OK para carregar o modelo do Windows do Visual Basic.

  6. No menu Projeto, selecione Adicionar Referência. A caixa de diálogo Adicionar Referência é exibida.

  7. Selecione os assemblies a seguir na lista da guia .NET e clique em OK.

    • Interface de programação .NET Microsoft.SqlServer.Replication

    • Microsoft.SqlServer.ConnectionInfo

    • Biblioteca de agentes de replicação

    Observação

    Use a tecla CTRL para selecionar mais de um arquivo.

  8. (Opcional) Repita a etapa 6. Clique na guia Procurar , navegue até C:\Program Files\Microsoft SQL Server\120\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dlle clique em OK.

  9. No menu Exibir , clique em Código.

  10. No código, antes de qualquer declaração, digite as instruções a seguir Imports para qualificar os tipos nos namespaces RMO.

    ' These namespaces are required.  
    Imports Microsoft.SqlServer.Replication  
    Imports Microsoft.SqlServer.Management.Common  
    ' This namespace is only used when creating custom business  
    ' logic for merge replication.  
    Imports Microsoft.SqlServer.Replication.BusinessLogicSupport   
    

Conectando a um servidor de replicação

Os objetos de programação RMO exigem que uma conexão com uma instância do SQL Server seja feita usando uma instância da ServerConnection classe. Essa conexão ao servidor é feita de forma independente de qualquer objeto da programação RMO. Em seguida, ele é passado para o objeto RMO durante a criação da instância ou por atribuição à propriedade ConnectionContext do objeto. Dessa maneira, um objeto de programação de RMO e as instâncias de objeto de conexão podem ser criados e gerenciados separadamente, e um único objeto de conexão pode ser reutilizado com vários objetos de programação de RMO. As regras a seguir se aplicam a conexões com um servidor de replicação:

  • Todas as propriedades da conexão são definidas para um determinado objeto de ServerConnection.

  • Uma conexão com cada instância do SQL Server deve ter seu próprio ServerConnection objeto.

  • O objeto ServerConnection é atribuído à propriedade ConnectionContext do objeto da programação RMO criado ou acessado no servidor.

  • O método Connect abre a conexão ao servidor. Esse método deve ser chamado antes da chamada a qualquer método que acesse o servidor em qualquer objeto da programação RMO que usa a conexão.

  • Como o RMO e o SQL Server Management Objects (SMO) usam a ServerConnection classe para conexões com o SQL Server, a mesma conexão pode ser usada por objetos RMO e SMO. Para obter mais informações, consulte Conectando a uma instância do SQL Server.

  • Todas as informações sobre autenticação para estabelecer com êxito a conexão e o logon no servidor são fornecidas no objeto ServerConnection.

  • A Autenticação do Windows é o padrão. Para usar a false Autenticação do SQL Server, LoginSecure deve ser definido como e Login deve Password ser definido como um logon e senha válidos do SQL Server. As credenciais de segurança sempre deverão ser armazenadas e manipuladas com segurança, além de serem fornecidas em tempo de execução quando possível.

  • Para aplicativos multithreaded, um objeto ServerConnection separado deveria ser usado em cada thread.

Chame o método Disconnect no objeto ServerConnection para fechar conexões de servidor ativas usadas por objetos RMO.

Definindo propriedades RMO

As propriedades de objetos da programação RMO representam as propriedades desses objetos de replicação no servidor. Durante a criação de novos objetos de replicação no servidor, serão usadas propriedades RMO em sua definição. Para objetos existentes, as propriedades RMO representam as propriedades do objeto existente, que só poderão ser modificadas para as propriedades passíveis de escrita ou configuração. As propriedades só podem ser definidas em objetos novos ou em objetos existentes.

Definindo propriedades para objetos de replicação novos

Ao criar um novo objeto de replicação no servidor, você deve especificar todas as propriedades necessárias antes de chamar o Create método do objeto. Para obter mais informações sobre como definir propriedades para um novo objeto de replicação, consulte Configurar a publicação e a distribuição.

Definindo propriedades para objetos de replicação existentes

Para objetos de replicação existentes no servidor, dependendo do objeto, o RMO poderia oferecer suporte à capacidade de alterar algumas ou todas as suas propriedades. Somente as propriedades passíveis de escrita ou configuração podem ser alteradas. Antes que as propriedades possam ser alteradas, o método ou o LoadLoadProperties método deve ser chamado para obter as propriedades atuais do servidor. Chamar esses métodos indica que um objeto existente está sendo modificado.

Por padrão, ao alterar propriedades do objeto, o RMO confirma essas alterações no servidor com base no modo de execução do ServerConnection usado. O método IsExistingObject pode ser usado para verificar a existência de um objeto no servidor antes da tentativa de recuperação ou de alteração de suas propriedades. Para obter mais informações sobre como alterar as propriedades de um objeto de replicação, consulte Exibir e modificar as propriedades do Distribuidor e do Publicador.

Observação

Quando vários clientes RMO ou várias instâncias de um objeto de programação RMO estão acessando o mesmo objeto de replicação no servidor, o Refresh método do objeto RMO pode ser chamado para atualizar as propriedades com base no estado atual do objeto no servidor.

Armazenando alterações de propriedade em cache

Quando a propriedade é definida como SqlExecutionModes todas as CaptureSql instruções Transact-SQL geradas pelo RMO são capturadas para que possam ser executadas manualmente em um único lote usando um dos métodos de execução. O RMO permite que você armazene alterações de propriedade em cache e confirme-as em um único lote usando o método CommitPropertyChanges do objeto. Para armazenar em cache as alterações de propriedade, a CachePropertyChanges propriedade do objeto deve ser definida como true. Durante o armazenamento das alterações de propriedade em cache no RMO, o objeto ServerConnection ainda controlará o momento em que as alterações serão enviadas ao servidor. Para obter mais informações sobre como armazenar em cache as alterações de propriedade de um objeto de replicação, consulte Exibir e modificar as propriedades do Distribuidor e do Publicador.

Importante

Embora a classe ServerConnection ofereça suporte à declaração explícita de transações durante a configuração de propriedades, tais transações poderão interferir em transações internas de replicação, poderão gerar resultados inesperados e não deverão ser usadas com RMO.

Exemplo

Este exemplo demonstra o cache de alterações de propriedade. As alterações feitas nos atributos de uma publicação transacional são armazenadas em cache até serem explicitamente enviadas ao servidor.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";

TransPublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new TransPublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    // Explicitly enable caching of property changes on this object.
    publication.CachePropertyChanges = true;

    // If we can't get the properties for this publication, 
    // throw an application exception.
    if (publication.LoadProperties())
    {
        // Enable support for push subscriptions and disable support 
        // for pull subscriptions.
        if ((publication.Attributes & PublicationAttributes.AllowPull) != 0)
        {
            publication.Attributes ^= PublicationAttributes.AllowPull;
        }
        if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
        {
            publication.Attributes |= PublicationAttributes.AllowPush;
        }

        // Send changes to the server.
        publication.CommitPropertyChanges();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "The publication property could not be changed.", ex);
}
finally
{
    conn.Disconnect();
}

Consulte Também

Conceitos de procedimentos armazenados do sistema de replicação
Conceitos de programação da replicação