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 crear una suscripción de extracción en SQL Server 2014 mediante SQL Server Management Studio, Transact-SQL o Replication Management Objects (RMO).
La configuración de una suscripción de extracción para la replicación P2P puede realizarse mediante un script, pero no está disponible a través del asistente.
Uso de SQL Server Management Studio
Cree una suscripción de extracción en el publicador o en el suscriptor mediante el Asistente para Nuevas Suscripciones. Siga las instrucciones en el asistente para:
Especifique el publicador y la publicación.
Seleccione dónde se ejecutarán los agentes de replicación. Para una suscripción de arrastre, seleccione Ejecutar cada agente en su suscriptor (suscripciones de arrastre) en la página Ubicación del Agente de distribución o la página Ubicación del Agente de mezcla, dependiendo del tipo de publicación.
Especifique suscriptores y bases de datos de suscripciones.
Especifique los inicios de sesión y las contraseñas usados para las conexiones realizadas por los agentes de replicación:
Para las suscripciones a publicaciones de instantáneas y transaccionales, especifique las credenciales en la página Seguridad del Agente de distribución .
Para las suscripciones a publicaciones de combinación, especifique las credenciales en la página Seguridad del Agente de Combinación.
Para obtener información sobre los permisos necesarios para cada agente, consulte Modelo de seguridad del agente de replicación.
Especifique una programación de sincronización y cuándo se debe inicializar el suscriptor.
Especifique opciones adicionales para publicaciones de combinación: tipo de suscripción; valores para el filtrado con parámetros; e información para la sincronización a través de HTTPS si la publicación está habilitada para la sincronización web.
Especifique opciones adicionales para publicaciones transaccionales que permitan actualizar suscripciones: si los suscriptores deben confirmar cambios en el publicador inmediatamente o escribirlos en una cola; credenciales usadas para conectarse desde el suscriptor al publicador.
Opcionalmente, cree un script para la suscripción.
Para crear una suscripción pull desde el Publicador
Conéctese al publicador en Microsoft SQL Server Management Studio y, a continuación, expanda el nodo de servidor.
Expanda la carpeta Replicación y, a continuación, expanda la carpeta Publicaciones locales .
Haga clic con el botón derecho en la publicación para la que desea crear una o varias suscripciones y, a continuación, haga clic en Nuevas suscripciones.
Complete las páginas del Asistente para Nueva Suscripción.
Para crear una suscripción de tipo pull desde el suscriptor
Conéctese al suscriptor en SQL Server Management Studio y, a continuación, expanda el nodo de servidor.
Expanda la carpeta Replicación .
Haga clic con el botón derecho en la carpeta Suscripciones locales y, a continuación, haga clic en Nuevas suscripciones.
En la página Publicación del Asistente para nueva suscripción, seleccione <Buscar publicador> de SQL Server o <Buscar publicador> de Oracle en la lista desplegable Publicador.
Conéctese al publicador en el cuadro de diálogo Conectar al servidor .
Seleccione una publicación en la página Publicación .
Complete las páginas del Asistente para la Nueva Suscripción.
Uso de Transact-SQL
Las suscripciones de extracción se pueden crear mediante programación usando procedimientos almacenados de replicación. Los procedimientos almacenados utilizados dependerán del tipo de publicación al que pertenece la suscripción.
Para crear una suscripción por extracción a una publicación instantánea o transaccional
En el editor, verifique que la publicación admite suscripciones pull ejecutando sp_helppublication (Transact-SQL).
Si el valor de allow_pull en el conjunto de resultados es 1, la publicación admite suscripciones de extracción.
Si el valor de allow_pull es 0, ejecute sp_changepublication (Transact-SQL), especificando allow_pull para @property y
true
para @value.
En el suscriptor, ejecute sp_addpullsubscription (Transact-SQL). Especifique @publisher y @publication. Para obtener información sobre la actualización de suscripciones, consulte Creación de una suscripción actualizable a una publicación transaccional.
En el suscriptor, ejecute sp_addpullsubscription_agent (Transact-SQL). Especifique lo siguiente:
Parámetros @publisher, @publisher_db y @publication.
Las credenciales de Microsoft Windows con las que se ejecuta el Agente de distribución en el suscriptor para @job_login y @job_password.
Nota:
Las conexiones realizadas con la autenticación integrada de Windows siempre usan las credenciales de Windows especificadas por @job_login y @job_password. El Agente de distribución siempre realiza la conexión local al suscriptor mediante la autenticación integrada de Windows. De forma predeterminada, el agente se conectará al distribuidor mediante la autenticación integrada de Windows.
(Opcional) Valor 0 para @distributor_security_mode y la información de inicio de sesión de Microsoft SQL Server para @distributor_login y @distributor_password, si necesita usar la autenticación de SQL Server al conectarse al distribuidor.
Una programación de tareas para el trabajo del Agente de Distribución para esta suscripción. Para obtener más información, vea Especificar programaciones de sincronización.
En el publicador, ejecute sp_addsubscription (Transact-SQL) para registrar la suscripción de extracción. Especifique @publication, @subscriber y @destination_db. Especifique un valor de pull para @subscription_type.
Para crear una suscripción de extracción a una publicación de combinación
En el publicador, verifique que la publicación admite suscripciones pull ejecutando sp_helpmergepublication (Transact-SQL).
Si el valor de allow_pull en el conjunto de resultados es 1, la publicación admite suscripciones de extracción.
Si el valor de allow_pull es 0, ejecute sp_changemergepublication (Transact-SQL), especificando allow_pull para @property y
true
para @value.
En el suscriptor, ejecute sp_addmergepullsubscription (Transact-SQL). Especifique @publisher, @publisher_db, @publication y los parámetros siguientes:
@subscriber_type : especifique local para una suscripción de cliente y global para una suscripción de servidor.
@subscription_priority : especifique una prioridad para la suscripción (de 0,00 a 99,99). Esto solo es necesario para una suscripción de servidor.
Para más información, consulte Replicación de mezcla avanzada: detección y resolución de conflictos.
En el suscriptor, ejecute sp_addmergepullsubscription_agent (Transact-SQL). Especifique los parámetros siguientes:
@publisher, @publisher_db y @publication.
Las credenciales de Windows con las que se ejecuta el Agente de mezcla en el suscriptor para @job_login y @job_password.
Nota:
Las conexiones realizadas con la autenticación integrada de Windows siempre usan las credenciales de Windows especificadas por @job_login y @job_password. El Agente de mezcla siempre realiza la conexión local al suscriptor mediante la autenticación integrada de Windows. De forma predeterminada, el agente se conectará al distribuidor y al publicador mediante la autenticación integrada de Windows.
(Opcional) Valor 0 para @distributor_security_mode y la información de inicio de sesión de SQL Server para @distributor_login y @distributor_password, si necesita usar la autenticación de SQL Server al conectarse al distribuidor.
(Opcional) Valor 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password, si necesita usar la autenticación de SQL Server al conectarse al publicador.
Una programación para el trabajo del Agente de mezcla para esta suscripción. Para obtener más información, vea Crear una suscripción actualizable a una publicación transaccional.
En el publicador, ejecute sp_addmergesubscription (Transact-SQL). Especifique @publication, @subscriber, @subscriber_db y un valor de pull para @subscription_type. Esto registra la suscripción de pull.
Ejemplos (Transact-SQL)
En el ejemplo siguiente se crea una suscripción de extracción a una publicación transaccional. El primer lote se ejecuta en el suscriptor y el segundo lote se ejecuta en el publicador. Los valores de inicio de sesión y contraseña se proporcionan en tiempo de ejecución mediante variables de scripting sqlcmd.
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2012';
-- At the subscription database, create a pull subscription
-- to a transactional publication.
USE [AdventureWorks2012Replica]
EXEC sp_addpullsubscription
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB;
-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication,
@distributor = @publisher,
@job_login = $(Login),
@job_password = $(Password);
GO
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2012Replica';
-- At the Publisher, register the subscription, using the defaults.
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'pull',
@status = N'subscribed';
GO
En el siguiente ejemplo, se crea una suscripción de extracción para una publicación de combinación. El primer lote se ejecuta en el suscriptor y el segundo lote se ejecuta en el publicador. Los valores de inicio de sesión y contraseña se proporcionan en tiempo de ejecución mediante variables de scripting sqlcmd .
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2012';
SET @hostname = N'adventure-works\david8';
-- At the subscription database, create a pull subscription
-- to a merge publication.
USE [AdventureWorks2012Replica]
EXEC sp_addmergepullsubscription
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB;
-- Add an agent job to synchronize the pull subscription.
EXEC sp_addmergepullsubscription_agent
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication,
@distributor = @publisher,
@job_login = $(Login),
@job_password = $(Password),
@hostname = @hostname;
GO
-- Execute this batch at the Publisher.
DECLARE @myMergePub AS sysname;
DECLARE @mySub AS sysname;
DECLARE @mySubDB AS sysname;
SET @myMergePub = N'AdvWorksSalesOrdersMerge';
SET @mySub = N'MYSUBSERVER';
SET @mySubDB = N'AdventureWorks2012Replica';
-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2012]
EXEC sp_addmergesubscription @publication = @myMergePub,
@subscriber = @mySub, @subscriber_db = @mySubDB,
@subscription_type = N'pull';
GO
El uso de Replication Management Objects (RMO)
Las clases de RMO usadas para crear una suscripción de extracción dependen del tipo de publicación al que pertenece la suscripción.
Para crear una suscripción de extracción a una publicación transaccional o instantánea
Cree conexiones tanto al suscriptor como al publicador mediante la ServerConnection clase .
Cree una instancia de la clase TransPublication mediante la conexión del Publisher del paso 1. Especifique Name, DatabaseName y ConnectionContext.
Llame al método LoadProperties. Si este método devuelve
false
, las propiedades especificadas en el paso 2 son incorrectas o la publicación no existe en el servidor.Realice un AND lógico bit a bit (
&
en Visual C# yAnd
en Visual Basic) entre la Attributes propiedad y AllowPull. Si el resultado es None, establezca Attributes en el resultado de un OR lógico bit a bit (|
en Visual C# y en Visual Basic) entre Attributes yOr
AllowPull. A continuación, llame a CommitPropertyChanges para habilitar las suscripciones de extracción.Si la base de datos de suscripciones no existe, créela mediante la Database clase . Para obtener más información, vea Crear, modificar y quitar bases de datos.
Cree una instancia de la clase TransPullSubscription.
Establezca las siguientes propiedades de suscripción:
al ServerConnection suscriptor creado en el paso 1 para ConnectionContext.
Nombre de la base de datos de suscripciones para DatabaseName.
Nombre del publicador para PublisherName.
Nombre de la base de datos de publicación para PublicationDBName.
Nombre de la publicación para PublicationName.
Los campos Login, Password o SecurePassword* de SynchronizationAgentProcessSecurity proporcionan las credenciales de la cuenta de Microsoft Windows bajo la cual se ejecuta el Agente de distribución en el suscriptor. Esta cuenta se usa para establecer conexiones locales con el suscriptor y para realizar conexiones remotas mediante la autenticación de Windows.
Nota:
La configuración SynchronizationAgentProcessSecurity no es necesaria cuando un miembro del rol fijo de
sysadmin
servidor crea la suscripción, pero se recomienda. En este caso, el agente suplantará la cuenta del Agente SQL Server. Para obtener más información, consulte Modelo de seguridad del agente de replicación.(Opcional) Un valor de
true
para CreateSyncAgentByDefault para crear un trabajo de agente que se usa para sincronizar la suscripción. Si especificafalse
(valor predeterminado), la suscripción solo se puede sincronizar mediante programación y debe especificar propiedades adicionales de TransSynchronizationAgent al acceder a este objeto desde la SynchronizationAgent propiedad . Para obtener más información, consulte Synchronize a Pull Subscription(Sincronizar una suscripción de extracción).Nota:
El Agente SQL Server no está disponible en todas las ediciones de MicrosoftSQL Server. Para obtener una lista de las características compatibles con las ediciones de SQL Server, vea Características compatibles con las ediciones de SQL Server 2014. Al especificar un valor de
true
para Suscriptores Express, no se crea la tarea del agente. Sin embargo, los metadatos importantes relacionados con la suscripción se almacenan en el suscriptor.(Opcional) Establezca los campos SqlStandardLogin y SqlStandardPassword o SecureSqlStandardPassword de DistributorSecurity, usando la autenticación de SQL Server para conectarse al distribuidor.
Llame al método Create.
Con la instancia de la TransPublication clase del paso 2, llame al MakePullSubscriptionWellKnown método para registrar la suscripción de extracción con el publicador. Si este registro ya existe, se produce una excepción.
Para crear una suscripción de extracción a una publicación de combinación
Cree conexiones tanto al suscriptor como al publicador mediante la ServerConnection clase .
Cree una instancia de la clase MergePublication mediante la conexión del Publisher del paso 1. Especifique Name, DatabaseNamey ConnectionContext.
Llame al método LoadProperties. Si este método devuelve
false
, las propiedades especificadas en el paso 2 son incorrectas o la publicación no existe en el servidor.Realice un AND lógico a nivel de bits (
&
en Visual C# yAnd
en Visual Basic) entre la propiedad Attributes y AllowPull. Si el resultado es None, establezca Attributes en el resultado de un OR lógico bit a bit (|
en Visual C# y en Visual Basic) entre Attributes yOr
AllowPull. A continuación, llame a CommitPropertyChanges para habilitar las suscripciones de extracción.Si la base de datos de suscripciones no existe, créela mediante la Database clase . Para obtener más información, vea Crear, modificar y quitar bases de datos.
Cree una instancia de la clase MergePullSubscription.
Establezca las siguientes propiedades de suscripción:
al ServerConnection suscriptor creado en el paso 1 para ConnectionContext.
Nombre de la base de datos de suscripciones para DatabaseName.
Nombre del publicador para PublisherName.
Nombre de la base de datos de publicación para PublicationDBName.
Nombre de la publicación para PublicationName.
Los campos Login y Password o SecurePassword* de SynchronizationAgentProcessSecurity para proporcionar las credenciales de la cuenta de Microsoft Windows bajo la cual se ejecuta el Agente de Mezcla en el suscriptor. Esta cuenta se usa para establecer conexiones locales con el suscriptor y para realizar conexiones remotas mediante la autenticación de Windows.
Nota:
La configuración SynchronizationAgentProcessSecurity no es necesaria cuando un miembro del rol fijo de
sysadmin
servidor crea la suscripción, pero se recomienda. En este caso, el agente suplantará la cuenta del Agente SQL Server. Para obtener más información, consulte Modelo de seguridad del agente de replicación.(Opcional) Un valor de
true
para CreateSyncAgentByDefault crear un trabajo de agente que se usa para sincronizar la suscripción. Si especificafalse
(valor predeterminado), la suscripción solo se puede sincronizar mediante programación y debe especificar propiedades adicionales de MergeSynchronizationAgent al acceder a este objeto desde la SynchronizationAgent propiedad . Para obtener más información, consulte Synchronize a Pull Subscription(Sincronizar una suscripción de extracción).(Opcional) Establezca los campos SqlStandardLogin, SqlStandardPassword o SecureSqlStandardPassword de DistributorSecurity al usar la autenticación de SQL Server para conectarse al distribuidor.
(Opcional) Establezca los campos SqlStandardLogin y SqlStandardPassword o SecureSqlStandardPassword de PublisherSecurity al usar la autenticación de SQL Server para conectarse al publicador.
Llame al método Create.
Con la instancia de la MergePublication clase del paso 2, llame al MakePullSubscriptionWellKnown método para registrar la suscripción de extracción con el publicador. Si este registro ya existe, se produce una excepción.
Ejemplo (RMO)
En este ejemplo se crea una suscripción de tipo pull a una publicación transaccional. Las credenciales de la cuenta de Microsoft Windows usadas para crear el trabajo del Agente de distribución se pasan en tiempo de ejecución.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
TransPublication publication;
TransPullSubscription subscription;
try
{
// Connect to the Publisher and Subscriber.
subscriberConn.Connect();
publisherConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions.
publication = new TransPublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.IsExistingObject)
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
// Define the pull subscription.
subscription = new TransPullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
// Specify the Windows login credentials for the Distribution Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = true;
// By default, subscriptions to transactional publications are synchronized
// continuously, but in this case we only want to synchronize on demand.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (TransSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName)
{
registered = true;
}
}
if (!registered)
{
// Register the subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
TransSubscriberType.ReadOnly);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksProductTran"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransPullSubscription
Try
' Connect to the Publisher and Subscriber.
subscriberConn.Connect()
publisherConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions.
publication = New TransPublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.IsExistingObject Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
' Define the pull subscription.
subscription = New TransPullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.Description = "Pull subscription to " + publicationDbName _
+ " on " + subscriberName + "."
' Specify the Windows login credentials for the Distribution Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = True
' By default, subscriptions to transactional publications are synchronized
' continuously, but in this case we only want to synchronize on demand.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As TransSubscription In publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName And _
existing.SubscriptionDBName = subscriptionDbName Then
registered = True
End If
Next existing
If Not registered Then
' Register the subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
TransSubscriberType.ReadOnly)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
En este ejemplo se crea una suscripción de extracción a una publicación de combinación. Las credenciales de la cuenta de Windows usadas para crear el trabajo del Agente de mezcla se pasan en tiempo de ejecución.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
string hostname = @"adventure-works\garrett1";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
subscription.HostName = hostname;
// Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = true;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
MergeSubscriberType.Local, 0);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
Dim hostname As String = "adventure-works\garrett1"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.LoadProperties() Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.HostName = hostname
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = True
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As MergeSubscription In _
publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName Then
registered = True
End If
Next
If Not registered Then
' Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
MergeSubscriberType.Local, 0)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
En este ejemplo se crea una suscripción de extracción a una publicación de combinación sin crear un trabajo de agente asociado ni metadatos de suscripción en MSsubscription_properties. Las credenciales de la cuenta de Windows usadas para crear el trabajo del Agente de mezcla se pasan en tiempo de ejecución.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
// Specify that an agent job not be created for this subscription. The
// subscription can only be synchronized by running the Merge Agent directly.
// Subscripition metadata stored in MSsubscription_properties will not
// be available and must be specified at run time.
subscription.CreateSyncAgentByDefault = false;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
MergeSubscriberType.Local, 0);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.LoadProperties() Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
' Specify that an agent job not be created for this subscription. The
' subscription can only be synchronized by running the Merge Agent directly.
' Subscripition metadata stored in MSsubscription_properties will not
' be available and must be specified at run time.
subscription.CreateSyncAgentByDefault = False
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As MergeSubscription In _
publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName Then
registered = True
End If
Next
If Not registered Then
' Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
MergeSubscriberType.Local, 0)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
En este ejemplo se crea una suscripción de arrastre a una publicación de combinación que se puede sincronizar a través de Internet mediante la sincronización a través de la web. Las credenciales de la cuenta de Windows que se usan para crear el trabajo del Agente de mezcla se pasan en tiempo de ejecución. Para obtener más información, vea Configurar sincronización web.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
string hostname = @"adventure-works\garrett1";
string webSyncUrl = "https://" + publisherInstance + "/WebSync/replisapi.dll";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions and Web synchronization.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
if ((publication.Attributes & PublicationAttributes.AllowWebSynchronization) == 0)
{
publication.Attributes |= PublicationAttributes.AllowWebSynchronization;
}
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
subscription.HostName = hostname;
// Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Enable Web synchronization.
subscription.UseWebSynchronization = true;
subscription.InternetUrl = webSyncUrl;
// Specify the same Windows credentials to use when connecting to the
// Web server using HTTPS Basic Authentication.
subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication;
subscription.InternetLogin = winLogin;
subscription.InternetPassword = winPassword;
// Ensure that we create a job for this subscription.
subscription.CreateSyncAgentByDefault = true;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
MergeSubscriberType.Local, 0);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
Dim hostname As String = "adventure-works\garrett1"
Dim webSyncUrl As String = "https://" + publisherInstance + "/WebSync/replisapi.dll"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions and Web synchronization.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.LoadProperties() Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
If (publication.Attributes And PublicationAttributes.AllowWebSynchronization) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowWebSynchronization
End If
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.HostName = hostname
subscription.CreateSyncAgentByDefault = True
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Enable Web synchronization.
subscription.UseWebSynchronization = True
subscription.InternetUrl = webSyncUrl
' Specify the same Windows credentials to use when connecting to the
' Web server using HTTPS Basic Authentication.
subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication
subscription.InternetLogin = winLogin
subscription.InternetPassword = winPassword
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As MergeSubscription In _
publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName Then
registered = True
End If
Next
If Not registered Then
' Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
MergeSubscriberType.Local, 0)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Véase también
Conceptos de objetos de gestión de replicación
Ver y modificar las propiedades de una suscripción de extracción
Configurar sincronización web
Suscribirse a publicaciones
Procedimientos recomendados de seguridad de replicación