Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se describe cómo sincronizar una suscripción de extracción en SQL Server 2014 mediante SQL Server Management Studio, agentes de replicación o objetos de administración de replicación (RMO).
Uso de SQL Server Management Studio
El Agente de distribución (para las instantáneas y la replicación transaccional) o el Agente de mezcla (para la replicación de mezcla) sincronizan las suscripciones. Los agentes pueden ejecutarse continuamente, a petición o según una programación. Para obtener más información sobre cómo especificar programaciones de sincronización, vea Especificar programaciones de sincronización.
Sincronice una suscripción a petición desde la carpeta Suscripciones locales en SQL Server Management Studio.
Para sincronizar una suscripción de 'pull' a petición en Management Studio
Conéctese al suscriptor en Management Studio y expanda el nodo de servidor.
Expanda la carpeta Replicación y, a continuación, expanda la carpeta Suscripciones locales .
Haga clic con el botón derecho en la suscripción que desea sincronizar y, a continuación, haga clic en Ver estado de sincronización.
En el cuadro de diálogo Ver estado de sincronización: <Suscriptor>:<SuscripciónBase de datos> , haga clic en Iniciar. Una vez completada la sincronización, se muestra el mensaje Sincronización completada .
Haga clic en Cerrar.
Agentes de replicación
Las suscripciones de extracción se pueden sincronizar de forma programada y a petición invocando el archivo ejecutable del agente de replicación adecuado desde el símbolo del sistema. El archivo ejecutable del agente de replicación que se invoca dependerá del tipo de publicación al que pertenece la suscripción de extracción. Para obtener más información, consulte Agentes de replicación.
Nota:
Los agentes de replicación se conectan al servidor local mediante las credenciales de autenticación de Windows del usuario que inició el agente desde la línea de comandos. Estas credenciales de Windows también se usan al conectarse a servidores remotos mediante la autenticación integrada de Windows.
Para iniciar el agente de distribución desde la línea de comandos o desde un archivo de procesamiento por lotes
Desde el símbolo del sistema o en un archivo por lotes, inicie el Agente de distribución de replicación ejecutando distrib.exe, especificando los argumentos de la línea de comandos siguientes:
-Editor
-PublisherDB
-Distribuidor
-DistributorSecurityMode = 1
-Suscriptor
-SubscriberDB
-SubscriberSecurityMode = 1
-SubscriptionType = 1
Si usa la autenticación de SQL Server, también debe especificar los argumentos siguientes:
-DistributorLogin
-DistributorPassword
-DistributorSecurityMode = 0
-PublisherLogin
-PublisherPassword
-PublisherSecurityMode = 0
-SubscriberLogin
-SubscriberPassword
-SubscriberSecurityMode = 0
Para iniciar el agente de mezcla desde el símbolo del sistema o desde un archivo por lotes
Desde el símbolo del sistema o en un archivo por lotes, inicie el Agente de mezcla de replicación ejecutando replmerg.exe, especificando los argumentos de la línea de comandos siguientes:
-Editor
-PublisherDB
-PublisherSecurityMode = 1
-Publicación
-Distribuidor
-DistributorSecurityMode = 1
-Suscriptor
-SubscriberSecurityMode = 1
-SubscriberDB
-SubscriptionType = 1
Si usa la autenticación de SQL Server, también debe especificar los argumentos siguientes:
-DistributorLogin
-DistributorPassword
-DistributorSecurityMode = 0
-PublisherLogin
-PublisherPassword
-PublisherSecurityMode = 0
-SubscriberLogin
-SubscriberPassword
-SubscriberSecurityMode = 0
Ejemplos (agentes de replicación)
En el ejemplo siguiente se inicia el Agente de distribución para así sincronizar una suscripción de tipo pull. Todas las conexiones se realizan mediante la autenticación de Windows.
SET instancename=USERTEST2
REM<snippetbat_synctranpullsub_10>
REM -- Declare the variables.
SET Publisher=%instancename%
SET Subscriber=%instancename%
SET PublicationDB=AdventureWorks2012
SET SubscriptionDB=AdventureWorks2012Replica
SET Publication=AdvWorksProductsTran
REM -- Start the Distribution Agent.
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 1
REM</snippetbat_synctranpullsub_10>
PAUSE
En el ejemplo siguiente se inicia el Agente de combinación para sincronizar una suscripción de extracción. Todas las conexiones se realizan mediante la autenticación de Windows.
@ECHO OFF
SET instancename=USERTEST2
REM<snippetbat_syncmergepullsub_10>
REM -- Declare the variables.
SET Publisher=%instancename%
SET Subscriber=%instancename%
SET PublicationDB=AdventureWorks2012
SET SubscriptionDB=AdventureWorks2012Replica
SET Publication=AdvWorksSalesOrdersMerge
REM --Start the Merge Agent with concurrent upload and download processes.
REM -- The following command must be supplied without line breaks.
"C:\Program Files\Microsoft SQL Server\120\COM\REPLMERG.EXE" -Publication %Publication%
-Publisher %Publisher% -Subscriber %Subscriber% -Distributor %Publisher%
-PublisherDB %PublicationDB% -SubscriberDB %SubscriptionDB% -PublisherSecurityMode 1
-OutputVerboseLevel 2 -SubscriberSecurityMode 1 -SubscriptionType 1 -DistributorSecurityMode 1
-Validate 3 -ParallelUploadDownload 1
REM</snippetbat_syncmergepullsub_10>
PAUSE
El uso de Replication Management Objects (RMO)
Puede sincronizar suscripciones de extracción programáticamente usando Replication Management Objects (RMO) y accediendo a las funcionalidades del agente de replicación mediante código administrado. Las clases que se usan para sincronizar una suscripción de extracción dependen del tipo de publicación al que pertenece la suscripción.
Nota:
Si desea iniciar una sincronización que se ejecute de forma autónoma sin afectar a la aplicación, inicie el agente de forma asincrónica. Sin embargo, si desea supervisar el resultado de la sincronización y obtener respuestas del agente durante el proceso de sincronización (por ejemplo, para mostrar una barra de progreso), debe iniciar el agente de forma sincrónica. Para suscriptores de MicrosoftSQL Server 2005 Express Edition, debe iniciar el agente de forma sincrónica.
Para sincronizar una suscripción de extracción a una publicación instantánea o transaccional
Cree una conexión al suscriptor mediante la ServerConnection clase .
Cree una instancia de la TransPullSubscription clase y establezca las siguientes propiedades:
Nombre de la base de datos de suscripción para DatabaseName.
Nombre de la publicación a la que pertenece la suscripción para PublicationName.
El nombre de la base de datos de publicación para PublicationDBName.
Nombre del publicador para PublisherName.
La conexión creada en el paso 1 para ConnectionContext.
Llame al LoadProperties método para obtener las propiedades de suscripción restantes. Si este método devuelve
false
, compruebe que la suscripción existe.Inicie el Agente de distribución en el suscriptor de una de las maneras siguientes:
Llame al método SynchronizeWithJob en la instancia de TransPullSubscription del paso 2. Este método inicia el Agente de distribución de forma asincrónica y el control vuelve inmediatamente a la aplicación mientras se ejecuta el trabajo del agente. No puede llamar a este método para suscriptores de SQL Server 2005 Express Edition o si la suscripción se creó con un valor de
false
para CreateSyncAgentByDefault (el valor predeterminado).Obtenga una instancia de la clase TransSynchronizationAgent de la propiedad SynchronizationAgent y llame al método Synchronize. Este método inicia el agente de forma sincrónica y el control permanece con el trabajo del agente en ejecución. Durante la ejecución sincrónica, puede controlar el Status evento mientras se ejecuta el agente.
Nota:
Si especificó un valor de
false
para CreateSyncAgentByDefault (valor predeterminado) al crear la suscripción de extracción, también debe especificar Distributor, DistributorSecurityMode, y opcionalmente DistributorLogin y DistributorPassword, porque los metadatos relacionados con el trabajo del agente para la suscripción no están disponibles en MSsubscription_properties.
Para sincronizar una suscripción de extracción a una publicación de combinación
Cree una conexión al suscriptor mediante la ServerConnection clase .
Cree una instancia de la MergePullSubscription clase y establezca las siguientes propiedades:
Nombre de la base de datos de suscripción para DatabaseName.
Nombre de la publicación a la que pertenece la suscripción para PublicationName.
Nombre de la base de datos publicada para PublicationDBName.
Nombre del publicador para PublisherName.
La conexión creada en el paso 1 para ConnectionContext.
Llame al LoadProperties método para obtener las propiedades de suscripción restantes. Si este método devuelve
false
, compruebe que la suscripción existe.Inicie el Agente de mezcla en el Servidor Suscriptor de alguna de las siguientes maneras:
Llame al método SynchronizeWithJob en la instancia de MergePullSubscription del paso 2. Este método inicia el Agente de mezcla de forma asincrónica y el control vuelve inmediatamente a la aplicación mientras se ejecuta el trabajo del agente. No puede llamar a este método para suscriptores de SQL Server 2005 Express Edition o si la suscripción se creó con un valor de
false
para CreateSyncAgentByDefault (el valor predeterminado).Obtenga una instancia de la clase MergeSynchronizationAgent de la propiedad SynchronizationAgent, y llame al método Synchronize. Este método inicia el Agente de mezcla de forma sincrónica y el control permanece con el trabajo del agente en ejecución. Durante la ejecución sincrónica, puede controlar el Status evento mientras se ejecuta el agente.
Nota:
Si especificó un valor de
false
para CreateSyncAgentByDefault (el valor predeterminado) al crear la suscripción de extracción, también debe especificar Distributor, DistributorSecurityMode, PublisherSecurityMode, HostName, SubscriptionType, ExchangeType y, opcionalmente, DistributorLogin, DistributorPassword, PublisherLogin y PublisherPassword porque el trabajo del agente relacionado con los metadatos de la suscripción no está disponible en MSsubscription_properties.
Ejemplos (RMO)
En este ejemplo se sincroniza una suscripción de extracción a una publicación transaccional, donde el agente se inicia de forma asincrónica mediante el trabajo del agente.
// Define server, publication, and database names.
String subscriberName = subscriberInstance;
String publisherName = publisherInstance;
String publicationName = "AdvWorksProductTran";
String publicationDbName = "AdventureWorks2012";
String subscriptionDbName = "AdventureWorks2012Replica";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
TransPullSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define subscription properties.
subscription = new TransPullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription and the job exists, start the agent job.
if (subscription.LoadProperties() && subscription.AgentJobId != null)
{
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)
{
// Do appropriate error handling here.
throw new ApplicationException("The subscription could not be synchronized.", ex);
}
finally
{
conn.Disconnect();
}
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As TransPullSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define subscription properties.
subscription = New TransPullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription and the job exists, start the agent job.
If subscription.LoadProperties() And Not subscription.AgentJobId Is Nothing Then
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
' Do appropriate error handling here.
Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
conn.Disconnect()
End Try
En este ejemplo, se sincroniza una suscripción pull con una publicación transaccional, y el agente se inicia sincrónicamente.
// 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 Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
TransPullSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define the pull subscription.
subscription = new TransPullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription exists, then start the synchronization.
if (subscription.LoadProperties())
{
// Check that we have enough metadata to start the agent.
if (subscription.PublisherSecurity != 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 pull subscription does not exist.
throw new ApplicationException(String.Format(
"A 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. Verify that the subscription has " +
"been defined correctly.", 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 Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As TransPullSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define the pull subscription.
subscription = New TransPullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription exists, then start the synchronization.
If subscription.LoadProperties() Then
' Check that we have enough metadata to start the agent.
If Not subscription.PublisherSecurity Is Nothing Then
' Write agent output to a log file.
subscription.SynchronizationAgent.Output = "distagent.log"
subscription.SynchronizationAgent.OutputVerboseLevel = 2
' 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 pull subscription does not exist.
Throw New ApplicationException(String.Format( _
"A 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. Verify that the subscription has " + _
"been defined correctly.", ex)
Finally
conn.Disconnect()
End Try
En este ejemplo se sincroniza una suscripción de descarga a una publicación de mezcla, donde el agente se inicia de forma asincrónica mediante una tarea del agente.
// Define server, publication, and database names.
String subscriberName = subscriberInstance;
String publisherName = publisherInstance;
String publicationName = "AdvWorksSalesOrdersMerge";
String publicationDbName = "AdventureWorks2012";
String subscriptionDbName = "AdventureWorks2012Replica";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define subscription properties.
subscription = new MergePullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription and the job exists, start the agent job.
if (subscription.LoadProperties() && subscription.AgentJobId != null)
{
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)
{
// Do appropriate error handling here.
throw new ApplicationException("The subscription could not be synchronized.", ex);
}
finally
{
conn.Disconnect();
}
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2012"
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define subscription properties.
subscription = New MergePullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription and the job exists, start the agent job.
If subscription.LoadProperties() And Not subscription.AgentJobId Is Nothing Then
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
' Do appropriate error handling here.
Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
conn.Disconnect()
End Try
En este ejemplo se sincroniza una suscripción 'pull' a una publicación de mezcla, donde el agente se inicia sincrónicamente.
// 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 Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription exists, then start the synchronization.
if (subscription.LoadProperties())
{
// Check that we have enough metadata to start the agent.
if (subscription.PublisherSecurity != null || subscription.DistributorSecurity != 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 pull subscription does not exist.
throw new ApplicationException(String.Format(
"A 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. Verify that the subscription has " +
"been defined correctly.", 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 Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription exists, then start the synchronization.
If subscription.LoadProperties() Then
' Check that we have enough metadata to start the agent.
If Not subscription.PublisherSecurity Is Nothing Or subscription.DistributorSecurity Is Nothing Then
' Output agent messages to the console.
subscription.SynchronizationAgent.OutputVerboseLevel = 1
subscription.SynchronizationAgent.Output = ""
' 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.")
End If
Else
' Do something here if the pull subscription does not exist.
Throw New ApplicationException(String.Format( _
"A 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. Verify that the subscription has " + _
"been defined correctly.", ex)
Finally
conn.Disconnect()
End Try
En este ejemplo se sincroniza una suscripción de extracción a una publicación de combinación mediante la sincronización web. La suscripción se creó sin el trabajo del agente y los metadatos de suscripción relacionados, por lo que el agente debe iniciarse de forma sincrónica y se proporciona información adicional de la suscripción.
// Define the server, publication, and database names.
string subscriberName = subscriberInstance;
string publisherName = publisherInstance;
string distributorName = distributorInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
string hostname = @"adventure-works\garrett1";
string webSyncUrl = "https://" + publisherInstance + "/SalesOrders/replisapi.dll";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
MergePullSubscription subscription;
MergeSynchronizationAgent agent;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription exists, then start the synchronization.
if (subscription.LoadProperties())
{
// Get the agent for the subscription.
agent = subscription.SynchronizationAgent;
// Check that we have enough metadata to start the agent.
if (agent.PublisherSecurityMode == null)
{
// Set the required properties that could not be returned
// from the MSsubscription_properties table.
agent.PublisherSecurityMode = SecurityMode.Integrated;
agent.DistributorSecurityMode = SecurityMode.Integrated;
agent.Distributor = publisherName;
agent.HostName = hostname;
// Set optional Web synchronization properties.
agent.UseWebSynchronization = true;
agent.InternetUrl = webSyncUrl;
agent.InternetSecurityMode = SecurityMode.Standard;
agent.InternetLogin = winLogin;
agent.InternetPassword = winPassword;
}
// Enable agent output to the console.
agent.OutputVerboseLevel = 1;
agent.Output = "";
// Synchronously start the Merge Agent for the subscription.
agent.Synchronize();
}
else
{
// Do something here if the pull subscription does not exist.
throw new ApplicationException(String.Format(
"A 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. Verify that the subscription has " +
"been defined correctly.", 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"
Dim hostname As String = "adventure-works\garrett1"
Dim webSyncUrl As String = "https://" + publisherInstance + "/SalesOrders/replisapi.dll"
' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As MergePullSubscription
Dim agent As MergeSynchronizationAgent
Try
' Connect to the Subscriber.
conn.Connect()
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription exists, then start the synchronization.
If subscription.LoadProperties() Then
' Get the agent for the subscription.
agent = subscription.SynchronizationAgent
' Check that we have enough metadata to start the agent.
If agent.PublisherSecurityMode = Nothing Then
' Set the required properties that could not be returned
' from the MSsubscription_properties table.
agent.PublisherSecurityMode = SecurityMode.Integrated
agent.Distributor = publisherInstance
agent.DistributorSecurityMode = SecurityMode.Integrated
agent.HostName = hostname
' Set optional Web synchronization properties.
agent.UseWebSynchronization = True
agent.InternetUrl = webSyncUrl
agent.InternetSecurityMode = SecurityMode.Standard
agent.InternetLogin = winLogin
agent.InternetPassword = winPassword
End If
' Enable agent logging to the console.
agent.OutputVerboseLevel = 1
agent.Output = ""
' Synchronously start the Merge Agent for the subscription.
agent.Synchronize()
Else
' Do something here if the pull subscription does not exist.
Throw New ApplicationException(String.Format( _
"A 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. Verify that the subscription has " + _
"been defined correctly.", ex)
Finally
conn.Disconnect()
End Try
Véase también
Sincronizar datos
Crear una suscripción de extracción
Procedimientos recomendados de seguridad de replicación