Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique explique comment créer un abonnement Push dans SQL Server 2014 à l’aide de SQL Server Management Studio, Transact-SQL ou Replication Management Objects (RMO). Pour plus d’informations sur la création d’un abonnement Push pour un abonné non-SQL Server, consultez Créer un abonnement pour un abonné non-SQL Server.
Utilisation de SQL Server Management Studio
Créez un abonnement push sur le serveur de publication ou l’abonné à l’aide de l’assistant nouvel abonnement. Suivez les étapes dans l'assistant pour :
Spécifiez l'Éditeur et la publication.
Sélectionnez l’emplacement d’exécution des agents de réplication. Pour un abonnement push, sélectionnez Exécuter tous les agents sur le serveur de distribution (abonnements push) sur la page Emplacement de l'Agent de distribution ou sur la page Emplacement de l'Agent de fusion, en fonction du type de publication.
Spécifiez des abonnés et des bases de données d’abonnement.
Spécifiez les connexions et les mots de passe utilisés pour les connexions effectuées par les agents de réplication :
Pour les abonnements aux publications instantanées et transactionnelle, spécifiez les informations d’identification sur la page Sécurité de l’agent de distribution.
Pour les abonnements aux publications de fusion, spécifiez les informations d’identification sur la page Sécurité de l’agent de fusion.
Pour plus d’informations sur les autorisations requises par chaque agent, consultez Le modèle de sécurité de l’agent de réplication.
Spécifiez une planification de synchronisation et quand l’Abonné doit être initialisé.
Spécifier des options supplémentaires pour les publications de fusion : type d’abonnement ; et les valeurs pour le filtrage paramétrable.
Spécifiez des options supplémentaires pour les publications transactionnelles qui autorisent la mise à jour des abonnements : si les Abonnés doivent valider immédiatement les modifications sur le serveur de publication ou les écrire dans une file d’attente ; informations d’identification utilisées pour se connecter à partir de l’Abonné au serveur de publication.
Si vous le souhaitez, scriptez l’abonnement.
Pour créer un abonnement Push à partir du serveur de publication
Connectez-vous au serveur de publication dans Microsoft SQL Server Management Studio, puis développez le nœud du serveur.
Développez le dossier Réplication , puis développez le dossier Publications locales .
Cliquez avec le bouton droit sur la publication pour laquelle vous souhaitez créer un ou plusieurs abonnements, puis cliquez sur Nouveaux abonnements.
Complétez les pages de l'Assistant de nouvelle abonnement.
Pour créer un abonnement Push à partir de l’Abonné
Connectez-vous à l’Abonné dans SQL Server Management Studio, puis développez le nœud du serveur.
Affichez le dossier Répliquer.
Cliquez avec le bouton droit sur le dossier Abonnements locaux , puis cliquez sur Nouveaux abonnements.
Dans la page Publication de l’Assistant Nouvel abonnement, sélectionnez <Rechercher un Éditeur SQL Server> ou <Rechercher un Éditeur Oracle> dans la liste déroulante Éditeur.
Connectez-vous au serveur de publication dans la boîte de dialogue Se connecter au serveur .
Sélectionnez une publication sur la page Publication.
Complétez les pages dans l’Assistant de Nouvel abonnement.
Utilisation de Transact-SQL
Les abonnements Push peuvent être créés de manière programmatique à l'aide de procédures stockées dédiées à la réplication. Les procédures stockées utilisées dépendent du type de publication auquel appartient l’abonnement.
Important
Si possible, invitez les utilisateurs à entrer des informations d’identification de sécurité au moment de l’exécution. Si vous devez stocker des informations d’identification dans un fichier de script, vous devez sécuriser le fichier pour empêcher l’accès non autorisé.
Pour créer un abonnement Push à une publication d’instantané ou transactionnelle
Sur le serveur de publication sur la base de données de publication, vérifiez que la publication prend en charge les abonnements push en exécutant sp_helppublication.
Si la valeur de allow_push est 1, les abonnements push sont pris en charge.
Si la valeur de allow_push est 0, exécutez sp_changepublication, en spécifiant allow_push pour @property et
truepour @value.
Sur le serveur de publication, dans la base de données de publication, exécutez sp_addsubscription. Spécifiez @publication, @subscriber et @destination_db. Spécifiez une valeur de push pour @subscription_type. Pour plus d’informations sur la mise à jour des abonnements, consultez Créer un abonnement pouvant être mis à jour dans une publication transactionnelle
Dans la base de données de publication du serveur de publication, exécutez sp_addpushsubscription_agent. Spécifiez les éléments suivants :
Paramètres @subscriber, @subscriber_db et @publication .
Informations d’identification Microsoft Windows sous lesquelles l’Agent de distribution sur le serveur de distribution s’exécute pour @job_login et @job_password.
Remarque
Les connexions effectuées à l’aide de l’authentification intégrée Windows utilisent toujours les informations d’identification Windows spécifiées par @job_login et @job_password. L’Agent de distribution établit toujours la connexion locale au serveur de distribution à l’aide de l’authentification intégrée Windows. Par défaut, l’agent se connecte à l’Abonné à l’aide de l’authentification intégrée Windows.
(Facultatif) Valeur 0 pour @subscriber_security_mode et les informations de connexion Microsoft SQL Server pour @subscriber_login et @subscriber_password. Spécifiez ces paramètres si vous devez utiliser l’authentification SQL Server lors de la connexion à l’Abonné.
Planification du travail de l’Agent de distribution pour cet abonnement. Pour plus d’informations, consultez Spécifier des planifications de synchronisation.
Important
Lors de la création d’un abonnement Push sur un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour tous les paramètres, notamment job_login et job_password, sont envoyées au serveur de distribution sous forme de texte brut. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d’exécuter cette procédure stockée. Pour plus d’informations, consultez Activer des connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).
Pour créer un abonnement Push à une publication de fusion
Sur le serveur de publication dans la base de données de publication, vérifiez que la publication prend en charge les abonnements push en exécutant sp_helpmergepublication.
Si la valeur de allow_push est 1, la publication prend en charge les abonnements Push.
Si la valeur de allow_push n’est pas 1, exécutez sp_changemergepublication, en spécifiant allow_push pour @property et
truepour @value.
Sur le serveur de publication sur la base de données de publication, exécutez sp_addmergesubscription, en spécifiant les paramètres suivants :
@publication. C'est le nom de la publication.
@subscriber_type. Pour un abonnement client, spécifiez local et pour un abonnement serveur, spécifiez global.
@subscription_priority. Pour un abonnement serveur, spécifiez une priorité pour l’abonnement (0,00 à 99,99).
Pour plus d’informations, consultez Détection et résolution avancées des conflits de réplication de fusion.
Dans la base de données de publication du serveur de publication, exécutez sp_addmergepushsubscription_agent. Spécifiez les éléments suivants :
Paramètres @subscriber, @subscriber_db et @publication .
Informations d’identification Windows sous lesquelles l’Agent de fusion s’exécute sur le serveur de distribution pour @job_login et @job_password.
Remarque
Les connexions effectuées à l’aide de l’authentification intégrée Windows utilisent toujours les informations d’identification Windows spécifiées par @job_login et @job_password. L’Agent de fusion établit toujours la connexion locale au serveur de distribution à l’aide de l’authentification intégrée Windows. Par défaut, l’agent se connecte à l’Abonné à l’aide de l’authentification intégrée Windows.
(Facultatif) Valeur 0 pour @subscriber_security_mode et les informations de connexion SQL Server pour @subscriber_login et @subscriber_password. Spécifiez ces paramètres si vous devez utiliser l’authentification SQL Server lors de la connexion à l’Abonné.
(Facultatif) Valeur 0 pour @publisher_security_mode et les informations de connexion SQL Server pour @publisher_login et @publisher_password. Spécifiez ces valeurs si vous devez utiliser l’authentification SQL Server lors de la connexion au serveur de publication.
Calendrier de la tâche de l’Agent de fusion pour cet abonnement. Pour plus d’informations, consultez Spécifier des planifications de synchronisation.
Important
Lors de la création d’un abonnement Push sur un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour tous les paramètres, notamment job_login et job_password, sont envoyées au serveur de distribution sous forme de texte brut. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d’exécuter cette procédure stockée. Pour plus d’informations, consultez Activer des connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).
Exemples (Transact-SQL)
L’exemple suivant crée un abonnement Push à une publication transactionnelle. Les valeurs de connexion et de mot de passe sont fournies au moment de l’exécution à l’aide de variables de script 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'AdventureWorks2012Replica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks2012]
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
L’exemple suivant crée un abonnement Push à une publication de fusion. Les valeurs de connexion et de mot de passe sont fournies au moment de l’exécution à l’aide de variables de script 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 [AdventureWorks2012];
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
Utilisation des objets RMO (Replication Management Objects)
Vous pouvez créer des abonnements push par programmation à l’aide des objets RMO (Replication Management Objects). Les classes RMO que vous utilisez pour créer un abonnement Push dépendent du type de publication auquel l’abonnement est créé.
Important
Si possible, invitez les utilisateurs à entrer des informations d’identification de sécurité au moment de l’exécution. Si vous devez stocker des informations d’identification, utilisez les services de chiffrement fournis par Microsoft Windows .NET Framework.
Pour créer un abonnement push à une publication d’instantané ou transactionnelle
Créez une connexion au serveur de publication à l’aide de la ServerConnection classe.
Créez une instance de la TransPublication classe à l’aide de la connexion Publisher à l’étape 1. Spécifiez Name, DatabaseNameet ConnectionContext.
Appelez la méthode LoadProperties . Si cette méthode retourne
false, les propriétés spécifiées à l’étape 2 sont incorrectes ou la publication n’existe pas sur le serveur.Effectuez un AND logique au niveau du bit (
&en Visual C# etAnden Visual Basic) entre la Attributes propriété et AllowPush. Si le résultat est None, définissez Attributes sur le résultat d'une opération logique OU au niveau du bit (|en Visual C# etOren Visual Basic) entre Attributes et AllowPush. Ensuite, appelez CommitPropertyChanges pour activer les abonnements Push.Si la base de données d’abonnement n’existe pas, créez-la à l’aide de la Database classe. Pour plus d’informations, consultez Création, modification et suppression de bases de données.
Créez une instance de la TransSubscription classe.
Définissez les propriétés d’abonnement suivantes :
ServerConnection vers l'éditeur créé à l'étape 1 pour ConnectionContext.
Nom de la base de données d’abonnement pour SubscriptionDBName.
Nom de l’Abonné pour SubscriberName.
Nom de la base de données de publication pour DatabaseName.
Nom de la publication pour PublicationName.
Les champs Login, Password ou SecurePassword* de SynchronizationAgentProcessSecurity permettent de fournir les informations d'identification pour le compte sous Microsoft Windows sous lequel l'Agent de distribution s'exécute sur le serveur de distribution. Ce compte est utilisé pour établir des connexions locales au serveur de distribution et établir des connexions à distance à l’aide de l’authentification Windows.
Remarque
Le paramètre SynchronizationAgentProcessSecurity n’est pas obligatoire lorsque l’abonnement est créé par un membre du
sysadminrôle serveur fixe, mais il est recommandé. Dans ce cas, l’agent emprunte l’identité du compte SQL Server Agent. Pour plus d’informations, consultez Le modèle de sécurité de l’agent de réplication.(Facultatif) Une valeur de
true(valeur par défaut) pour CreateSyncAgentByDefault afin de créer un travail d’agent utilisé pour synchroniser l’abonnement. Si vous spécifiezfalse, l’abonnement ne peut être synchronisé que par programmation.(Facultatif) Définissez les champs SqlStandardLogin et SqlStandardPassword ou SecureSqlStandardPassword de SubscriberSecurity lorsque vous utilisez l'authentification SQL Server pour se connecter à l'abonné.
Appelez la méthode Create .
Important
Lors de la création d’un abonnement Push sur un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour toutes les propriétés, y compris SynchronizationAgentProcessSecurity, sont envoyées au serveur de distribution sous forme de texte brut. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d’appeler la Create méthode. Pour plus d’informations, consultez Activer des connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).
Pour créer un abonnement Push à une publication de fusion
Créez une connexion au serveur de publication à l’aide de la ServerConnection classe.
Créez une instance de la MergePublication classe à l’aide de la connexion Publisher à l’étape 1. Spécifiez Name, DatabaseNameet ConnectionContext.
Appelez la méthode LoadProperties . Si cette méthode retourne
false, les propriétés spécifiées à l’étape 2 sont incorrectes ou la publication n’existe pas sur le serveur.Effectuez un AND logique au niveau du bit (
&en Visual C# etAnden Visual Basic) entre la Attributes propriété et AllowPush. Si le résultat est None, définissez Attributes sur le résultat d'un OR logique au niveau du bit (|en Visual C# etOren Visual Basic) entre Attributes et AllowPush. Ensuite, appelez CommitPropertyChanges pour activer les abonnements Push.Si la base de données d’abonnement n’existe pas, créez-la à l’aide de la Database classe. Pour plus d’informations, consultez Création, modification et suppression de bases de données.
Créez une instance de la MergeSubscription classe.
Définissez les propriétés d’abonnement suivantes :
Vers ServerConnection le serveur de publication créé à l’étape 1 pour ConnectionContext.
Nom de la base de données d’abonnement pour SubscriptionDBName.
Nom de l’Abonné pour SubscriberName.
Nom de la base de données de publication pour DatabaseName.
Nom de la publication pour PublicationName.
Les champs Login, Password ou SecurePassword* de SynchronizationAgentProcessSecurity afin de fournir les informations d'identification pour le compte Microsoft Windows sous lequel l'Agent de fusion s'exécute chez le Distribueur. Ce compte est utilisé pour établir des connexions locales au serveur de distribution et établir des connexions à distance à l’aide de l’authentification Windows.
Remarque
Le paramètre SynchronizationAgentProcessSecurity n’est pas obligatoire lorsque l’abonnement est créé par un membre du
sysadminrôle serveur fixe, mais il est recommandé. Dans ce cas, l’agent emprunte l’identité du compte SQL Server Agent. Pour plus d’informations, consultez Le modèle de sécurité de l’agent de réplication.(Facultatif) Utiliser une valeur de
true(par défaut) pour CreateSyncAgentByDefault afin de créer un travail d’agent utilisé pour synchroniser l’abonnement. Si vous spécifiezfalse, l’abonnement ne peut être synchronisé que par programmation.(Facultatif) Définissez les champs SqlStandardLogin et SqlStandardPassword ou SecureSqlStandardPassword de SubscriberSecurity lorsque vous utilisez l'authentification SQL Server pour vous connecter à l'abonné.
(Facultatif) Définissez les champs SqlStandardLogin et SqlStandardPassword ou SecureSqlStandardPassword de PublisherSecurity lors de l'utilisation de l'authentification SQL Server pour vous connecter au Publisher.
Appelez la méthode Create .
Important
Lors de la création d’un abonnement Push sur un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour toutes les propriétés, y compris SynchronizationAgentProcessSecurity, sont envoyées au serveur de distribution sous forme de texte brut. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d’appeler la Create méthode. Pour plus d’informations, consultez Activer des connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).
Exemples (RMO)
Cet exemple crée un abonnement Push à une publication transactionnelle. Les informations d’identification du compte Windows que vous utilisez pour exécuter le travail de l’Agent de distribution sont passées au moment de l’exécution.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(subscriberName);
// 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 = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
' 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
Cet exemple crée un abonnement Push à une publication de fusion. Les informations d’identification du compte Windows que vous utilisez pour exécuter le travail de l’Agent de fusion sont transmises lors de l’exécution.
// 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 a connection to the Publisher.
ServerConnection conn = new ServerConnection(subscriberName);
// 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 = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
Dim hostname As String = "adventure-works\garrett1"
'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
' 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
Voir aussi
Afficher et modifier les propriétés d’un abonnement push
Meilleures pratiques en matière de sécurité de réplication
Créer une publication
Concepts liés à RMO (Replication Management Objects)
Synchroniser un abonnement push
S’abonner aux Publications
Utiliser sqlcmd avec des variables de script