Creación de una suscripción de inserción
Se aplica a: SQL Server Azure SQL Database
En este tema se describe cómo crear una suscripción de inserción en SQL Server mediante SQL Server Management Studio, Transact-SQL o Replication Management Objects (RMO). Para más información sobre cómo crear una suscripción de inserción para un suscriptor que no sea de SQL Server, vea Crear una suscripción para un suscriptor que no sea de SQL Server.
Nota:
Azure SQL Managed Instance puede ser un publicador, un distribuidor y un suscriptor para la replicación transaccional y de instantáneas. Las bases de datos de Azure SQL Database solo pueden ser suscriptores de extracción para la replicación transaccional y de instantáneas. Para obtener más información, vea Replicación transaccional con Azure SQL Database y Azure SQL Managed Instance.
Uso de SQL Server Management Studio
Cree una suscripción de inserción en el publicador o en el suscriptor con el Asistente para nuevas suscripciones. Siga las páginas del asistente para:
Especificar el publicador y la publicación.
Seleccionar dónde se ejecutarán los agentes de replicación. Para una suscripción de inserción, seleccione Ejecutar todos los agentes en el distribuidor (suscripciones de inserción) en la página Ubicación del Agente de distribución o Ubicación del Agente de mezcla , dependiendo del tipo de publicación.
Especificar suscriptores y bases de datos de suscripciones.
Especifique los nombres de inicio de sesión y las contraseñas que se utilizan 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 mezcla .
Para obtener información acerca de los permisos que necesita cada agente, vea Modelo de seguridad del Agente de replicación.
Especifique una programación de sincronización y cuándo se debe inicializar el suscriptor.
Especifique otras opciones para las publicaciones de combinación: el tipo de suscripción y los valores para los filtros con parámetros.
Especifique opciones adicionales para las publicaciones transaccionales que permiten suscripciones de actualización. Una opción es decidir si los suscriptores deben confirmar los cambios inmediatamente en el publicador o escribirlos en una cola. Otra opción consiste en configurar las credenciales utilizadas para conectarse del suscriptor al publicador.
Opcionalmente, puede crear un script para la suscripción.
Para crear una suscripción de inserción desde el publicador
Conéctese al publicador en Microsoft SQL Server Management Studio y, a continuación, expanda el nodo del servidor.
Expanda la carpeta Replicación y, a continuación, expanda la carpeta Publicaciones locales .
Haga clic con el botón secundario en la publicación en la que quiera crear una o varias suscripciones y, a continuación, seleccione Nuevas suscripciones.
Complete las páginas del Asistente para nuevas suscripciones.
Para crear una suscripción de inserción desde el suscriptor
Conéctese al suscriptor en SQL Server Management Studio y expanda el nodo de servidor.
Expanda la carpeta Replicación .
Haga clic con el botón secundario en la carpeta Suscripciones locales y, a continuación, seleccione Nuevas suscripciones.
En la página Publicación del Asistente para nuevas suscripciones, seleccione <Buscar publicador de SQL Server> o <Buscar publicador de Oracle> de 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 nuevas suscripciones.
Usar Transact-SQL
Las suscripciones de inserción se pueden crear mediante programación usando procedimientos almacenados de replicación. Los procedimientos almacenados que se usen dependerán del tipo de publicación a la que corresponda la suscripción.
Importante
Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar las credenciales en un archivo de script, proteja el archivo para evitar el acceso no autorizado.
Para crear una suscripción de inserción para una publicación de instantáneas o transaccional
En el publicador de la base de datos de publicaciones, compruebe que la publicación admita suscripciones de inserción mediante la ejecución de sp_helppublication.
Si el valor de allow_push es 1, se admiten las suscripciones de inserción.
Si el valor de allow_push es 0, ejecute sp_changepublication. Especifique allow_push para @property y true para @value.
En el publicador de la base de datos de publicaciones, ejecute sp_addsubscription. Especifique @publication, @subscribery @destination_db. Especifique un valor push para @subscription_type. Para obtener información sobre cómo actualizar suscripciones, vea Crear una suscripción actualizable en una publicación transaccional.
En el publicador de la base de datos de publicaciones, ejecute sp_addpushsubscription_agent. Especifique lo siguiente:
Los parámetros @subscriber, @subscriber_dby @publication .
Las credenciales de Windows con las que se ejecuta el Agente de distribución en el distribuidor para @job_login y @job_password.
Nota:
Las conexiones que se realicen a través de la Autenticación integrada de Windows siempre usarán las credenciales de Windows que especifican @job_login y @job_password. El Agente de distribución siempre realiza la conexión local con el distribuidor mediante la autenticación integrada de Windows. De forma predeterminada, el agente se conectará con el suscriptor mediante la autenticación integrada de Windows.
(Opcional) El valor 0 para @subscriber_security_mode y la información de inicio de sesión de Microsoft SQL Server para @subscriber_login y @subscriber_password. Especifique estos parámetros si necesita usar Autenticación de SQL Server al conectarse al suscriptor.
Una programación para el trabajo del Agente de distribución de esta suscripción. Para obtener más información, consulte Especificar programaciones de sincronización.
Importante
Al crear una suscripción de inserción en un publicador con un distribuidor remoto, los valores suministrados para todos los parámetros, incluidos job_login y job_password, se envían al distribuidor como texto simple. Antes de ejecutar este procedimiento almacenado, se recomienda cifrar la conexión entre el publicador y su distribuidor remoto. Para obtener más información, vea Habilitar conexiones cifradas en el motor de base de datos (Administrador de configuración de SQL Server).
Para crear una suscripción de inserción para una publicación de combinación
En el publicador de la base de datos de publicaciones, compruebe que la publicación admita suscripciones de inserción mediante la ejecución de sp_helpmergepublication.
Si el valor de allow_push es 1, la publicación admite operaciones de inserción.
Si el valor de allow_push no es 1, ejecute sp_changemergepublication. Especifique allow_push para @property y true para @value.
En la base de datos de publicación del publicador, ejecute sp_addmergesubscription. Especifique los parámetros siguientes:
@publication. Éste es el nombre de la publicación.
@subscriber_type. Para una suscripción de cliente, especifique local. Para una suscripción de servidor, especifique global.
@subscription_priority. Para una suscripción de servidor, especifique una prioridad para la suscripción (de0,00 a 99,99).
Para más información, consulte Detección y resolución de conflictos de replicación de mezcla avanzada.
En el publicador de la base de datos de publicaciones, ejecute sp_addmergepushsubscription_agent. Especifique lo siguiente:
Los parámetros @subscriber, @subscriber_dby @publication .
Las credenciales de Windows con las que se ejecuta el Agente de mezcla en el distribuidor para @job_login y @job_password.
Nota:
Las conexiones que se realicen a través de la Autenticación integrada de Windows siempre usarán las credenciales de Windows que especifican @job_login y @job_password. El Agente de mezcla siempre realiza la conexión local con el distribuidor mediante la Autenticación integrada de Windows. De forma predeterminada, el agente se conectará con el suscriptor mediante la autenticación integrada de Windows.
(Opcional) El valor 0 para @subscriber_security_mode y la información de inicio de sesión de SQL Server para @subscriber_login y @subscriber_password. Especifique estos parámetros si necesita usar Autenticación de SQL Server al conectarse al suscriptor.
(Opcional) El valor 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password. Especifique estos valores si necesita usar Autenticación de SQL Server al conectarse al publicador.
Una programación para el Agente de mezcla para la suscripción. Para obtener más información, consulte Especificar programaciones de sincronización.
Importante
Al crear una suscripción de inserción en un publicador con un distribuidor remoto, los valores suministrados para todos los parámetros, incluidos job_login y job_password, se envían al distribuidor como texto simple. Antes de ejecutar este procedimiento almacenado, se recomienda cifrar la conexión entre el publicador y su distribuidor remoto. Para obtener más información, vea Habilitar conexiones cifradas en el motor de base de datos (Administrador de configuración de SQL Server).
Ejemplos (Transact-SQL)
El siguiente ejemplo crea una suscripción de inserción en una publicación transaccional. Los valores de inicio de sesión y contraseña se proporcionan en tiempo de ejecución a través de variables de scripting de 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".
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2022Replica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks2022]
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'push';
--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO
El siguiente ejemplo crea una suscripción de inserción en una publicación de combinación. Los valores de inicio de sesión y contraseña se proporcionan en tiempo de ejecución a través de variables de scripting de 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".
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';
SET @hostname = N'adventure-works\david8'
-- Add a push subscription to a merge publication.
USE [AdventureWorks2022];
EXEC sp_addmergesubscription
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@subscription_type = N'push',
@hostname = @hostname;
--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO
Uso de Replication Management Objects
Las suscripciones de inserción se pueden crear mediante programación usando Replication Management Objects (RMO). Las clases RMO que se utilizan para crear una suscripción de inserción dependen del tipo de publicación para el que se crea la suscripción.
Importante
Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales, use los servicios de cifrado proporcionados por Microsoft Windows .NET Framework.
Para crear una suscripción de inserción para una publicación de instantáneas o transaccional
Cree una conexión al publicador mediante la clase ServerConnection .
Cree una instancia de la clase TransPublication con la conexión de publicador 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.
Ejecuta una operación lógica AND bit a bit (& en Visual C# y And en Visual Basic) entre la propiedad Attributes y AllowPush. Si el resultado es None, establezca Attributes en el resultado de una operación lógica OR bit a bit (| en Visual C# y Or en Visual Basic) entre Attributes y AllowPush. A continuación, llame a CommitPropertyChanges para habilitar las suscripciones de inserción.
Si la base de datos de suscripciones no existe, créela con la clase Database . Para obtener más información, consulte Crear, modificar y eliminar bases de datos.
Cree una instancia de la clase TransSubscription.
Establezca las siguientes propiedades de la suscripción:
La conexión ServerConnection al publicador creada en el paso 1 para ConnectionContext.
El nombre de la base de datos de suscripciones para SubscriptionDBName.
El nombre del suscriptor para SubscriberName.
El nombre de la base de datos de publicaciones para DatabaseName.
El nombre de la publicación para PublicationName.
Los parámetros Login y Password de SynchronizationAgentProcessSecurity para proporcionar las credenciales para la cuenta de Microsoft Windows con la que se ejecuta el Agente de distribución en el distribuidor. Esta cuenta se utiliza para realizar conexiones locales al distribuidor y conexiones remotas con la autenticación de Windows.
Nota:
No es necesario configurar SynchronizationAgentProcessSecurity cuando un miembro del rol fijo de servidor sysadmin crea la suscripción, pero es algo que recomendamos. En este caso, el agente suplantará a la cuenta del Agente SQL Server. Para más información, consulte Modelo de seguridad del Agente de replicación.
(Opcional) El valor true (predeterminado) para CreateSyncAgentByDefault para crear un trabajo del agente que se utiliza para sincronizar la suscripción. Si especifica false, la suscripción solo puede sincronizarse mediante programación.
(Opcional) configure WindowsAuthentication en Falso y los campos SqlStandardLogin y SqlStandardPassword o SecureSqlStandardPassword de SubscriberSecurity si utiliza la autenticación de SQL Server para conectarse al suscriptor.
Llame al método Create.
Importante
Al crear una suscripción de inserción en un publicador con un distribuidor remoto, los valores proporcionados para todas las propiedades, incluido SynchronizationAgentProcessSecurity, se envían al distribuidor como texto simple. Debe cifrar la conexión entre el publicador y su distribuidor remoto antes de llamar al método Create . Para obtener más información, vea Habilitar conexiones cifradas en el motor de base de datos (Administrador de configuración de SQL Server).
Para crear una suscripción de inserción para una publicación de combinación
Cree una conexión al publicador mediante la clase ServerConnection .
Cree una instancia de la clase MergePublication con la conexión de publicador 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.
Ejecuta una operación lógica AND bit a bit (& en Visual C# y And en Visual Basic) entre la propiedad Attributes y AllowPush. Si el resultado es None, establezca Attributes en el resultado de una operación lógica OR bit a bit (| en Visual C# y Or en Visual Basic) entre Attributes y AllowPush. A continuación, llame a CommitPropertyChanges para habilitar las suscripciones de inserción.
Si la base de datos de suscripciones no existe, créela con la clase Database . Para obtener más información, consulte Crear, modificar y eliminar bases de datos.
Cree una instancia de la clase MergeSubscription.
Establezca las siguientes propiedades de la suscripción:
La conexión ServerConnection al publicador creada en el paso 1 para ConnectionContext.
El nombre de la base de datos de suscripciones para SubscriptionDBName.
El nombre del suscriptor para SubscriberName.
El nombre de la base de datos de publicaciones para DatabaseName.
El nombre de la publicación para PublicationName.
Los parámetros Login y Password de SynchronizationAgentProcessSecurity para proporcionar las credenciales para la cuenta de Microsoft Windows con la que se ejecuta el Agente de mezcla en el distribuidor. Esta cuenta se utiliza para realizar conexiones locales al distribuidor y conexiones remotas a través de la autenticación de Windows.
Nota:
No es necesario configurar SynchronizationAgentProcessSecurity cuando un miembro del rol fijo de servidor sysadmin crea la suscripción, pero es algo que recomendamos. En este caso, el agente suplantará a la cuenta del Agente SQL Server. Para más información, consulte Modelo de seguridad del Agente de replicación.
(Opcional) El valor true (predeterminado) para CreateSyncAgentByDefault para crear un trabajo del agente que se utiliza para sincronizar la suscripción. Si especifica false, la suscripción solo puede sincronizarse mediante programación.
(Opcional) configure los campos SqlStandardLogin y SqlStandardPassword o SecureSqlStandardPassword de SubscriberSecurity si utiliza la autenticación de SQL Server para conectarse al suscriptor.
(Opcional) configure WindowsAuthentication en Falso y los campos SqlStandardLogin y SqlStandardPassword o SecureSqlStandardPassword de PublisherSecurity si utiliza la autenticación de SQL Server para conectarse al publicador.
Llame al método Create.
Importante
Al crear una suscripción de inserción en un publicador con un distribuidor remoto, los valores proporcionados para todas las propiedades, incluido SynchronizationAgentProcessSecurity, se envían al distribuidor como texto simple. Debe cifrar la conexión entre el publicador y su distribuidor remoto antes de llamar al método Create . Para obtener más información, vea Habilitar conexiones cifradas en el motor de base de datos (Administrador de configuración de SQL Server).
Ejemplos (RMO)
En este ejemplo se crea una suscripción de inserción para una publicación transaccional. Las credenciales de la cuenta de Windows utilizada para ejecutar 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 = "AdventureWorks2022Replica";
string publicationDbName = "AdventureWorks2022";
//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
// Create the objects that we need.
TransPublication publication;
TransSubscription subscription;
try
{
// Connect to the Publisher.
conn.Connect();
// Ensure that the publication exists and that
// it supports push subscriptions.
publication = new TransPublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = conn;
if (publication.IsExistingObject)
{
if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPush;
}
// Define the push subscription.
subscription = new TransSubscription();
subscription.ConnectionContext = conn;
subscription.SubscriberName = subscriberName;
subscription.PublicationName = publicationName;
subscription.DatabaseName = publicationDbName;
subscription.SubscriptionDBName = subscriptionDbName;
// Specify the Windows login credentials for the Distribution Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// 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 push subscription.
subscription.Create();
}
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
{
conn.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 = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"
'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransSubscription
Try
' Connect to the Publisher.
conn.Connect()
' Ensure that the publication exists and that
' it supports push subscriptions.
publication = New TransPublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = conn
If publication.IsExistingObject Then
If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPush
End If
' Define the push subscription.
subscription = New TransSubscription()
subscription.ConnectionContext = conn
subscription.SubscriberName = subscriberName
subscription.PublicationName = publicationName
subscription.DatabaseName = publicationDbName
subscription.SubscriptionDBName = subscriptionDbName
' Specify the Windows login credentials for the Distribution Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' 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 push subscription.
subscription.Create()
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
conn.Disconnect()
End Try
En este ejemplo se crea una suscripción de inserción para una publicación de combinación. Las credenciales de la cuenta de Windows utilizada para ejecutar 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 = "AdventureWorks2022Replica";
string publicationDbName = "AdventureWorks2022";
string hostname = @"adventure-works\garrett1";
//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergeSubscription subscription;
try
{
// Connect to the Publisher.
conn.Connect();
// Ensure that the publication exists and that
// it supports push subscriptions.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = conn;
if (publication.IsExistingObject)
{
if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPush;
}
// Define the push subscription.
subscription = new MergeSubscription();
subscription.ConnectionContext = conn;
subscription.SubscriberName = subscriberName;
subscription.PublicationName = publicationName;
subscription.DatabaseName = publicationDbName;
subscription.SubscriptionDBName = subscriptionDbName;
subscription.HostName = hostname;
// Set a schedule to synchronize the subscription every 2 hours
// during weekdays from 6am to 10pm.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly;
subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32(0x003E);
subscription.AgentSchedule.FrequencyRecurrenceFactor = 1;
subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour;
subscription.AgentSchedule.FrequencySubDayInterval = 2;
subscription.AgentSchedule.ActiveStartDate = 20051108;
subscription.AgentSchedule.ActiveEndDate = 20071231;
subscription.AgentSchedule.ActiveStartTime = 060000;
subscription.AgentSchedule.ActiveEndTime = 100000;
// Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Create the push subscription.
subscription.Create();
}
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
{
conn.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 = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"
Dim hostname As String = "adventure-works\garrett1"
'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergeSubscription
Try
' Connect to the Publisher.
conn.Connect()
' Ensure that the publication exists and that
' it supports push subscriptions.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = conn
If publication.IsExistingObject Then
If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPush
End If
' Define the push subscription.
subscription = New MergeSubscription()
subscription.ConnectionContext = conn
subscription.SubscriberName = subscriberName
subscription.PublicationName = publicationName
subscription.DatabaseName = publicationDbName
subscription.SubscriptionDBName = subscriptionDbName
subscription.HostName = hostname
' Set a schedule to synchronize the subscription every 2 hours
' during weekdays from 6am to 10pm.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly
subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32("0x003E", 16)
subscription.AgentSchedule.FrequencyRecurrenceFactor = 1
subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour
subscription.AgentSchedule.FrequencySubDayInterval = 2
subscription.AgentSchedule.ActiveStartDate = 20051108
subscription.AgentSchedule.ActiveEndDate = 20071231
subscription.AgentSchedule.ActiveStartTime = 60000
subscription.AgentSchedule.ActiveEndTime = 100000
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Create the push subscription.
subscription.Create()
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
conn.Disconnect()
End Try
Consulte también
Ver y modificar las propiedades de una suscripción de inserción
Prácticas recomendadas de seguridad de replicación
Creación de una publicación
Conceptos sobre Replication Management Objects
Sincronizar una suscripción de inserción
Suscribirse a publicaciones
Usar sqlcmd con variables de script