Créer un abonnement par émission de données
S’applique à : SQL Server Azure SQL Database
Cette rubrique explique comment créer un abonnement par émission de données dans SQL Server à 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 par émission de données pour un abonné non-SQL Server, consultez Créer un abonnement pour un abonné non-SQL Server.
Remarque
Azure SQL Managed Instance peut être un serveur de publication, un serveur de distribution et un abonné pour la réplication transactionnelle et d’instantané. Les bases de données dans Azure SQL Database peuvent uniquement être des abonnés de type push pour la réplication transactionnelle et d’instantané. Pour plus d’informations, consultez Réplication transactionnelle avec Azure SQL Database et Réplication transactionnelle avec Azure SQL Managed Instance.
Utilisation de SQL Server Management Studio
Créez un abonnement par émission de données 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 d’autres options pour les publications de fusion : type d’abonnement et valeurs pour le filtrage paramétrable.
Spécifiez d’autres options pour les publications transactionnelles qui autorisent les abonnements de mise à jour. Une option consiste à décider si les abonnés doivent valider immédiatement les modifications sur le serveur de publication ou les écrire dans une file d’attente. Une autre option consiste à configurer 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 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 sélectionnez 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 sélectionnez Nouveaux abonnements.
Dans la page Publication de l’Assistant Nouvel abonnement, sélectionnez <Rechercher un serveur de publication SQL> 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.
Utilisation de Transact-SQL
Vous pouvez créer par programmation des abonnements par émission de données à l’aide de procédures stockées de réplication. Les procédures stockées utilisées dépendent du type de publication auquel l'abonnement appartient.
Important
Lorsque c'est possible, demande aux utilisateurs de fournir les informations d'identification au moment de l'exécution. Si vous devez enregistrer les informations d'identification dans un fichier de script, vous devez sécuriser le fichier pour empêcher un 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 émission 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. Spécifiez 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, @subscriberet @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 détails suivants :
Les paramètres @subscriber, @subscriber_dbet @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 établit toujours la connexion locale au serveur de distribution à l’aide de l’authentification Windows intégrée. Par défaut, l’agent se connecte à l’abonné à l’aide de l’authentification Windows intégrée.
(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é.
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 par émission de données 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 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 des 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 émission 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 n’est pas 1, exécutez sp_changemergepublication. Spécifiez 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_addmergesubscription. Spécifiez les paramètres suivants :
@publication. Il s'agit du nom de la publication.
@subscriber_type. Pour un abonnement client, spécifiez local. Pour un abonnement serveur, spécifiez global.
@subscription_priority. Pour un abonnement serveur, spécifiez la priorité de l'abonnement (de0.00 à 99.99).
Pour plus d’informations, consultez Détection et résolution avancées des conflits de réplication de fusion.
Au niveau du serveur de publication sur la base de données de publication, exécutez sp_addmergepushsubscription_agent. Spécifiez les détails suivants :
Les paramètres @subscriber, @subscriber_dbet @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 é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 fusion établit toujours la connexion locale au serveur de distribution à l’aide de l’authentification Windows intégrée. Par défaut, l’agent se connecte à l’abonné à l’aide de l’authentification Windows intégrée.
(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.
Important
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, notamment 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 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 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'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
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 [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
Utilisation d’objets RMO (Replication Management Object)
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 émission de données dépendent du type de publication sur laquelle l’abonnement est créé.
Important
Lorsque c'est possible, demande aux utilisateurs de fournir les informations d'identification 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 au serveur de publication en utilisant 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, 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 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, appliquez à Attributes le résutat d'une opération OR logique au niveau du bit (| dans Visual C# et Or dans 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 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.
Les champs Login et Password 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 d’établir des connexions locales au serveur de distribution et des connexions distantes à l’aide de l’authentification Windows.
Remarque
La configuration de SynchronizationAgentProcessSecurity quand l’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) La 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 WindowsAuthentication sur Faux, les champs SqlStandardLogin et SqlStandardPassword ou SecureSqlStandardPassword de SubscriberSecurity lorsque vous utilisez l'authentification SQL Server pour vous connecter à l'abonné.
Appelez la méthode Create .
Important
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, notamment 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 des 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 au serveur de publication en utilisant 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, 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 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, appliquez à Attributes le résutat d'une opération OR logique au niveau du bit (| dans Visual C# et Or dans 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.
Les champs Login et Password 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 d’établir des connexions locales au serveur de distribution et des connexions distantes à l’aide de l’authentification Windows.
Remarque
La configuration de SynchronizationAgentProcessSecurity quand l’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) La 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 de SubscriberSecurity lorsque vous utilisez l'authentification SQL Server pour vous connecter à l'abonné.
(Facultatif) Définissez WindowsAuthentication sur Faux, les champs SqlStandardLogin et SqlStandardPassword ou SecureSqlStandardPassword de PublisherSecurity lorsque vous utilisez l'authentification SQL Server pour vous connecter au serveur de publication.
Appelez la méthode Create .
Important
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, notamment 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 des 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 = "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
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 = "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
Voir aussi
Afficher et modifier les propriétés d’un abonnement par émission de données
Bonnes pratiques en matière de sécurité de la réplication
Créer une publication
Concepts liés aux objets RMO (Replication Management Object)
Synchroniser un abonnement par émission de données
S’abonner à des publications
Utiliser sqlcmd avec des variables de script