Conceitos de objetos de gerenciamento de replicação
Aplica-se a:SQL ServerAzure SQL Managed Instance
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 nas seções a seguir descrevem como você pode usar o RMO para controlar programaticamente as tarefas de replicação:
Configurar de 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.
Subscrever 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 as configurações de segurança.
Sincronizar assinaturas (replicação)
Os tópicos desta seção mostram como sincronizar assinaturas.
monitoramento de replicação
Os tópicos desta seção mostram como monitorar programaticamente uma topologia de replicação.
Introdução à Programação RMO
O RMO foi projetado para programar todos os aspetos da replicação do SQL Server. O namespace RMO é Microsoft.SqlServer.Replicatione é 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 programar os vários agentes de replicação (Snapshot Agent, Distribution Agent e Merge Agent). Suas classes podem ser acessadas a partir do RMO para sincronizar assinaturas. As classes no namespace Microsoft.SqlServer.Replication.BusinessLogicSupport, implementadas pelo assembly Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, são usadas para criar lógica de negócios personalizada para replicação de mesclagem. Esta assembleia é independente da RMO.
Implantando aplicativos baseados em RMO
O RMO depende dos componentes de replicação e dos componentes de conectividade de cliente incluídos em todas as versões do SQL Server, exceto o SQL Server Compact. Para implantar um aplicativo baseado em RMO, você deve instalar uma versão do SQL Server que inclua componentes de replicação e componentes de conectividade de cliente no computador em que 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 Microsoft Visual C#
Inicie o Visual Studio.
No menu
Arquivo, clique em NewProject. A caixa de diálogoNovo Projeto é exibida. Na caixa de diálogo
Tipos de Projeto, selecione Projetos do Visual C# . No painelModelos, selecione de Aplicativos do Windows . (Opcional) Em Nome, digite o nome do novo aplicativo.
Clique em OK para carregar o modelo do Visual C# Windows.
No menu
Projeto, selecione item Adicionar de Referência. A caixa de diálogo Adicionar de referência é exibida.Selecione os seguintes assemblies na lista na guia do .NET do
e clique em OK .Interface de programação .NET Microsoft.SqlServer.Replication
Microsoft.SqlServer.ConnectionInfo
Biblioteca do agente de replicação
Observação
Use a tecla CTRL para selecionar mais de um arquivo.
(Opcional) Repita o passo 6. Clique na guia Procurar, navegue até C:\Arquivos de Programas\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dlle clique em OK.
No menu Exibir, clique em Código.
No código, antes da instrução namespace, digite o seguinte usando 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
Inicie o Visual Studio.
No menu Arquivo, selecione Novo Projeto. A caixa de diálogo New Project é exibida.
No painel Tipos de projeto, selecione Visual Basic. No painel Modelos, selecione Windows Application.
(Opcional) Na caixa Nome, digite o nome do novo aplicativo.
Clique em OK para carregar o modelo do Windows do Visual Basic.
No menu Project, selecione Adicionar referência. A caixa de diálogo Adicionar de referência é exibida.
Selecione os seguintes assemblies na lista na guia do .NET do
e clique em OK .Interface de programação .NET Microsoft.SqlServer.Replication
Microsoft.SqlServer.ConnectionInfo
Biblioteca do agente de replicação
Observação
Use a tecla CTRL para selecionar mais de um arquivo.
(Opcional) Repita o passo 6. Clique na guia Procurar, navegue até C:\Arquivos de Programas\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dlle clique em OK.
No menu Exibir, clique em Código.
No código, antes de quaisquer declarações, digite o seguinte Importa instruções 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-se 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 classe ServerConnection. Essa conexão com o servidor é feita independentemente de quaisquer objetos de programação RMO. Em seguida, ele é passado para o objeto RMO durante a criação da instância ou por atribuição à propriedade P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext
do objeto. Dessa maneira, um objeto de programação RMO e as instâncias do 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 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 ServerConnection.
Uma conexão com cada instância do SQL Server deve ter seu próprio objeto ServerConnection.
O objeto ServerConnection é atribuído à propriedade
P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext
do objeto de programação RMO que está sendo criado ou acessado no servidor.O método Connect abre a conexão com o servidor. Esse método deve ser chamado antes de chamar quaisquer métodos que acessam o servidor em qualquer objeto de programação RMO usando a conexão.
Como o RMO e o SQL Server Management Objects (SMO) usam a classe ServerConnection 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-se a uma instância do SQL Server.
Todas as informações de autenticação para fazer a conexão e fazer logon com êxito 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 e Login falsos e Password deve ser definido como um logon e senha válidos do SQL Server. As credenciais de segurança devem ser sempre armazenadas e tratadas de forma segura e fornecidas em tempo de execução sempre que possível.
Para aplicativos multithreaded, um objeto ServerConnection separado deve 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 de RMO
As propriedades dos objetos de programação RMO representam as propriedades desses objetos de replicação no servidor. Ao criar novos objetos de replicação no servidor, as propriedades do RMO são usadas para definir esses objetos. Para objetos existentes, as propriedades RMO representam as propriedades do objeto existente, que podem ser modificadas somente para propriedades graváveis ou configuráveis. As propriedades podem ser definidas em novos objetos ou objetos existentes.
Definindo propriedades para novos objetos de replicação
Ao criar um novo objeto de replicação no servidor, você deve 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 Configurarde publicação e distribuição .
Definindo propriedades para objetos de replicação existentes
Para objetos de replicação que existem no servidor, dependendo do objeto, o RMO pode oferecer suporte à capacidade de alterar algumas ou todas as suas propriedades. Apenas as propriedades graváveis ou configuráveis podem ser alteradas. Antes que as propriedades possam ser alteradas, o Load ou o método M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties
devem ser chamados para obter as propriedades atuais do servidor. Chamar esses métodos indica que um objeto existente está sendo modificado.
Por padrão, ao alterar as propriedades do objeto, o RMO confirma essas alterações no servidor com base no modo de execução do ServerConnection que está sendo usado. O método P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject
pode ser usado para verificar se um objeto existe no servidor antes de tentar recuperar ou alterar suas propriedades. Para obter mais informações sobre como alterar as propriedades de um objeto de replicação, consulte Exibir e modificar 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 método Refresh do objeto RMO pode ser chamado para atualizar as propriedades com base no estado atual do objeto no servidor.
Alterações de propriedade de cache
Quando a propriedade SqlExecutionModes é definida como CaptureSql todas as 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 armazenar em cache as alterações de propriedade e confirmá-las juntas em um único lote usando o método M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges
do objeto. Para armazenar em cache alterações de propriedade, a propriedade P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges
do objeto deve ser definida como true. Ao armazenar em cache alterações de propriedade no RMO, o objeto ServerConnection ainda controla quando as alterações são enviadas ao servidor. Para obter mais informações sobre como armazenar em cache alterações de propriedade para um objeto de replicação, consulte Exibir e modificar propriedades do distribuidor e do publicador.
Importante
Embora a classe ServerConnection ofereça suporte à declaração de transações explícitas ao definir propriedades, essas transações podem interferir com transações de replicação interna, podem produzir resultados imprevistos e não devem ser usadas com RMO.
Ativando o suporte TLS 1.2 para componentes RMO
O suporte TLS1.2 para componentes RMO no Windows 2012 e inferior pode ser habilitado instalando a atualização KB 3140245e criando as chaves do Registro, conforme mencionado no artigo. No Windows 2012 R2 e versões posteriores, apenas as chaves do Registro, conforme mencionado 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é que sejam 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();
}