Créer un abonnement par émission (push)
Cette rubrique explique comment créer un abonnement par émission de données (push) dans SQL Server 2012 à l'aide de SQL Server Management Studio, de Transact-SQL ou d'objets RMO (Replication Management Objects). Pour plus d'informations sur la création d'un abonnement envoyé pour un Abonné non SQL Server, consultez Créer un abonnement pour un Abonné non-SQL Server.
Dans cette rubrique
Pour créer un abonnement par émission de données (push) à l'aide de :
SQL Server Management Studio
Transact-SQL
Objets RMO (Replication Management Objects)
Utilisation de SQL Server Management Studio
Créez un abonnement envoyé sur le serveur de publication ou l'Abonné à l'aide de l'Assistant Nouvel abonnement. Exécutez les étapes de l'Assistant pour :
Spécifier le serveur de publication et la publication.
Sélectionner l'emplacement d'exécution des Agents de réplication. Pour un abonnement envoyé, sélectionnez Exécuter tous les agents sur le serveur de distribution (abonnements par envoi de données (push)) dans la page Emplacement de l'Agent de distribution ou la page Emplacement de l'Agent de fusion selon le type de publication.
Spécifiez des Abonnés et des bases de données d'abonnement.
Spécifiez les noms de connexion et mots de passe utilisés pour les connexions établies par les Agents de réplication :
Pour les abonnements aux publications d'instantané et transactionnelles, spécifiez les informations d'identification dans la page Sécurité de l'Agent de distribution.
Pour les abonnements aux publications de fusion, spécifiez les informations d'identification dans la page Sécurité de l'Agent de fusion.
Pour plus d'informations sur les autorisations requises par chaque Agent, consultez Modèle de sécurité de l'Agent de réplication.
Spécifiez une planification de la synchronisation et le moment choisi pour initialiser l'Abonné.
Spécifiez les autres options pour les publications de fusion : type d'abonnement et valeurs pour le filtrage paramétré.
Spécifiez les autres options 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 ou encore les informations d'identification utilisées pour la connexion de l'Abonné au serveur de publication.
Créez éventuellement un script pour l'abonnement.
Pour créer un abonnement envoyé à 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 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.
Exécutez les étapes de l'Assistant Nouvel abonnement.
Pour créer un abonnement envoyé à partir de l'Abonné
Connectez-vous à l'Abonné dans SQL Server Management Studio puis développez le nœud du serveur.
Développez le dossier Réplication.
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 serveur de publication SQL Server> ou <Rechercher un serveur de publication Oracle> dans la liste déroulante Serveur de publication.
Connectez-vous au serveur de publication dans la boîte de dialogue Se connecter au serveur.
Sélectionnez une publication dans la page Publication.
Exécutez les étapes de l'Assistant Nouvel abonnement.
[Top]
Utilisation de Transact-SQL
Les abonnements par envoi de données peuvent être créés par programmation en utilisant des procédures stockées de réplication. Les procédures stockées utilisées dépendent du type de publication auquel l'abonnement appartient.
Remarque relative à la sécurité |
---|
Lorsque cela est possible, invitez les utilisateurs à saisir leurs informations d'identification au moment de l'exécution. Pour stocker les informations d'identification dans un fichier de script, vous devez sécuriser celui-ci de manière à empêcher tout accès non autorisé. |
Pour créer un abonnement par envoi de données vers un instantané ou une publication transactionnelle
Au niveau du serveur de publication sur la base de données de publication, vérifiez que la publication prend en charge les abonnements par envoi de données en exécutant sp_helppublication.
Si la valeur de allow_push est 1, les abonnements par envoi de données sont pris en charge.
Si la valeur de allow_push est 0, exécutez sp_changepublication, en spécifiant allow_push pour @property et true pour @value.
Au niveau du serveur de publication sur la base de données de publication, exécutez sp_addsubscription. Spécifiez @publication, @subscriber et @destination_db. Spécifiez la valeur push pour @subscription_type. Pour plus d'informations sur la mise à jour des abonnements, consultez Créer un abonnement pouvant être mis à jour pour une publication transactionnelle.
Au niveau du serveur de publication sur la base de données de publication, exécutez sp_addpushsubscription_agent. Spécifiez les informations suivantes :
Les paramètres @subscriber, @subscriber_db et @publication.
Les informations d'identification Microsoft Windows sous lesquelles l'Agent de distribution est exécuté sur le serveur de distribution pour @job_login et @job_password.
[!REMARQUE]
Les connexions établies à l'aide de l'authentification Windows intégrée utilisent toujours les informations d'identification Windows spécifiées par @job_login et @job_password. L'Agent de distribution crée 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 ces informations.
(Facultatif) La 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é.
Une planification du travail de l'Agent de distribution pour cet abonnement. Pour plus d'informations, consultez Spécifier des planifications de synchronisation.
Remarque relative à la sécurité Lors de la création d'un abonnement par émission de données sur un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour tous les paramètres, y compris job_login et job_password, sont envoyées au serveur de distribution en 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 les connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).
Pour créer un abonnement par envoi de données vers une publication de fusion
Au niveau du serveur de publication sur la base de données de publication, vérifiez que la publication prend en charge les abonnements par envoi de données en exécutant sp_helpmergepublication.
Si la valeur de allow_push est 1, la publication prend en charge les abonnements par envoi de données.
Si la valeur de allow_push est 1, exécutez sp_changemergepublication, en spécifiant allow_push pour @property et true pour @value.
Sur la base de données de publication du serveur de publication, exécutez sp_addmergesubscription, en spécifiant les paramètres suivants :
@publication. Il s'agit du 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 la priorité de l'abonnement (de 0.00 à 99.99).
Pour plus d'informations, consultez Détection et résolution avancées des conflits de réplication de fusion.
Sur la base de données de publication du serveur de publication, exécutez sp_addmergepushsubscription_agent. Spécifiez les informations suivantes :
Les paramètres @subscriber, @subscriber_db et @publication.
Les informations d'identification Windows sous lesquelles l'Agent de fusion est exécuté 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 crée 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 ces informations.
(Facultatif) La 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) La 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 à l'abonné.
Une planification du travail de l'Agent de fusion pour cet abonnement. Pour plus d'informations, consultez Spécifier des planifications de synchronisation.
Remarque relative à la sécurité Lors de la création d'un abonnement par émission de données sur un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour tous les paramètres, y compris job_login et job_password, sont envoyées au serveur de distribution en 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 les 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 par envoi de données vers une publication transactionnelle. Les valeurs de connexion et de mot de passe sont fournies lors de l'exécution à l'aide des 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 par envoi de données vers une publication de fusion. Les valeurs de connexion et de mot de passe sont fournies lors de l'exécution à l'aide des 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
[Top]
Utilisation d'objets RMO (Replication Management Objects)
Vous pouvez créer par programme des abonnements par émission de données (push) à l'aide d'objets RMO (Replication Management Objects). Les classes RMO que vous utilisez pour créer un abonnement par envoi de données dépendent du type de publication sur laquelle l'abonnement a été créé.
Remarque relative à la sécurité |
---|
Dans la mesure du possible, invitez les utilisateurs à entrer les 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 par envoi de données vers un instantané ou une publication transactionnelle
Créez une connexion à l'Agent de publication à l'aide de la classe ServerConnection.
Créez une instance de la classe TransPublication en utilisant la connexion au serveur de publication de l'étape 1. Spécifiez Name, DatabaseName et ConnectionContext.
Appelez la méthode LoadProperties. Si elle retourne la valeur false, les propriétés spécifiées à l'étape 2 sont incorrectes, ou la publication n'existe pas sur le serveur.
Effectuez une opération AND logique au niveau du bit (& dans Visual C# et And dans Visual Basic) entre la propriété Attributes et AllowPush. Si le résultat est None, définissez Attributes avec le résultat d'un OR logique au niveau du bit ( |en Visual c# et Or en Visual Basic) entre Attributes et AllowPush. Appelez ensuite CommitPropertyChanges pour activer les abonnements par envoi de données.
Si la base de données d'abonnements n'existe pas, créez-la en utilisant la classe Database. Pour plus d'informations, consultez Création, modification et suppression de bases de données.
Crée une instance de la classe TransSubscription.
Définissez les propriétés suivantes des abonnements :
ServerConnection sur l'Agent de publication créé à l'étape 1 pour ConnectionContext.
Nom de la base de données d'abonnements 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.
Champs Login et Password ou SecurePassword de SynchronizationAgentProcessSecurity pour fournir les informations d'identification pour le compte Microsoft Windows sous lequel l'Agent de distribution fonctionne sur le serveur de distribution. Ce compte permet de créer des connexions locales avec le serveur de distribution et des connexions distantes à l'aide de l'authentification Windows.
[!REMARQUE]
La configuration de SynchronizationAgentProcessSecurity lorsqu'un abonnement est créé par un membre du rôle serveur fixe sysadmin n'est pas nécessaire, mais elle est néanmoins recommandée. Dans ce cas, l'Agent va emprunter l'identité du compte de l'Agent SQL Server. Pour plus d'informations, consultez Modèle de sécurité de l'Agent de réplication.
(Facultatif) Valeur true (par défaut) de CreateSyncAgentByDefault pour créer un travail de l'Agent qui permet de synchroniser l'abonnement. Si vous spécifiez false, l'abonnement peut uniquement être synchronisé par programme.
(Facultatif) Définissez les champs SqlStandardLogin et SqlStandardPassword ou SecureSqlStandardPassword deSubscriberSecurity lorsque vous utilisez l'authentification SQL Server pour vous connecter à l'abonné.
Appelez la méthode Create.
Remarque relative à la sécurité Lors de la création d'un abonnement par émission de données 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 en texte brut. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d'appeler la méthode Create. Pour plus d'informations, consultez Activer les connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).
Pour créer un abonnement par envoi de données vers une publication de fusion
Créez une connexion à l'Agent de publication à l'aide de la classe ServerConnection.
Créez une instance de la classe MergePublication en utilisant la connexion au serveur de publication de l'étape 1. Spécifiez Name, DatabaseName et ConnectionContext.
Appelez la méthode LoadProperties. Si elle retourne la valeur false, les propriétés spécifiées à l'étape 2 sont incorrectes, ou la publication n'existe pas sur le serveur.
Effectuez une opération AND logique au niveau du bit (& dans Visual C# et And dans Visual Basic) entre la propriété Attributes et AllowPush. Si le résultat est None, définissez Attributes avec le résultat d'un OR logique au niveau du bit ( |en Visual c# et Or en Visual Basic) entre Attributes et AllowPush. Appelez ensuite CommitPropertyChanges pour activer les abonnements par envoi de données.
Si la base de données d'abonnements n'existe pas, créez-la en utilisant la classe Database. Pour plus d'informations, consultez Création, modification et suppression de bases de données.
Créez une instance de la classe MergeSubscription.
Définissez les propriétés suivantes des abonnements :
ServerConnection sur l'Agent de publication créé à l'étape 1 pour ConnectionContext.
Nom de la base de données d'abonnements 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.
Champs Login et Password ou SecurePassword de SynchronizationAgentProcessSecurity pour fournir les informations d'identification pour le compte Microsoft Windows sous lequel l'Agent de fusion fonctionne sur le serveur de distribution. Ce compte permet de créer des connexions locales avec le serveur de distribution et des connexions distantes à l'aide de l'authentification Windows.
[!REMARQUE]
La configuration de SynchronizationAgentProcessSecurity lorsqu'un abonnement est créé par un membre du rôle serveur fixe sysadmin n'est pas nécessaire, mais elle est néanmoins recommandée. Dans ce cas, l'Agent va emprunter l'identité du compte de l'Agent SQL Server. Pour plus d'informations, consultez Modèle de sécurité de l'Agent de réplication.
(Facultatif) Valeur true (par défaut) de CreateSyncAgentByDefault pour créer un travail de l'Agent qui permet de synchroniser l'abonnement. Si vous spécifiez false, l'abonnement peut uniquement être synchronisé par programme.
(Facultatif) Définissez les champs SqlStandardLogin et SqlStandardPassword ou SecureSqlStandardPassword deSubscriberSecurity lorsque vous utilisez l'authentification SQL Server pour vous connecter à l'abonné.
(Facultatif) Définissez les champs SqlStandardLogin et SqlStandardPassword ou SecureSqlStandardPassword dePublisherSecurity lorsque vous utilisez l'authentification SQL Server pour vous connecter au serveur de publication.
Appelez la méthode Create.
Remarque relative à la sécurité Lors de la création d'un abonnement par émission de données 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 en texte brut. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d'appeler la méthode Create. Pour plus d'informations, consultez Activer les connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).
Exemples (RMO)
Cet exemple crée un nouvel abonnement par envoi de données vers une publication transactionnelle. Les informations d'identification du compte Windows que vous utilisez pour exécuter le travail de l'Agent de distribution sont transmises lors 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 nouvel abonnement par envoi de données vers 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
[Top]
Voir aussi
Concepts
Afficher et modifier les propriétés d'un abonnement par émission (push)
Méthodes préconisées en matière de sécurité de réplication
Concepts liés à Replication Management Objects
Créer un abonnement par émission (push)