Synchroniser un abonnement par émission de donnéesSynchronize a Push Subscription

Cette rubrique explique comment synchroniser un abonnement par émission de données (push) dans SQL Server 2016SQL Server 2016 à l'aide de SQL Server Management StudioSQL Server Management Studio, d' agents de réplicationou d'objets RMO (Replication Management Objects).This topic describes how to synchronize a push subscription in SQL Server 2016SQL Server 2016 by using SQL Server Management StudioSQL Server Management Studio, replication agents, or Replication Management Objects (RMO).

Dans cette rubriqueIn This Topic

Utilisation de SQL Server Management Studio Using SQL Server Management Studio

Les abonnements sont synchronisés par l'Agent de distribution (pour la réplication transactionnelle et d'instantané) ou l'Agent de fusion (pour la réplication de fusion).Subscriptions are synchronized by the Distribution Agent (for snapshot and transactional replication) or the Merge Agent (for merge replication). Les agents peuvent s'exécuter en continu, à la demande ou selon une planification.Agents can run continuously, run on demand, or run on a schedule. Pour plus d’informations sur la spécification de planifications de synchronisation, consultez Spécifier des planifications de synchronisation.For more information about specifying synchronization schedules, see Specify Synchronization Schedules.

Synchronisez un abonnement à la demete à partir des dossiers Publications locales et Abonnements locaux dans MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio et the Tous les abonnements du moniteur de réplication.Synchronize a subscription on demand from the Local Publications and Local Subscriptions folders in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio and the All Subscriptions tab in Replication Monitor. Les abonnements aux publications Oracle ne peuvent pas être synchronisés à la demande à partir de l'Abonné.Subscriptions to Oracle publications cannot be synchronized on demand from the Subscriber. Pour plus d’informations sur le démarrage du Moniteur de réplication, consultez Démarrer le Moniteur de réplication.For information about starting Replication Monitor, see Start the Replication Monitor.

Pour synchroniser un abonnement par envoi de données à la demande dans Management Studio (sur le serveur de publication)To synchronize a push subscription on demand in Management Studio (at the Publisher)

  1. Connectez-vous au serveur de publication dans Management StudioManagement Studio, puis développez le nœud du serveur.Connect to the Publisher in Management StudioManagement Studio, and then expand the server node.

  2. Développez le dossier Réplication , puis développez le dossier Publications locales .Expand the Replication folder, and then expand the Local Publications folder.

  3. Développez la publication pour laquelle vous souhaitez synchroniser des abonnements.Expand the publication for which you want to synchronize subscriptions.

  4. Cliquez avec le bouton droit sur l'abonnement à synchroniser, puis cliquez sur Afficher l'état de synchronisation.Right-click the subscription you want to synchronize, and then click View Synchronization Status.

  5. Dans la boîte de dialogue Afficher l’état de synchronisation - <Abonné> : <Base_de_données_Abonnement>, cliquez sur Démarrer.In the View Synchronization Status - <Subscriber>:<SubscriptionDatabase> dialog box, click Start. Lorsque la synchronisation est terminée, le message Synchronisation terminée s'affiche.When synchronization is complete, the message Synchronization completed is displayed.

  6. Cliquez sur Fermer.Click Close.

Pour synchroniser un abonnement par envoi de données à la demande dans Management Studio (sur l'Abonné)To synchronize a push subscription on demand in Management Studio (at the Subscriber)

  1. Connectez-vous à l'Abonné dans Management StudioManagement Studio, puis développez le nœud du serveur.Connect to the Subscriber in Management StudioManagement Studio, and then expand the server node.

  2. Développez le dossier Réplication , puis développez le dossier Abonnements locaux .Expand the Replication folder, and then expand the Local Subscriptions folder.

  3. Cliquez avec le bouton droit sur l'abonnement à synchroniser, puis cliquez sur Afficher l'état de synchronisation.Right-click the subscription you want to synchronize, and then click View Synchronization Status.

  4. Un message sur l'établissement d'une connexion avec le serveur de distribution s'affiche.A message is displayed about establishing a connection to the Distributor. Cliquez sur OK.Click OK.

  5. Dans la boîte de dialogue Afficher l’état de synchronisation - <Abonné> : <Base_de_données_Abonnement>, cliquez sur Démarrer.In the View Synchronization Status - <Subscriber>:<SubscriptionDatabase> dialog box, click Start. Lorsque la synchronisation est terminée, le message Synchronisation terminée s'affiche.When synchronization is complete, the message Synchronization completed is displayed.

  6. Cliquez sur Fermer.Click Close.

Pour synchroniser un abonnement par envoi de données à la demande dans le moniteur de réplicationTo synchronize a push subscription on demand in Replication Monitor

  1. Dans le moniteur de réplication, développez un groupe de serveurs de publication dans le volet gauche, développez un serveur de publication, puis cliquez sur une publication.In Replication Monitor, expand a Publisher group in the left pane, expand a Publisher, and then click a publication.

  2. Cliquez sur l'onglet Tous les abonnements .Click the All Subscriptions tab.

  3. Cliquez avec le bouton droit sur l'abonnement que vous souhaitez synchroniser, puis cliquez sur Démarrer la synchronisation.Right-click the subscription you want to synchronize, and then click Start Synchronizing.

  4. Pour afficher l'avancement de la synchronisation, cliquez avec le bouton droit sur l'abonnement, puis cliquez sur Afficher les détails.To view synchronization progress, right-click the subscription, and then click View Details.

Utilisation des Agents de réplication Using Replication Agents

Les abonnements par envoi de données (push) peuvent être synchronisés par le biais de la programmation et à la demande en appelant le fichier exécutable de l'Agent de réplication approprié à partir de l'invite de commandes.Push subscriptions can be synchronized programmatically and on-demand by invoking the appropriate replication agent executable file from the command prompt. Le fichier exécutable de l'Agent de réplication qui est appelé dépend du type de publication à laquelle l'abonnement par envoi de données (push) appartient.The replication agent executable file that is invoked will depend on the type of publication to which the push subscription belongs.

Pour démarrer l'Agent de distribution et synchroniser un abonnement par envoi de données (push) vers une publication transactionnelleTo start the Distribution Agent to synchronize a push subscription to a transactional publication

  1. À partir de l'invite de commandes ou dans un fichier de commandes sur le serveur de distribution, exécutez distrib.exe.From the command prompt or in a batch file at the Distributor, execute distrib.exe. Spécifiez les arguments suivants sur la ligne de commande :Specify the following command-line arguments:

    • -Publisher-Publisher

    • -PublisherDB-PublisherDB

    • -Distributor-Distributor

    • -Subscriber-Subscriber

    • -SubscriberDB-SubscriberDB

    • -SubscriptionType = 0-SubscriptionType = 0

      Si vous utilisez l'authentification SQL Server, vous devez également spécifier les arguments suivants :If you are using SQL Server Authentication, you must also specify the following arguments:

    • -DistributorLogin-DistributorLogin

    • -DistributorPassword-DistributorPassword

    • -DistributorSecurityMode = 0-DistributorSecurityMode = 0

    • -PublisherLogin-PublisherLogin

    • -PublisherPassword-PublisherPassword

    • -PublisherSecurityMode = 0-PublisherSecurityMode = 0

    • -SubscriberLogin-SubscriberLogin

    • -SubscriberPassword-SubscriberPassword

    • -SubscriberSecurityMode = 0-SubscriberSecurityMode = 0

      Important

      Lorsque c'est possible, utilisez l'authentification Windows.When possible, use Windows Authentication.

Pour démarrer l'Agent de fusion et synchroniser un abonnement par envoi de données (push) vers une publication de fusionTo start the Merge Agent to synchronize a push subscription to a merge publication

  1. À partir de l'invite de commandes ou dans un fichier de commandes sur le serveur de distribution, exécutez replmerg.exe.From the command prompt or in a batch file at the Distributor, execute replmerg.exe. Spécifiez les arguments suivants sur la ligne de commande :Specify the following command-line arguments:

    • -Publisher-Publisher

    • -PublisherDB-PublisherDB

    • -Publication-Publication

    • -Distributor-Distributor

    • -Subscriber-Subscriber

    • -SubscriberDB-SubscriberDB

    • -SubscriptionType = 0-SubscriptionType = 0

      Si vous utilisez l'authentification SQL Server, vous devez également spécifier les arguments suivants :If you are using SQL Server Authentication, you must also specify the following arguments:

    • -DistributorLogin-DistributorLogin

    • -DistributorPassword-DistributorPassword

    • -DistributorSecurityMode = 0-DistributorSecurityMode = 0

    • -PublisherLogin-PublisherLogin

    • -PublisherPassword-PublisherPassword

    • -PublisherSecurityMode = 0-PublisherSecurityMode = 0

    • -SubscriberLogin-SubscriberLogin

    • -SubscriberPassword-SubscriberPassword

    • -SubscriberSecurityMode = 0-SubscriberSecurityMode = 0

      Important

      Lorsque c'est possible, utilisez l'authentification Windows.When possible, use Windows Authentication.

Exemples (Agents de réplication) Examples (Replication Agents)

L'exemple suivant démarre l'Agent de distribution pour synchroniser un abonnement par envoi de données (push).The following example starts the Distribution Agent to synchronize a push subscription.


REM -- Declare the variables.  
SET Publisher=%instancename%  
SET Subscriber=%instancename%  
SET PublicationDB=AdventureWorks2012  
SET SubscriptionDB=AdventureWorks2012Replica   
SET Publication=AdvWorksProductsTran  

REM -- Start the Distribution Agent with four subscription streams.  
REM -- The following command must be supplied without line breaks.  
"C:\Program Files\Microsoft SQL Server\120\COM\DISTRIB.EXE" -Subscriber %Subscriber%   
-SubscriberDB %SubscriptionDB% -SubscriberSecurityMode 1 -Publication %Publication%   
-Publisher %Publisher% -PublisherDB %PublicationDB% -Distributor %Publisher%   
-DistributorSecurityMode 1 -Continuous -SubscriptionType 0 -SubscriptionStreams 4  

L'exemple suivant démarre l'Agent de fusion pour synchroniser un abonnement par envoi de données (push).The following example starts the Merge Agent to synchronize a push subscription.


REM -- Declare the variables.  
SET Publisher=%instancename%  
SET Subscriber=%instancename%  
SET PublicationDB=AdventureWorks2012  
SET SubscriptionDB=AdventureWorks2012Replica   
SET Publication=AdvWorksSalesOrdersMerge  

REM -- Start the Merge Agent.  
REM -- The following command must be supplied without line breaks.  
"C:\Program Files\Microsoft SQL Server\120\COM\REPLMERG.EXE"  -Publisher %Publisher%   
-Subscriber  %Subscriber%  -Distributor %Publisher% -PublisherDB  %PublicationDB%   
-SubscriberDB %SubscriptionDB% -Publication %Publication% -PublisherSecurityMode 1   
-OutputVerboseLevel 3  -Output -SubscriberSecurityMode 1  -SubscriptionType 0   
-DistributorSecurityMode 1  

Utilisation d'objets RMO (Replication Management Objects) Using Replication Management Objects (RMO)

Vous pouvez synchroniser des abonnements par envoi de données par programme à l'aide des objets RMO (Replication Management Objects) et gérer l'accès au code pour les fonctionnalités de l'Agent de réplication.You can synchronize push subscriptions programmatically by using Replication Management Objects (RMO) and managed code access to replication agent functionalities. Les classes que vous utilisez pour créer un abonnement par envoi de données dépendent du type de publication à laquelle l'abonnement appartient.The classes that you use to synchronize a push subscription depend on the type of publication to which the subscription belongs.

Note

Si vous voulez démarrer une synchronisation qui s'exécute de façon autonome sans affecter votre application, démarrez l'agent en mode asynchrone.If you want to start a synchronization that runs autonomously without affecting your application, start the agent asynchronously. Toutefois, si vous souhaitez contrôler la sortie de la synchronisation et recevoir les rappels de l'Agent pendant le processus de synchronisation (par exemple, pour afficher une barre de progression), vous devez démarrer l'Agent en mode synchrone.However, if you want to monitor the outcome of the synchronization and receive callbacks from the agent during the synchronization process (for example, if you want to display a progress bar), you should start the agent synchronously. For MicrosoftMicrosoft SQL Server 2005 Express EditionSQL Server 2005 Express Edition Subscribers, you must start the agent synchronously.For MicrosoftMicrosoft SQL Server 2005 Express EditionSQL Server 2005 Express Edition Subscribers, you must start the agent synchronously.

Pour synchroniser un abonnement par envoi de données vers un instantané ou une publication transactionnelleTo synchronize a push subscription to a snapshot or transactional publication

  1. Créez une connexion au serveur de distribution en utilisant la classe ServerConnection.Create a connection to the Distributor by using the ServerConnection class.

  2. Créez une instance de la classe TransSubscription, puis définissez les propriétés suivantes :Create an instance of the TransSubscription class and set the following properties:

  3. Appelez la méthode LoadProperties pour obtenir les propriétés d’abonnement restantes.Call the LoadProperties method to get the remaining subscription properties. Si cette méthode retourne false, vérifiez que l'abonnement existe.If this method returns false, verify that the subscription exists.

  4. Démarrez l'Agent de distribution sur le serveur de distribution selon l'une des manières suivantes :Start the Distribution Agent at the Distributor in one of the following ways:

    • Appelez la méthode SynchronizeWithJob sur l’instance de TransSubscription obtenue à l’étape 2.Call the SynchronizeWithJob method on the instance of TransSubscription from step 2. Cette méthode démarre l'Agent de distribution en mode asynchrone et votre application récupère immédiatement le contrôle pendant l'exécution du travail de l'agent.This method starts the Distribution Agent asynchronously, and control immediately returns to your application while the agent job is running. Vous ne pouvez pas appeler cette méthode si l’abonnement a été créé avec la valeur false pour CreateSyncAgentByDefault.You cannot call this method if the subscription was created with a value of false for CreateSyncAgentByDefault.

    • Obtenez une instance de la classe TransSynchronizationAgent à partir de la propriété SynchronizationAgent, puis appelez la méthode Synchronize.Obtain an instance of the TransSynchronizationAgent class from the SynchronizationAgent property, and call the Synchronize method. Cette méthode démarre l'agent en mode synchrone, et le travail d'agent en cours d'exécution conserve le contrôle.This method starts the agent synchronously, and control remains with the running agent job. Au cours de l’exécution synchrone, vous pouvez gérer l’événement Status pendant que l’agent est en cours d’exécution.During synchronous execution you can handle the Status event while the agent is running.

Pour synchroniser un abonnement par envoi de données vers une publication de fusionTo synchronize a push subscription to a merge publication

  1. Créez une connexion au serveur de distribution en utilisant la classe ServerConnection.Create a connection to the Distributor by using the ServerConnection class.

  2. Créez une instance de la classe MergeSubscription, puis définissez les propriétés suivantes :Create an instance of the MergeSubscription class, and set the following properties:

  3. Appelez la méthode LoadProperties pour obtenir les propriétés d’abonnement restantes.Call the LoadProperties method to get the remaining subscription properties. Si cette méthode retourne false, vérifiez que l'abonnement existe.If this method returns false, verify that the subscription exists.

  4. Démarrez l'Agent de distribution sur le serveur de distribution selon l'une des manières suivantes :Start the Merge Agent at the Distributor in one of the following ways:

    • Appelez la méthode SynchronizeWithJob sur l’instance de MergeSubscription obtenue à l’étape 2.Call the SynchronizeWithJob method on the instance of MergeSubscription from step 2. Cette méthode démarre l'Agent de fusion en mode asynchrone et votre application récupère immédiatement le contrôle pendant l'exécution du travail de l'agent.This method starts the Merge Agent asynchronously, and control immediately returns to your application while the agent job is running. Vous ne pouvez pas appeler cette méthode si l’abonnement a été créé avec la valeur false pour CreateSyncAgentByDefault.You cannot call this method if the subscription was created with a value of false for CreateSyncAgentByDefault.

    • Obtenez une instance de la classe MergeSynchronizationAgent à partir de la propriété SynchronizationAgent, puis appelez la méthode Synchronize.Obtain an instance of the MergeSynchronizationAgent class from the SynchronizationAgent property, and call the Synchronize method. Cette méthode démarre l'Agent de fusion en mode synchrone, et le travail d'agent en cours d'exécution conserve le contrôle.This method starts the Merge Agent synchronously, and control remains with the running agent job. Au cours de l’exécution synchrone, vous pouvez gérer l’événement Status pendant que l’agent est en cours d’exécution.During synchronous execution, you can handle the Status event while the agent is running.

Exemples (RMO) Examples (RMO)

Cet exemple synchronise un abonnement par envoi de données vers une publication transactionnelle, dans laquelle l'Agent est démarré en mode asynchrone à l'aide du travail de l'Agent.This example synchronizes a push subscription to a transactional publication, where the agent is started asynchronously using the agent job.

// Define the server, publication, and database names.
string subscriberName = subscriberInstance;
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";

/// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

TransSubscription subscription;

try
{
	// Connect to the Publisher.
	conn.Connect();

	// Instantiate the push subscription.
	subscription = new TransSubscription();
	subscription.ConnectionContext = conn;
	subscription.DatabaseName = publicationDbName;
	subscription.PublicationName = publicationName;
	subscription.SubscriptionDBName = subscriptionDbName;
	subscription.SubscriberName = subscriberName;

	// If the push subscription and the job exists, start the agent job.
	if (subscription.LoadProperties() && subscription.AgentJobId != null)
	{
		// Start the Distribution Agent asynchronously.
		subscription.SynchronizeWithJob();
	}
	else
	{
		// Do something here if the subscription does not exist.
		throw new ApplicationException(String.Format(
			"A subscription to '{0}' does not exists on {1}",
			publicationName, subscriberName));
	}
}
catch (Exception ex)
{
	// Implement appropriate error handling here.
	throw new ApplicationException("The subscription could not be synchronized.", ex);
}
finally
{
	conn.Disconnect();
}
' Define the server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Dim subscription As TransSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Instantiate the push subscription.
    subscription = New TransSubscription()
    subscription.ConnectionContext = conn
    subscription.DatabaseName = publicationDbName
    subscription.PublicationName = publicationName
    subscription.SubscriptionDBName = subscriptionDbName
    subscription.SubscriberName = subscriberName

    ' If the push subscription and the job exists, start the agent job.
    If subscription.LoadProperties() And Not subscription.AgentJobId Is Nothing Then
        ' Start the Distribution Agent asynchronously.
        subscription.SynchronizeWithJob()
    Else
        ' Do something here if the subscription does not exist.
        Throw New ApplicationException(String.Format( _
         "A subscription to '{0}' does not exists on {1}", _
         publicationName, subscriberName))
    End If
Catch ex As Exception
    ' Implement appropriate error handling here.
    Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
    conn.Disconnect()
End Try

Cet exemple synchronise un abonnement par envoi de données vers une publication transactionnelle, dans laquelle l'Agent est démarré en mode synchrone.This example synchronizes a push subscription to a transactional publication, where the agent is started synchronously.

// Define the server, publication, and database names.
string subscriberName = subscriberInstance;
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

TransSubscription subscription;

try
{
	// Connect to the Publisher.
	conn.Connect();

	// Define the push subscription.
	subscription = new TransSubscription();
	subscription.ConnectionContext = conn;
	subscription.DatabaseName = publicationDbName;
	subscription.PublicationName = publicationName;
	subscription.SubscriptionDBName = subscriptionDbName;
	subscription.SubscriberName = subscriberName;

	// If the push subscription exists, start the synchronization.
	if (subscription.LoadProperties())
	{
		// Check that we have enough metadata to start the agent.
		if (subscription.SubscriberSecurity != null)
		{
			// Synchronously start the Distribution Agent for the subscription.
			subscription.SynchronizationAgent.Synchronize();
		}
		else
		{
			throw new ApplicationException("There is insufficent metadata to " +
				"synchronize the subscription. Recreate the subscription with " +
				"the agent job or supply the required agent properties at run time.");
		}
	}
	else
	{
		// Do something here if the push subscription does not exist.
		throw new ApplicationException(String.Format(
			"The subscription to '{0}' does not exist on {1}",
			publicationName, subscriberName));
	}
}
catch (Exception ex)
{
	// Implement appropriate error handling here.
	throw new ApplicationException("The subscription could not be synchronized.", ex);
}
finally
{
	conn.Disconnect();
}
' Define the server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Dim subscription As TransSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Define the push subscription.
    subscription = New TransSubscription()
    subscription.ConnectionContext = conn
    subscription.DatabaseName = publicationDbName
    subscription.PublicationName = publicationName
    subscription.SubscriptionDBName = subscriptionDbName
    subscription.SubscriberName = subscriberName

    ' If the push subscription exists, start the synchronization.
    If subscription.LoadProperties() Then
        ' Check that we have enough metadata to start the agent.
        If Not subscription.SubscriberSecurity Is Nothing Then

            ' Synchronously start the Distribution Agent for the subscription.
            subscription.SynchronizationAgent.Synchronize()
        Else
            Throw New ApplicationException("There is insufficent metadata to " + _
             "synchronize the subscription. Recreate the subscription with " + _
             "the agent job or supply the required agent properties at run time.")
        End If
    Else
        ' Do something here if the push subscription does not exist.
        Throw New ApplicationException(String.Format( _
         "The subscription to '{0}' does not exist on {1}", _
         publicationName, subscriberName))
    End If
Catch ex As Exception
    ' Implement appropriate error handling here.
    Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
    conn.Disconnect()
End Try

Cet exemple synchronise un abonnement par envoi de données vers une publication de fusion, dans laquelle l'Agent est démarré en mode asynchrone à l'aide du travail de l'Agent.This example synchronizes a push subscription to a merge publication, where the agent is started asynchronously using the agent job.

// Define the server, publication, and database names.
string subscriberName = subscriberInstance;
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

MergeSubscription subscription;

try
{
	// Connect to the Publisher.
	conn.Connect();

	// Define push subscription.
	subscription = new MergeSubscription();
	subscription.ConnectionContext = conn;
	subscription.DatabaseName = publicationDbName;
	subscription.PublicationName = publicationName;
	subscription.SubscriptionDBName = subscriptionDbName;
	subscription.SubscriberName = subscriberName;

	// If the push subscription and the job exists, start the agent job.
	if (subscription.LoadProperties() && subscription.AgentJobId != null)
	{
		// Start the Merge Agent asynchronously.
		subscription.SynchronizeWithJob();
	}
	else
	{
		// Do something here if the subscription does not exist.
		throw new ApplicationException(String.Format(
			"A subscription to '{0}' does not exists on {1}",
			publicationName, subscriberName));
	}
}
catch (Exception ex)
{
	// Implement appropriate error handling here.
	throw new ApplicationException("The subscription could not be synchronized.", ex);
}
finally
{
	conn.Disconnect();
}
' Define the server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Dim subscription As MergeSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Define push subscription.
    subscription = New MergeSubscription()
    subscription.ConnectionContext = conn
    subscription.DatabaseName = publicationDbName
    subscription.PublicationName = publicationName
    subscription.SubscriptionDBName = subscriptionDbName
    subscription.SubscriberName = subscriberName

    ' If the push subscription and the job exists, start the agent job.
    If subscription.LoadProperties() And Not subscription.AgentJobId Is Nothing Then
        ' Start the Merge Agent asynchronously.
        subscription.SynchronizeWithJob()
    Else
        ' Do something here if the subscription does not exist.
        Throw New ApplicationException(String.Format( _
            "A subscription to '{0}' does not exists on {1}", _
            publicationName, subscriberName))
    End If
Catch ex As Exception
    ' Implement appropriate error handling here.
    Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
    conn.Disconnect()
End Try

Cet exemple synchronise un abonnement par envoi de données vers une publication de fusion, dans laquelle l'Agent est démarré en mode synchrone.This example synchronizes a push subscription to a merge publication, where the agent is started synchronously.

// Define the server, publication, and database names.
string subscriberName = subscriberInstance;
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

MergeSubscription subscription;

try
{
	// Connect to the Publisher
	conn.Connect();

	// Define the subscription.
	subscription = new MergeSubscription();
	subscription.ConnectionContext = conn;
	subscription.DatabaseName = publicationDbName;
	subscription.PublicationName = publicationName;
	subscription.SubscriptionDBName = subscriptionDbName;
	subscription.SubscriberName = subscriberName;

	// If the push subscription exists, start the synchronization.
	if (subscription.LoadProperties())
	{
		// Check that we have enough metadata to start the agent.
		if (subscription.SubscriberSecurity != null)
		{
			// Synchronously start the Merge Agent for the subscription.
			subscription.SynchronizationAgent.Synchronize();
		}
		else
		{
			throw new ApplicationException("There is insufficent metadata to " +
				"synchronize the subscription. Recreate the subscription with " +
				"the agent job or supply the required agent properties at run time.");
		}
	}
	else
	{
		// Do something here if the push subscription does not exist.
		throw new ApplicationException(String.Format(
			"The subscription to '{0}' does not exist on {1}",
			publicationName, subscriberName));
	}
}
catch (Exception ex)
{
	// Implement appropriate error handling here.
	throw new ApplicationException("The subscription could not be synchronized.", ex);
}
finally
{
	conn.Disconnect();
}
' Define the server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Dim subscription As MergeSubscription

Try
    ' Connect to the Publisher
    conn.Connect()

    ' Define the subscription.
    subscription = New MergeSubscription()
    subscription.ConnectionContext = conn
    subscription.DatabaseName = publicationDbName
    subscription.PublicationName = publicationName
    subscription.SubscriptionDBName = subscriptionDbName
    subscription.SubscriberName = subscriberName

    ' If the push subscription exists, start the synchronization.
    If subscription.LoadProperties() Then
        ' Check that we have enough metadata to start the agent.
        If Not subscription.SubscriberSecurity Is Nothing Then
            ' Synchronously start the Merge Agent for the subscription.
            ' Log agent messages to an output file.
            subscription.SynchronizationAgent.Output = "mergeagent.log"
            subscription.SynchronizationAgent.OutputVerboseLevel = 2
            subscription.SynchronizationAgent.Synchronize()
        Else
            Throw New ApplicationException("There is insufficent metadata to " + _
             "synchronize the subscription. Recreate the subscription with " + _
             "the agent job or supply the required agent properties at run time.")
        End If
    Else
        ' Do something here if the push subscription does not exist.
        Throw New ApplicationException(String.Format( _
         "The subscription to '{0}' does not exist on {1}", _
         publicationName, subscriberName))
    End If
Catch ex As Exception
    ' Implement appropriate error handling here.
    Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
    conn.Disconnect()
End Try

Voir aussiSee Also

Concepts liés à Replication Management Objects Replication Management Objects Concepts
Synchroniser les données Synchronize Data
Replication Security Best Practices Replication Security Best Practices