Partager via


Concepts liés à Replication Management Objects

S’applique à : SQL Server Azure SQL Managed Instance

Replication Management Objects (RMO) est un assembly de code managé qui encapsule les fonctionnalités de réplication pour SQL Server. RMO est implémenté par l'espace de noms Microsoft.SqlServer.Replication.

Les rubriques des sections suivantes indiquent comment utiliser RMO pour contrôler par programme les tâches de réplication :

Configurer la distribution
Les rubriques de cette section indiquent comment utiliser RMO pour configurer la publication et la distribution.

Créer une publication
Les rubriques de cette section indiquent comment utiliser RMO pour créer, supprimer et modifier des publications et des articles.

S’abonner aux Publications
Les rubriques de cette section indiquent comment utiliser RMO pour créer, supprimer et modifier des abonnements.

Sécuriser une topologie de réplication
Les rubriques de cette section indiquent comment utiliser RMO pour afficher et modifier des paramètres de sécurité.

Synchroniser des abonnements (réplication)
Les rubriques de cette section indiquent comment synchroniser des abonnements.

Surveillance de la réplication
Les rubriques de cette section indiquent comment analyser par programme une topologie de réplication.

Présentation de la programmation RMO

RMO est conçu pour programmer tous les aspects de la réplication SQL Server. L’espace de noms RMO est Microsoft.SqlServer.Replication, et il est implémenté par le Microsoft.SqlServer.Rmo.dll, qui est un assembly Microsoft .NET Framework. L'assembly Microsoft.SqlServer.Replication.dll, qui appartient également à l'espace de noms Microsoft.SqlServer.Replication, implémente une interface de code managé pour la programmation des différents agents de réplication (Agent d'instantané, Agent de distribution et Agent de fusion). Ses classes sont accessibles à partir de RMO pour synchroniser des abonnements. Les classes de l'espace de noms Microsoft.SqlServer.Replication.BusinessLogicSupport, implémenté par l'assembly Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, sont utilisées pour créer la logique métier personnalisée pour la réplication de fusion. Cet assembly est indépendant de RMO.

Déploiement d'applications basées sur RMO

RMO dépend des composants de réplication et des composants de connectivité client inclus avec toutes les versions de SQL Server, à l’exception de SQL Server Compact. Pour déployer une application basée sur RMO, vous devez installer une version de SQL Server qui inclut des composants de réplication et des composants de connectivité client sur l’ordinateur sur lequel l’application s’exécutera.

Mise en route avec RMO

Cette section explique comment démarrer un projet RMO simple à l’aide de Microsoft Visual Studio.

Pour créer un projet Microsoft Visual C#

  1. Démarrez Visual Studio.

  2. Dans le menu Fichier , cliquez sur NewProject. La boîte de dialogue Nouveau projet s’affiche.

  3. Dans la boîte de dialogue Types de projets, sélectionnez Projets Visual C#. Dans le volet Modèles, sélectionnez Application Windows.

  4. (Facultatif) Dans la zone Nom, tapez le nom de la nouvelle application.

  5. Cliquez sur OK pour charger le modèle Windows Visual C#.

  6. Dans le menu Projet, sélectionnez l’élément Ajouter une référence. La boîte de dialogue Ajouter une référence s’affiche.

  7. Sélectionnez les assemblys suivants dans la liste de l’onglet .NET, puis cliquez sur OK.

    • Interface de programmation .NET Microsoft.SqlServer.Replication

    • Microsoft.SqlServer.ConnectionInfo

    • Bibliothèque de l'Agent de réplication

    Remarque

    Utilisez la touche CTRL pour sélectionner plusieurs fichiers.

  8. (Facultatif) Répétez l'étape 6. Cliquez sur l’onglet Parcourir , accédez à C :\Program Files\Microsoft SQL Server\nnn\COM, sélectionnez Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, puis cliquez sur OK.

  9. Dans le menu Affichage , cliquez sur Code.

  10. Dans le code, avant l’instruction d’espace de noms, tapez les instructions using suivantes pour qualifier les types dans les espaces de noms 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;   
    

Pour créer un projet Microsoft Visual Basic .NET

  1. Démarrez Visual Studio.

  2. Dans le menu Fichier, sélectionnez Nouveau projet. La boîte de dialogue Nouveau projet apparaît.

  3. Dans le volet Types de projets, sélectionnez Visual Basic. Dans le volet Modèles, sélectionnez Application Windows.

  4. (Facultatif) Dans la zone Nom, tapez le nom de la nouvelle application.

  5. Cliquez sur OK pour charger le modèle Windows Visual Basic.

  6. Dans le menu Projet, sélectionnez Ajouter une référence. La boîte de dialogue Ajouter une référence s’affiche.

  7. Sélectionnez les assemblys suivants dans la liste de l’onglet .NET, puis cliquez sur OK.

    • Interface de programmation .NET Microsoft.SqlServer.Replication

    • Microsoft.SqlServer.ConnectionInfo

    • Bibliothèque de l'Agent de réplication

    Remarque

    Utilisez la touche CTRL pour sélectionner plusieurs fichiers.

  8. (Facultatif) Répétez l'étape 6. Cliquez sur l’onglet Parcourir , accédez à C :\Program Files\Microsoft SQL Server\nnn\COM, sélectionnez Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, puis cliquez sur OK.

  9. Dans le menu Affichage , cliquez sur Code.

  10. Dans le code, avant les déclarations, tapez les instructions Imports suivantes pour qualifier les types dans les espaces de noms 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   
    

Connexion à un serveur de réplication

Les objets de programmation RMO nécessitent qu’une connexion à une instance de SQL Server soit établie à l’aide d’une instance de la ServerConnection classe. Cette connexion au serveur est établie indépendamment des objets de programmation RMO. Elle est ensuite transmise à l’objet RMO lors de la création de l’instance ou par assignation à la propriété P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext de l’objet. De cette manière, un objet de programmation RMO et les instances d'objet de connexion peuvent être créés et gérés séparément, et un objet de connexion peut être réutilisé avec plusieurs objets de programmation RMO. Les règles suivantes s'appliquent aux connexions à un serveur de réplication :

  • Toutes les propriétés de la connexion sont définies pour un objet ServerConnection donné.

  • Une connexion à chaque instance de SQL Server doit avoir son propre ServerConnection objet.

  • L'objet ServerConnection est assigné à la propriété P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext de l'objet de programmation RMO créé ou faisant l'objet d'un accès sur le serveur.

  • La méthode Connect établit la connexion au serveur. Vous devez appeler cette méthode avant d'appeler une méthode qui accède au serveur sur un objet de programmation RMO à l'aide de la connexion.

  • Étant donné que RMO et SQL Server Management Objects (SMO) utilisent la ServerConnection classe pour les connexions à SQL Server, la même connexion peut être utilisée par les objets RMO et SMO. Pour plus d’informations, consultez Connexion à une instance de SQL Server.

  • Toutes les informations d'authentification nécessaires pour l'établissement de la connexion et l'ouverture d'une session sur le serveur sont fournies dans l'objet ServerConnection.

  • La méthode par défaut est l'authentification Windows. Pour utiliser l’authentification SQL Server, LoginSecure doit être définie sur false et Login Password doit être définie sur une ouverture de session et un mot de passe SQL Server valides. Les informations d'identification de sécurité doivent toujours être stockées et gérées de manière sécurisée, et elles doivent être fournies au moment de l'exécution chaque fois que cela est possible.

  • Pour les applications multithread, un objet ServerConnection distinct doit être utilisé dans chaque thread.

Appelez la méthode Disconnect sur l'objet ServerConnection pour fermer les connexions au serveur actives utilisées par les objets RMO.

Définition des propriétés RMO

Les propriétés d'objets de programmation RMO représentent les propriétés de ces objets de réplication sur le serveur. Lorsque des objets de réplication sont créés sur le serveur, les propriétés RMO sont utilisées pour définir ces objets. Pour les objets existants, les propriétés RMO représentent les propriétés de l'objet existant, qui peuvent être modifiées uniquement pour les propriétés accessibles en écriture ou définissables. Les propriétés peuvent être définies sur les nouveaux objets ou les objets existants.

Définition des propriétés des nouveaux objets de réplication

Quand vous créez un objet de réplication sur le serveur, vous devez spécifier toutes les propriétés requises avant d’appeler la méthode Create de l’objet. Pour plus d’informations sur la définition des propriétés d’un nouvel objet de réplication, consultez Configurer la publication et la distribution.

Définition des propriétés des objets de réplication existants

Pour un objet de réplication qui réside sur le serveur, en fonction de l'objet, RMO peut être en mesure de modifier certaines de ses propriétés ou toutes ses propriétés. Seules les propriétés accessibles en écriture ou définissables peuvent être modifiées. Avant de modifier les propriétés, vous devez appeler Load ou la méthode M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties pour obtenir les propriétés actuelles auprès du serveur. L'appel de ces méthodes indique qu'un objet existant fait l'objet d'une modification.

Par défaut, lors de la modification des propriétés d'un objet, RMO valide ces modifications sur le serveur selon le mode d'exécution de l'objet ServerConnection utilisé. La propriété P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject peut être utilisée pour vérifier qu'un objet existe sur le serveur avant la tentative d'extraction ou de modification de ses propriétés. Pour plus d’informations sur la modification des propriétés d’un objet de réplication, consultez Afficher et modifier les propriétés d’un serveur de distribution ou d’un serveur de publication.

Remarque

Quand plusieurs clients RMO ou plusieurs instances d’un objet de programmation RMO accèdent au même objet de réplication sur le serveur, la méthode Refresh de l’objet RMO peut être appelée pour mettre à jour les propriétés en fonction de l’état actuel de l’objet sur le serveur.

Mise en cache de modifications de propriété

Lorsque la SqlExecutionModes propriété est définie sur CaptureSql toutes les instructions Transact-SQL générées par RMO sont capturées afin qu’elles puissent être exécutées manuellement dans un lot unique à l’aide de l’une des méthodes d’exécution. RMO vous permet de mettre en cache les modifications de propriété et de les valider globalement dans un lot unique au moyen de la méthode M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges de l'objet. Pour la mise en cache des modifications de propriété, la propriété P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges de l’objet doit avoir la valeur true. Lors de la mise en cache des modifications de propriété dans RMO, l'objet ServerConnection détermine toujours le moment auquel les modifications sont envoyées au serveur. Pour plus d’informations sur la mise en cache des modifications de propriété pour un objet de réplication, consultez Afficher et modifier les propriétés d’un serveur de distribution ou d’un serveur de publication.

Important

Bien que la classe ServerConnection prenne en charge la déclaration de transactions explicites lors de la définition des propriétés, ces transactions peuvent interférer avec les transactions de réplication internes et produire des résultats inattendus. Par conséquent, elles ne doivent pas être utilisées avec RMO.

Activation de la prise en charge de TLS 1.2 pour les composants RMO

Vous pouvez activer la prise en charge de TLS 1.2 pour les composants RMO sur Windows 2012 et versions antérieures en installant la mise à jour KB 3140245 et en créant des clés de Registre, comme indiqué dans l’article. Sur Windows 2012 R2 et versions ultérieures, seules doivent être créées les clés de Registre telles qu’indiquées dans l’article ci-dessus.

Exemple

Cet exemple illustre la mise en cache des modifications de propriété. Les modifications apportées aux attributs d'une publication transactionnelle sont mises en cache tant qu'elles n'ont pas été envoyées explicitement au serveur.

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