Sincronizzazione di una sottoscrizione pushSynchronize a Push Subscription

In questo argomento viene descritto come sincronizzare una sottoscrizione push in SQL Server 2017SQL Server 2017 tramite SQL Server Management StudioSQL Server Management Studio, agenti di replicao RMO (Replication Management Objects).This topic describes how to synchronize a push subscription in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio, replication agents, or Replication Management Objects (RMO).

Contenuto dell'argomentoIn This Topic

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

Le sottoscrizioni vengono sincronizzate dall'agente di distribuzione, per la replica snapshot e transazionale, o dall'agente di merge, per la replica di tipo merge.Subscriptions are synchronized by the Distribution Agent (for snapshot and transactional replication) or the Merge Agent (for merge replication). Gli agenti possono essere in esecuzione continuamente, essere in esecuzione su richiesta o essere in esecuzione su una pianificazione.Agents can run continuously, run on demand, or run on a schedule. Per altre informazioni sull'impostazione delle pianificazioni della sincronizzazione, vedere Specificare le pianificazioni della sincronizzazione.For more information about specifying synchronization schedules, see Specify Synchronization Schedules.

Una sottoscrizione può essere sincronizzata su richiesta dalle cartelle Pubblicazioni locali e Sottoscrizioni locali in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio e the Tutte le sottoscrizioni in Monitoraggio replica.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. Le sottoscrizioni a pubblicazioni Oracle non possono essere sincronizzate su richiesta dal Sottoscrittore.Subscriptions to Oracle publications cannot be synchronized on demand from the Subscriber. Per informazioni sull'avvio di Monitoraggio replica, vedere Avviare Monitoraggio replica.For information about starting Replication Monitor, see Start the Replication Monitor.

Per sincronizzare una sottoscrizione push su richiesta in Management Studio (nel server di pubblicazione)To synchronize a push subscription on demand in Management Studio (at the Publisher)

  1. Connettersi al server di pubblicazione in Management StudioManagement Studioe quindi espandere il nodo del server.Connect to the Publisher in Management StudioManagement Studio, and then expand the server node.

  2. Espandere la cartella Replica e quindi la cartella Pubblicazioni locali .Expand the Replication folder, and then expand the Local Publications folder.

  3. Espandere la pubblicazione per cui sincronizzare le sottoscrizioni.Expand the publication for which you want to synchronize subscriptions.

  4. Fare clic con il pulsante destro del mouse sulla sottoscrizione che si desidera sincronizzare e quindi scegliere Visualizza stato sincronizzazione.Right-click the subscription you want to synchronize, and then click View Synchronization Status.

  5. Nella finestra di dialogo Visualizza stato sincronizzazione - <Sottoscrittore>:<DatabaseSottoscrizione> fare clic su Avvia.In the View Synchronization Status - <Subscriber>:<SubscriptionDatabase> dialog box, click Start. Al termine della sincronizzazione verrà visualizzato il messaggio Sincronizzazione completata .When synchronization is complete, the message Synchronization completed is displayed.

  6. Scegliere Chiudi.Click Close.

Per sincronizzare una sottoscrizione push su richiesta in Management Studio (nel Sottoscrittore)To synchronize a push subscription on demand in Management Studio (at the Subscriber)

  1. Connettersi al Sottoscrittore in Management StudioManagement Studioe quindi espandere il nodo del server.Connect to the Subscriber in Management StudioManagement Studio, and then expand the server node.

  2. Espandere la cartella Replica e quindi la cartella Sottoscrizioni locali .Expand the Replication folder, and then expand the Local Subscriptions folder.

  3. Fare clic con il pulsante destro del mouse sulla sottoscrizione che si desidera sincronizzare e quindi scegliere Visualizza stato sincronizzazione.Right-click the subscription you want to synchronize, and then click View Synchronization Status.

  4. Viene visualizzato un messaggio in cui si chiede di stabilire una connessione al server di distribuzione.A message is displayed about establishing a connection to the Distributor. Scegliere OK.Click OK.

  5. Nella finestra di dialogo Visualizza stato sincronizzazione - <Sottoscrittore>:<DatabaseSottoscrizione> fare clic su Avvia.In the View Synchronization Status - <Subscriber>:<SubscriptionDatabase> dialog box, click Start. Al termine della sincronizzazione verrà visualizzato il messaggio Sincronizzazione completata .When synchronization is complete, the message Synchronization completed is displayed.

  6. Scegliere Chiudi.Click Close.

Per sincronizzare una sottoscrizione push su richiesta in Monitoraggio replicaTo synchronize a push subscription on demand in Replication Monitor

  1. In Monitoraggio replica espandere un gruppo di server di pubblicazione nel riquadro di sinistra, espandere un server di pubblicazione e quindi fare clic su una pubblicazione.In Replication Monitor, expand a Publisher group in the left pane, expand a Publisher, and then click a publication.

  2. Fare clic sulla scheda Tutte le sottoscrizioni .Click the All Subscriptions tab.

  3. Fare clic con il pulsante destro del mouse sulla sottoscrizione che si desidera sincronizzare e quindi scegliere Avvia sincronizzazione.Right-click the subscription you want to synchronize, and then click Start Synchronizing.

  4. Per visualizzare lo stato della sincronizzazione, fare clic con il pulsante destro del mouse sulla sottoscrizione e quindi scegliere Visualizza dettagli.To view synchronization progress, right-click the subscription, and then click View Details.

Utilizzo degli agenti di replica Using Replication Agents

Le sottoscrizioni push possono essere sincronizzate a livello di programmazione e su richiesta richiamando il file eseguibile dell'agente di replica appropriato dal prompt dei comandi.Push subscriptions can be synchronized programmatically and on-demand by invoking the appropriate replication agent executable file from the command prompt. Il file eseguibile dell'agente di replica richiamato dipenderà dal tipo di pubblicazione a cui appartiene la sottoscrizione push.The replication agent executable file that is invoked will depend on the type of publication to which the push subscription belongs.

Per avviare l'agente di distribuzione per sincronizzare una sottoscrizione push di una pubblicazione transazionaleTo start the Distribution Agent to synchronize a push subscription to a transactional publication

  1. Eseguire distrib.exedal prompt dei comandi o in un file batch nel server di distribuzione.From the command prompt or in a batch file at the Distributor, execute distrib.exe. Specificare gli argomenti della riga di comando seguenti:Specify the following command-line arguments:

    • -Publisher-Publisher

    • -PublisherDB-PublisherDB

    • -Distributor-Distributor

    • -Subscriber-Subscriber

    • -SubscriberDB-SubscriberDB

    • -SubscriptionType = 0-SubscriptionType = 0

      Se si usano l'autenticazione di SQL Server, è inoltre necessario specificare gli argomenti seguenti: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

      Importante

      Se possibile, usare l'autenticazione di Windows.When possible, use Windows Authentication.

Per avviare l'agente di merge per sincronizzare una sottoscrizione push di una pubblicazione di tipo mergeTo start the Merge Agent to synchronize a push subscription to a merge publication

  1. Eseguire replmerg.exedal prompt dei comandi o in un file batch nel server di distribuzione.From the command prompt or in a batch file at the Distributor, execute replmerg.exe. Specificare gli argomenti della riga di comando seguenti:Specify the following command-line arguments:

    • -Publisher-Publisher

    • -PublisherDB-PublisherDB

    • -Publication-Publication

    • -Distributor-Distributor

    • -Subscriber-Subscriber

    • -SubscriberDB-SubscriberDB

    • -SubscriptionType = 0-SubscriptionType = 0

      Se si usano l'autenticazione di SQL Server, è inoltre necessario specificare gli argomenti seguenti: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

      Importante

      Se possibile, usare l'autenticazione di Windows.When possible, use Windows Authentication.

Esempi (agenti di replica) Examples (Replication Agents)

Nell'esempio seguente viene avviato l'agente di distribuzione per sincronizzare una sottoscrizione 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  

Nell'esempio seguente viene avviato l'agente di merge per sincronizzare una sottoscrizione 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  

Utilizzo di RMO (Replication Management Objects) Using Replication Management Objects (RMO)

È possibile sincronizzare le sottoscrizioni push a livello di programmazione tramite gli oggetti RMO (Replication Management Objects) e l'accesso tramite codice gestito alle funzionalità dell'agente di replica.You can synchronize push subscriptions programmatically by using Replication Management Objects (RMO) and managed code access to replication agent functionalities. Le classi usate per la sincronizzazione di una sottoscrizione push dipendono dal tipo di pubblicazione a cui appartiene la sottoscrizione.The classes that you use to synchronize a push subscription depend on the type of publication to which the subscription belongs.

Nota

Se si desidera avviare una sincronizzazione eseguita in modo autonomo senza effetti sull'applicazione, avviare l'agente in modo asincrono.If you want to start a synchronization that runs autonomously without affecting your application, start the agent asynchronously. Se invece si desidera monitorare i risultati della sincronizzazione e ricevere callback dall'agente durante il processo di sincronizzazione (ad esempio per la visualizzazione di una barra di stato) è necessario avviare l'agente in modo sincrono.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. Per i sottoscrittori di MicrosoftMicrosoft SQL Server 2005 Express EditionSQL Server 2005 Express Edition , l'agente deve essere avviato in modo sincrono.For MicrosoftMicrosoft SQL Server 2005 Express EditionSQL Server 2005 Express Edition Subscribers, you must start the agent synchronously.

Per sincronizzare una sottoscrizione push di una pubblicazione snapshot o transazionaleTo synchronize a push subscription to a snapshot or transactional publication

  1. Creare una connessione al server di distribuzione tramite la classe ServerConnection .Create a connection to the Distributor by using the ServerConnection class.

  2. Creare un'istanza della classe TransSubscription e impostare le proprietà seguenti:Create an instance of the TransSubscription class and set the following properties:

  3. Chiamare il metodo LoadProperties per recuperare le proprietà rimanenti della sottoscrizione.Call the LoadProperties method to get the remaining subscription properties. Se il metodo restituisce false, verificare che la sottoscrizione esista.If this method returns false, verify that the subscription exists.

  4. Avviare l'agente di distribuzione nel server di distribuzione in uno dei modi seguenti:Start the Distribution Agent at the Distributor in one of the following ways:

    • Chiamare il metodo SynchronizeWithJob nell'istanza di TransSubscription creata al passaggio 2.Call the SynchronizeWithJob method on the instance of TransSubscription from step 2. Questo metodo consente di avviare l'agente di distribuzione in modo asincrono e il controllo viene restituito immediatamente all'applicazione durante l'esecuzione del processo dell'agente.This method starts the Distribution Agent asynchronously, and control immediately returns to your application while the agent job is running. Non è possibile chiamare questo metodo se la sottoscrizione è stata creata con il valore false for CreateSyncAgentByDefault.You cannot call this method if the subscription was created with a value of false for CreateSyncAgentByDefault.

    • Recuperare un'istanza della classe TransSynchronizationAgent dalla proprietà SynchronizationAgent e chiamare il metodo Synchronize .Obtain an instance of the TransSynchronizationAgent class from the SynchronizationAgent property, and call the Synchronize method. Questo metodo avvia l'agente in modo sincrono e il controllo rimane al processo dell'agente in esecuzione.This method starts the agent synchronously, and control remains with the running agent job. Nella modalità sincrona è possibile gestire l'evento Status durante l'esecuzione dell'agente.During synchronous execution you can handle the Status event while the agent is running.

Per sincronizzare una sottoscrizione push di una pubblicazione di tipo mergeTo synchronize a push subscription to a merge publication

  1. Creare una connessione al server di distribuzione tramite la classe ServerConnection .Create a connection to the Distributor by using the ServerConnection class.

  2. Creare un'istanza della classe MergeSubscription e impostare le proprietà seguenti:Create an instance of the MergeSubscription class, and set the following properties:

  3. Chiamare il metodo LoadProperties per recuperare le proprietà rimanenti della sottoscrizione.Call the LoadProperties method to get the remaining subscription properties. Se il metodo restituisce false, verificare che la sottoscrizione esista.If this method returns false, verify that the subscription exists.

  4. Avviare l'agente di merge nel server di distribuzione in uno dei modi seguenti:Start the Merge Agent at the Distributor in one of the following ways:

    • Chiamare il metodo SynchronizeWithJob nell'istanza di MergeSubscription creata al passaggio 2.Call the SynchronizeWithJob method on the instance of MergeSubscription from step 2. Questo metodo consente di avviare l'agente di merge in modo asincrono e il controllo viene restituito immediatamente all'applicazione durante l'esecuzione del processo dell'agente.This method starts the Merge Agent asynchronously, and control immediately returns to your application while the agent job is running. Non è possibile chiamare questo metodo se la sottoscrizione è stata creata con il valore false for CreateSyncAgentByDefault.You cannot call this method if the subscription was created with a value of false for CreateSyncAgentByDefault.

    • Recuperare un'istanza della classe MergeSynchronizationAgent dalla proprietà SynchronizationAgent e chiamare il metodo Synchronize .Obtain an instance of the MergeSynchronizationAgent class from the SynchronizationAgent property, and call the Synchronize method. Questo metodo avvia l'agente di merge in modo sincrono e il controllo rimane al processo dell'agente in esecuzione.This method starts the Merge Agent synchronously, and control remains with the running agent job. Nella modalità sincrona è possibile gestire l'evento Status durante l'esecuzione dell'agente.During synchronous execution, you can handle the Status event while the agent is running.

Esempi (RMO) Examples (RMO)

In questo esempio viene illustrata la sincronizzazione di una sottoscrizione push di una pubblicazione transazionale, con avvio asincrono dell'agente usando il processo dell'agente.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

In questo esempio viene illustrata la sincronizzazione di una sottoscrizione push di una pubblicazione transazionale, con avvio sincrono dell'agente.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

In questo esempio viene illustrata la sincronizzazione di una sottoscrizione push di una pubblicazione di tipo merge, con avvio asincrono dell'agente usando il processo dell'agente.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

In questo esempio viene illustrata la sincronizzazione di una sottoscrizione push di una pubblicazione di tipo merge, con avvio sincrono dell'agente.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

Vedere ancheSee Also

Concetti di base relativi a RMO (Replication Management Objects) Replication Management Objects Concepts
Sincronizzare i dati Synchronize Data
Replication Security Best PracticesReplication Security Best Practices