Partager via


Concepts liés à RMO (Replication Management Objects)

RMO (Replication Management Objects) 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 :

Présentation de la programmation RMO

RMO est conçu pour la programmation de 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 fichier 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 de capture instantanée, 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 qui sont inclus dans 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 incluant les composants de réplication et les composants de connectivité client sur l'ordinateur sur lequel l'application s'exécutera.

Mise en route avec RMO

Cette section décrit 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 Nouveauprojet. 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\100\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 s'affiche.

  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\100\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

Pour les objets de programmation RMO, il est nécessaire qu'une connexion à une instance de SQL Server soit établie en utilisant une instance de la classe ServerConnection. 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é 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 comporter son propre objet ServerConnection.

  • L'objet ServerConnection est assigné à la propriété 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.

  • Dans la mesure où RMO et SQL Server Management Objects (SMO) utilisent tous deux la classe ServerConnection pour les connexions à SQL Server, les objets RMO et SMO peuvent utiliser la même connexion. 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. Si vous utilisez l'authentification SQL Server, la propriété LoginSecure doit avoir la valeur false, et un nom de connexion et un mot de passe SQL Server valides doivent être définis pour les propriétés Login et Password. 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

Lorsque 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 Procédure : configurer la publication et la distribution (programmation RMO).

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 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é 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 Procédure : afficher et modifier les propriétés des serveurs de publication et de distribution (programmation RMO).

[!REMARQUE]

Lorsque 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 propriété SqlExecutionModes a la valeur 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 au moyen 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 CommitPropertyChanges de l'objet. Pour la mise en cache des modifications de propriété, la propriété 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é d'un objet de réplication, consultez Procédure : afficher et modifier les propriétés des serveurs de publication et de distribution (programmation RMO).

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.

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

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