Concepten van replicatiebeheerobjecten
van toepassing op:SQL Server
Azure SQL Managed Instance
Replicatiebeheerobjecten (RMO) is een beheerde codeassembly die replicatiefuncties voor SQL Server inkapselt. RMO wordt geïmplementeerd door de Microsoft.SqlServer.Replication naamruimte.
In de onderwerpen in de volgende secties wordt beschreven hoe u RMO kunt gebruiken om replicatietaken programmatisch te beheren:
Distributie- configureren
Onderwerpen in deze sectie laten zien hoe u RMO gebruikt om publicatie en distributie te configureren.
een publicatie maken
Onderwerpen in deze sectie laten zien hoe u RMO kunt gebruiken om publicaties en artikelen te maken, te verwijderen en te wijzigen.
abonneren op publicaties
Onderwerpen in deze sectie laten zien hoe u RMO kunt gebruiken om abonnementen te maken, te verwijderen en te wijzigen.
een replicatietopologie beveiligen
Onderwerpen in deze sectie laten zien hoe u RMO gebruikt om beveiligingsinstellingen weer te geven en te wijzigen.
abonnementen (replicatie) synchroniseren
Onderwerpen in deze sectie laten zien hoe u abonnementen synchroniseert.
Replicatie bewaken
Onderwerpen in deze sectie laten zien hoe u programmatisch een replicatietopologie kunt bewaken.
Inleiding tot RMO-programmering
RMO is ontworpen voor het programmeren van alle aspecten van SQL Server-replicatie. De RMO-naamruimte is Microsoft.SqlServer.Replicationen wordt geïmplementeerd door de Microsoft.SqlServer.Rmo.dll, een Microsoft .NET Framework-assembly. De Microsoft.SqlServer.Replication.dll-assembly, die ook deel uitmaakt van de Microsoft.SqlServer.Replication-naamruimte, implementeert een beheerde code-interface voor het programmeren van de verschillende replicatieagents (Snapshot Agent, Distribution Agent en Merge Agent). De klassen zijn toegankelijk vanuit RMO om abonnementen te synchroniseren. Klassen in de Microsoft.SqlServer.Replication.BusinessLogicSupport naamruimte, geïmplementeerd door de Microsoft.SqlServer.Replication.BusinessLogicSupport.dll assembly, worden gebruikt om aangepaste bedrijfslogica te maken voor samenvoegreplicatie. Deze assembly is onafhankelijk van RMO.
Toepassingen implementeren op basis van RMO
RMO is afhankelijk van de replicatieonderdelen en clientconnectiviteitsonderdelen die zijn opgenomen in alle versies van SQL Server, behalve SQL Server Compact. Als u een toepassing wilt implementeren op basis van RMO, moet u een versie van SQL Server installeren die replicatieonderdelen en clientconnectiviteitsonderdelen bevat op de computer waarop de toepassing wordt uitgevoerd.
Aan de slag met RMO
In deze sectie wordt beschreven hoe u een eenvoudig RMO-project start met behulp van Microsoft Visual Studio.
Een nieuw Microsoft Visual C#-project maken
Start Visual Studio.
Klik in het menu Bestand op NewProject. Het dialoogvenster Nieuw project wordt weergegeven.
Selecteer in het dialoogvenster ProjecttypenVisual C#-projecten. Selecteer in het deelvenster SjablonenWindows-toepassing.
(Optioneel) Typ in naamde naam van de nieuwe toepassing.
Klik op OK- om de Visual C# Windows-sjabloon te laden.
Selecteer in het menu ProjectVerwijzing toevoegen item. Het dialoogvenster Verwijzing toevoegen wordt weergegeven.
Selecteer de volgende assembly's in de lijst op het tabblad .NET- en klik vervolgens op OK-.
Microsoft.SqlServer.Replication .NET Programming Interface
Microsoft.SqlServer.ConnectionInfo
Bibliotheek replicatieagent
Notitie
Gebruik de Ctrl-toets om meer dan één bestand te selecteren.
(Optioneel) Herhaal stap 6. Klik op het tabblad Bladeren, ga naar C:\Program Files\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dllen klik vervolgens op OK.
Klik in het menu Weergave op Code.
Typ in de code vóór de naamruimteinstructie de volgende met behulp van-instructies om de typen in de RMO-naamruimten te kwalificeren:
// 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;
Een nieuw Microsoft Visual Basic .NET-project maken
Start Visual Studio.
Selecteer in het menu Bestand de optie Nieuw project. Het dialoogvenster Nieuw project wordt weergegeven.
Selecteer in het deelvenster Projecttypen Visual Basic-. Selecteer in het deelvenster Sjablonen Windows-toepassing.
(Optioneel) Typ in het vak Naam de naam van de nieuwe toepassing.
Klik op OK- om de Visual Basic Windows-sjabloon te laden.
Selecteer in het menu ProjectVerwijzing toevoegen. Het dialoogvenster Verwijzing toevoegen wordt weergegeven.
Selecteer de volgende assembly's in de lijst op het tabblad .NET- en klik vervolgens op OK-.
Microsoft.SqlServer.Replication .NET Programming Interface
Microsoft.SqlServer.ConnectionInfo
Bibliotheek replicatieagent
Notitie
Gebruik de Ctrl-toets om meer dan één bestand te selecteren.
(Optioneel) Herhaal stap 6. Klik op het tabblad Bladeren, ga naar C:\Program Files\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dllen klik vervolgens op OK.
Klik in het menu Weergave op Code.
Typ vóór eventuele declaraties in de code de volgende Importeert instructies om de typen in de RMO-naamruimten te kwalificeren.
' 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
Verbinding maken met een replicatieserver
RMO-programmeerobjecten vereisen dat een verbinding met een exemplaar van SQL Server wordt gemaakt met behulp van een exemplaar van de ServerConnection-klasse. Deze verbinding met de server wordt onafhankelijk van alle RMO-programmeerobjecten gemaakt. Het wordt vervolgens doorgegeven aan het RMO-object tijdens het maken van het exemplaar of door toewijzing aan de eigenschap P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext
van het object. Op deze manier kunnen een RMO-programmeerobject en de verbindingsobjectexemplaren afzonderlijk worden gemaakt en beheerd, en kan één verbindingsobject opnieuw worden gebruikt met meerdere RMO-programmeerobjecten. De volgende regels zijn van toepassing op verbindingen met een replicatieserver:
Alle eigenschappen voor de verbinding worden gedefinieerd voor een bepaald ServerConnection-object.
Een verbinding met elk exemplaar van SQL Server moet een eigen ServerConnection-object hebben.
Het ServerConnection-object wordt toegewezen aan de eigenschap
P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext
van het RMO-programmeerobject dat wordt gemaakt of geopend op de server.Met de methode Connect wordt de verbinding met de server geopend. Deze methode moet worden aangeroepen voordat u methoden aanroept die toegang hebben tot de server op RMO-programmeerobjecten met behulp van de verbinding.
Omdat RMO en SQL Server Management Objects (SMO) beide de klasse ServerConnection gebruiken voor verbindingen met SQL Server, kan dezelfde verbinding worden gebruikt door zowel RMO- als SMO-objecten. Zie Verbinding maken met een exemplaar van SQL Servervoor meer informatie.
Alle verificatiegegevens om de verbinding te maken en zich aan te melden bij de server, worden opgegeven in het ServerConnection-object.
Windows-verificatie is de standaardinstelling. Als u SQL Server-verificatie wilt gebruiken, moet LoginSecure zijn ingesteld op onwaar en Login en moet Password zijn ingesteld op een geldige SQL Server-aanmelding en -wachtwoord. Beveiligingsreferenties moeten altijd veilig worden opgeslagen en verwerkt, en waar mogelijk tijdens runtime worden opgegeven.
Voor toepassingen met meerdere threads moet een afzonderlijk ServerConnection-object worden gebruikt in elke thread.
Roep de methode Disconnect aan op het ServerConnection-object om actieve serververbindingen te sluiten die worden gebruikt door RMO-objecten.
RMO-eigenschappen instellen
De eigenschappen van RMO-programmeerobjecten vertegenwoordigen de eigenschappen van deze replicatieobjecten op de server. Bij het maken van nieuwe replicatieobjecten op de server worden RMO-eigenschappen gebruikt om deze objecten te definiëren. Voor bestaande objecten vertegenwoordigen de RMO-eigenschappen de eigenschappen van het bestaande object, die alleen kunnen worden gewijzigd voor eigenschappen die beschrijfbaar of instelbaar zijn. Eigenschappen kunnen worden ingesteld op nieuwe objecten of bestaande objecten.
Eigenschappen instellen voor nieuwe replicatieobjecten
Wanneer u een nieuw replicatieobject maakt op de server, moet u alle vereiste eigenschappen opgeven voordat u de methode Maken van het object aanroept. Zie Publicatie- en distributie-configureren voor meer informatie over het instellen van eigenschappen voor een nieuw replicatieobject.
Eigenschappen instellen voor bestaande replicatieobjecten
Voor replicatieobjecten die op de server aanwezig zijn, kan RMO, afhankelijk van het object, de mogelijkheid ondersteunen om bepaalde of alle eigenschappen ervan te wijzigen. Alleen beschrijfbare of ingestelde eigenschappen kunnen worden gewijzigd. Voordat eigenschappen kunnen worden gewijzigd, moet de laden of de M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties
methode worden aangeroepen om de huidige eigenschappen van de server op te halen. Als u deze methoden aanroept, wordt aangegeven dat een bestaand object wordt gewijzigd.
Bij het wijzigen van objecteigenschappen voert RMO deze wijzigingen standaard door naar de server op basis van de uitvoeringsmodus van de ServerConnection die wordt gebruikt. De methode P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject
kan worden gebruikt om te controleren of een object op de server bestaat voordat u probeert de eigenschappen ervan op te halen of te wijzigen. Zie Eigenschappen van distributeur en uitgever weergeven en wijzigenvoor meer informatie over het wijzigen van de eigenschappen van een replicatieobject.
Notitie
Wanneer meerdere RMO-clients of meerdere exemplaren van een RMO-programmeerobject toegang hebben tot hetzelfde replicatieobject op de server, kan de methode Vernieuwen van het RMO-object worden aangeroepen om de eigenschappen bij te werken op basis van de huidige status van het object op de server.
Wijzigingen in cache-eigenschappen
Wanneer de eigenschap SqlExecutionModes is ingesteld op CaptureSql worden alle Transact-SQL instructies die door RMO worden gegenereerd, vastgelegd, zodat ze handmatig in één batch kunnen worden uitgevoerd met behulp van een van de uitvoeringsmethoden. Met RMO kunt u eigenschappenwijzigingen in de cache opslaan en deze in één batch doorvoeren met behulp van de M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges
methode van het object. Als u eigenschapswijzigingen in de cache wilt opslaan, moet de eigenschap P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges
van het object worden ingesteld op true. Wanneer de eigenschap in de cache wordt gewijzigd in RMO, bepaalt het ServerConnection object nog steeds wanneer wijzigingen naar de server worden verzonden. Zie Eigenschappen van distributeur en uitgever weergeven en wijzigenvoor meer informatie over het opslaan van eigenschappen in de cache voor een replicatieobject.
Belangrijk
Hoewel de ServerConnection-klasse expliciete transacties ondersteunt bij het instellen van eigenschappen, kunnen dergelijke transacties invloed hebben op interne replicatietransacties, onverwachte resultaten opleveren en mogen ze niet worden gebruikt met RMO.
TLS 1.2-ondersteuning voor RMO-onderdelen inschakelen
TLS1.2-ondersteuning voor RMO-onderdelen in Windows 2012 en lager kan worden ingeschakeld door de update KB-3140245te installeren en de registersleutels te maken zoals vermeld in het artikel. In Windows 2012 R2 en latere versies moeten alleen de registersleutels zoals vermeld in het bovenstaande artikel worden gemaakt.
Voorbeeld
In dit voorbeeld ziet u hoe de eigenschapswijzigingen in de cache worden opgeslagen. Wijzigingen in de kenmerken van een transactionele publicatie worden in de cache opgeslagen totdat ze expliciet naar de server worden verzonden.
// 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();
}
Verwante inhoud
- Concepten van opgeslagen procedures voor het replicatiesysteem
- concepten voor replicatieprogrammering