Partilhar via


Replication Management Objects Concepts

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

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.

Subscribe to Publications
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:\Arquivos de Programas\Microsoft SQL Server\nnn\COM, selecione Microsoft.SqlServer.Replication.BusinessLogicSupport.dll e clique em OK.

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

  10. No código, antes da instrução do namespace, digite as seguintes instruções using 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 aparece.

  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:\Arquivos de Programas\Microsoft SQL Server\nnn\COM, selecione Microsoft.SqlServer.Replication.BusinessLogicSupport.dll e clique em OK.

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

  10. No código, antes de qualquer declaração, digite as instruções Imports a seguir para qualificar os tipos no namespace 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, ela é passada para o objeto RMO, durante a criação da instância ou pela atribuição à propriedade P:Microsoft.SqlServer.Replication.ReplicationObject.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 P:Microsoft.SqlServer.Replication.ReplicationObject.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 Autenticação do SQL Server, LoginSecure deve ser definido como false e Login e Password deve 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

Durante a criação de um novo objeto de replicação no servidor, é necessário especificar todas as propriedades necessárias antes de chamar o método Create 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 de alterar as propriedades, chame o método Load ou o método M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties 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 P:Microsoft.SqlServer.Replication.ReplicationObject.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 estiverem acessando o mesmo objeto de replicação no servidor, o método Refresh do objeto RMO poderá ser chamado para atualizar as propriedades de acordo com o estado atual do objeto no servidor.

Armazenando alterações de propriedade em cache

Quando a propriedade é definida como CaptureSql todas as SqlExecutionModes 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 M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges do objeto. Para armazenar as alterações de propriedade em cache, a propriedade P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges 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.

Habilitando o suporte do TLS 1.2 em componentes RMO

O suporte a TLS1.2 em componentes RMO no Windows 2012 e inferior pode ser habilitado com a instalação da atualização KB 3140245 e criação das chaves do Registro, conforme mencionado no artigo. No Windows 2012 R2 e versões posteriores, somente as chaves do Registro mencionadas no artigo acima precisam ser criadas.

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 = "AdventureWorks2022";

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();
}