Créer une publication
S’applique à : SQL Server Azure SQL Managed Instance
Cet article décrit comment créer une publication dans SQL Server en utilisant SQL Server Management Studio, Transact-SQL ou Replication Management Objects (RMO).
Limitations et restrictions
- Les noms de publications et d'articles ne peuvent inclure aucun des caractères suivants :
%
,*
,[
,]
,|
,:
,"
,?
,'
,\
,/
,<
, or>
. Si les objets de la base de données contiennent l’un de ces caractères, et si vous voulez les répliquer, vous devez spécifier un nom d’article différent du nom de l’objet dans la boîte de dialogue Propriétés de l’article - <Article>, qui est disponible dans la page Articles de l’Assistant.
Sécurité
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.
Utiliser SQL Server Management Studio
Créez des publication et définissez des articles avec l'Assistant Nouvelle publication. Après avoir créé une publication, affichez et modifiez les propriétés de publication dans la boîte de dialogue Propriétés de la publication - <Publication>. Pour plus d’informations sur la création d’une publication à partir d’une base de données Oracle, consultez Créer une publication à partir d’une base de données Oracle.
Créer une publication et définir des articles
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 cliquez avec le bouton droit sur le dossier Publications locales .
Sélectionnez Nouvelle publication .
Exécutez les pages de l'Assistant Nouvelle publication pour.
Spécifier un serveur de distribution si la distribution n'a pas été configurée sur le serveur. Pour plus d’informations sur la configuration de la distribution, consultez Configurer la publication et la distribution.
Si vous spécifiez dans la page Serveur de distribution que le serveur de publication se comportera comme son propre serveur de distribution (serveur de distribution local), et si ce serveur n'est pas configuré comme serveur de distribution, l'Assistant Nouvelle publication configurera ce serveur. Vous spécifierez un dossier d'instantanés par défaut pour le serveur de distribution dans la page Dossier d'instantanés . Le dossier d'instantanés correspond à un simple répertoire que vous définissez sous la forme d'un partage ; les agents qui lisent et écrivent dans le dossier doivent disposer des autorisations suffisantes pour pouvoir y accéder. Pour plus d’informations sur une sécurisation appropriée du dossier, consultez Sécuriser le dossier d’instantanés.
Si vous spécifiez qu'un autre serveur doit jouer le rôle de serveur de distribution, vous devez entrer un mot de passe dans la page Mot de passe d'administration pour les connexions effectuées du serveur de publication sur le serveur de distribution. Ce mot de passe doit correspondre à celui qui a été spécifié lorsque le serveur de publication a été activé sur le serveur de distribution distant.
Pour plus d'informations, voir Configure Distribution.
Choisissez une base de données de publication.
Sélectionnez un type de publication. Pour plus d’informations, consultez Types de réplication.
Spécifiez les données et les objets de base de données à publier ; en option, filtrez les colonnes des articles des tables, et définissez des propriétés d'articles.
En option, filtrez les lignes des articles des tables. Pour plus d’informations, consultez Filtrer des données publiées.
Définissez la planification de l'Agent d'instantané.
Spécifiez les informations de connexion sous lesquelles les Agents de réplication suivants s'exécuteront et se connecteront :
Agent d’instantané pour toutes les publications.
Agent de lecture du journal pour toutes les publications transactionnelles.
Agent de lecture de la file d’attente pour les publications transactionnelles acceptant les abonnements avec mise à jour.
Pour plus d'informations, consultez Replication Agent Security Model et Replication Security Best Practices.
En option, scriptez la publication. Pour plus d'informations, voir Scripting Replication.
Spécifiez le nom de la publication.
Utiliser Transact-SQL
Il est possible de créer des publications par programme en utilisant les procédures stockées de réplication. Les procédures stockées à utiliser dépendent du type de publication à créer.
Créez une publication d'instantané ou une publication transactionnelle
Dans la base de données de publication sur le serveur de publication, exécutez sp_replicationdboption (Transact-SQL) pour activer la publication de la base de données actuelle à l’aide de la réplication transactionnelle ou d’instantané.
Pour une publication transactionnelle, déterminez si un travail de l'Agent de lecture du journal existe pour la base de données de publication. (Cette étape n'est pas requise pour les publications d'instantané.)
Si un travail de l'Agent de lecture du journal existe pour la base de données de publication, passez à l'étape 3.
Si vous ne savez pas si un travail de l'Agent de lecture du journal existe pour une base de données publiée, exécutez sp_helplogreader_agent (Transact-SQL) au niveau du serveur de publication dans la base de données de publication.
Si le jeu de résultats est vide, créez un travail de l'Agent de lecture du journal. Sur le serveur de publication, exécutez sp_addlogreader_agent (Transact-SQL). Spécifiez les informations d'identification Windows sous lesquelles l'agent s'exécute pour
@job_name
et@password
. Si l'agent utilise l'authentification SQL Server lors de la connexion au serveur de publication, vous devez également affecter la valeur ou0
pour@publisher_security_mode
et spécifier les informations de connexion SQL Server pour@publisher_login
et@publisher_password
. Passez à l'étape 3.
Sur le serveur de publication, exécutez sp_addpublication (Transact-SQL). Spécifiez un nom de publication pour
@publication
et, pour le paramètre@repl_freq
, spécifiez la valeursnapshot
snapshot pour une publication d'instantané ou la valeur oucontinuous
pour une publication transactionnelle. Spécifiez d'autres options de publication éventuelles. Cela définit la publication.Remarque
Un nom de publication ne doit pas contenir les caractères suivants :
%
,*
,[
,]
,|
,:
,"
,?
,\
,/
,<
, or>
.Sur le serveur de publication, exécutez sp_addpublication_snapshot (Transact-SQL). Spécifiez le nom de publication utilisé à l'étape 3 pour
@publication
et les informations d’identification Windows sous lesquelles l’Agent d’instantané s’exécute pour@snapshot_job_name
et@password
. Si l'agent utilise l'authentification SQL Server lors de la connexion au serveur de publication, vous devez également affecter la valeur ou0
pour@publisher_security_mode
et spécifier les informations de connexion SQL Server pour@publisher_login
etpublisher_password
. Il s'ensuit la création d'un travail de l'Agent d'instantané pour la publication.Important
Lors de la configuration d'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 en texte brut au serveur de distribution. 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).
Ajoutez des articles à la publication. Pour plus d’informations, consultez définir un Article.
Démarrez le travail de l'Agent d'instantané pour générer l'instantané initial pour cette publication. Pour plus d’informations, voir Create and Apply the Initial Snapshot.
Créer une publication de fusion
Sur le serveur de publication, exécutez sp_replicationdboption (Transact-SQL) pour activer la publication de la base de données actuelle à l’aide de la réplication de fusion.
Dans la base de données de publication sur le serveur de publication, exécutez sp_addmergepublication (Transact-SQL). Spécifiez le nom de la publication pour
@publication
et d'autres options de publication éventuelles. Cela définit la publication.Remarque
Un nom de publication ne doit pas contenir les caractères suivants :
%
,*
,[
,]
,|
,:
,"
,?
,\
,/
,<
, or>
.Sur le serveur de publication, exécutez sp_addpublication_snapshot (Transact-SQL). Spécifiez le nom de publication utilisé à l’étape 2 pour
@publication
et les informations d’identification Windows sous lesquelles l’Agent d’instantané s’exécute pour@snapshot_job_name
et@password
. Si l'agent utilise l'authentification SQL Server lors de la connexion au serveur de publication, vous devez également affecter la valeur ou0
pour@publisher_security_mode
et spécifier les informations de connexion SQL Server pour@publisher_login
et@publisher_password
. Il s'ensuit la création d'un travail de l'Agent d'instantané pour la publication.Important
Lors de la configuration d'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 en texte brut au serveur de distribution. 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).
Ajoutez des articles à la publication. Pour plus d’informations, consultez définir un Article.
Démarrez le travail de l'Agent d'instantané pour générer l'instantané initial pour cette publication. Pour plus d’informations, voir Create and Apply the Initial Snapshot.
Exemple (Transact-SQL)
Cet exemple crée une publication transactionnelle. Des variables de script sont utilisées pour transmettre les informations d'identification Windows nécessaires pour créer les travaux pour l'Agent d'instantané et l'Agent de lecture du journal.
-- To avoid storing the login and password in the script file, the values
-- are passed into SQLCMD as scripting variables. 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 @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks';
SET @publication = N'AdvWorksProductTran';
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login);
-- This should be passed at runtime.
SET @password = $(Password);
-- Enable transactional or snapshot replication on the publication database.
EXEC sp_replicationdboption
@dbname=@publicationDB,
@optname=N'publish',
@value = N'true';
-- Execute sp_addlogreader_agent to create the agent job.
EXEC sp_addlogreader_agent
@job_login = @login,
@job_password = @password,
-- Explicitly specify the use of Windows Integrated Authentication (default)
-- when connecting to the Publisher.
@publisher_security_mode = 1;
-- Create a new transactional publication with the required properties.
EXEC sp_addpublication
@publication = @publication,
@status = N'active',
@allow_push = N'true',
@allow_pull = N'true',
@independent_agent = N'true';
-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password,
-- Explicitly specify the use of Windows Integrated Authentication (default)
-- when connecting to the Publisher.
@publisher_security_mode = 1;
GO
Cet exemple crée une publication de fusion. Des variables de script sont utilisées pour transmettre les informations d'identification Windows nécessaires pour créer le travail pour l'Agent d'instantané.
-- To avoid storing the login and password in the script file, the value
-- is passed into SQLCMD as a scripting variable. 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".
--Declarations for adding a merge publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2022';
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @login = $(Login);
SET @password = $(Password);
-- Enable merge replication on the publication database, using defaults.
USE master
EXEC sp_replicationdboption
@dbname=@publicationDB,
@optname=N'merge publish',
@value = N'true'
-- Create a new merge publication, explicitly setting the defaults.
USE [AdventureWorks2022]
EXEC sp_addmergepublication
-- These parameters are optional.
@publication = @publication,
-- optional parameters
@description = N'Merge publication of AdventureWorks2022.',
@publication_compatibility_level = N'120RTM';
-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password;
GO
Utiliser des objets RMO (Replication Management Objects)
Vous pouvez créer des publications par programme à l'aide d'objets RMO (Replication Management Objects). Les classes RMO que vous utilisez pour créer une publication dépendent du type de publication créé.
Créez une publication d'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 ReplicationDatabase pour la base de données de publication, affectez à la propriété ConnectionContext l'instance de ServerConnection créée à l'étape 1, puis appelez la méthode LoadProperties . Si LoadProperties retourne
false
, vérifiez que la base de données existe.Si la propriété EnabledTransPublishing est
false
, réglez-la surtrue
.Pour une publication transactionnelle, vérifiez la valeur de la propriété LogReaderAgentExists . Si elle a la valeur
true
, un travail de l'Agent de lecture du journal existe déjà pour cette base de données. Si elle a la valeurfalse
, procédez comme suit :Définissez les champs Login et Password de LogReaderAgentProcessSecurity afin de fournir les informations d'identification pour le compte Microsoft Windows sous lequel l'Agent de lecture du journal s'exécute.
Remarque
Il n'est pas nécessaire de définir LogReaderAgentProcessSecurity lorsque la publication est créée par un membre du rôle serveur fixe sysadmin . Dans ce cas, l'Agent va emprunter l'identité du compte de l'Agent SQL Server. Pour plus d’informations, voir Replication Agent Security Model.
(Facultatif) Définissez les champs SqlStandardLogin et SqlStandardPassword ou SecureSqlStandardPassword de LogReaderAgentPublisherSecurity lorsque vous utilisez l'authentification SQL Server pour vous connecter au serveur de publication.
Appelez la méthode CreateLogReaderAgent pour créer le travail de l'Agent de lecture du journal pour la base de données.
Créez une instance de la classe TransPublication et définissez les propriétés suivantes pour cet objet :
La classe ServerConnection créée à l'étape 1 pour la propriété ConnectionContext.
Le nom de la base de données publiée pour DatabaseName.
Le nom de la publication pour Name.
Un
Type
(qui est de type PublicationType) de Transactional ou de Snapshot.Les champs Login et Password de SnapshotGenerationAgentProcessSecurity pour fournir les informations d'identification pour le compte Windows sous lequel le travail de l'Agent d'instantané s'exécute. Ce compte est également utilisé lorsque l'Agent d'instantané établit des connexions au serveur de distribution local et pour toute connexion distante lors de l'utilisation de l'authentification Windows.
Remarque
Il n'est pas nécessaire de définir SnapshotGenerationAgentProcessSecurity lorsque la publication est créée par un membre du rôle serveur fixe sysadmin . Dans ce cas, l'Agent va emprunter l'identité du compte de l'Agent SQL Server. Pour plus d’informations, voir Replication Agent Security Model.
(Facultatif) Les champs SqlStandardLogin et SqlStandardPassword ou SecureSqlStandardPassword de SnapshotGenerationAgentPublisherSecurity lorsque vous utilisez l'authentification SQL Server pour vous connecter au serveur de publication.
(Facultatif) Utilisez l'opérateur OR logique inclusif (
|
en Visual C# etOr
en Visual Basic) et l'opérateur OR logique exclusif (^
en Visual C# etXor
en Visual Basic) pour définir les valeurs PublicationAttributes de la propriété Attributes.(Facultatif) Nom du serveur de publication pour PublisherName lorsqu'il s'agit d'un serveur non-SQL Server.
Appelez la méthode Create pour créer la publication.
Important
Lors de la configuration d'un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour toutes les propriétés, y compris SnapshotGenerationAgentProcessSecurity, sont envoyées sous forme de texte brut au serveur de distribution. 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).
Appelez la méthode CreateSnapshotAgent pour créer le travail de l'Agent d'instantané pour le serveur de publication.
Créer une publication de fusion
Créez une connexion au serveur de publication en utilisant la classe ServerConnection .
Créez une instance de la classe ReplicationDatabase pour la base de données de publication, affectez à la propriété ConnectionContext l'instance de ServerConnection créée à l'étape 1, puis appelez la méthode LoadProperties . Si LoadProperties retourne
false
, vérifiez que la base de données existe.Si la propriété EnabledMergePublishing a la valeur
false
, affectez-lui la valeurtrue
et l’appelez CommitPropertyChanges.Créez une instance de la classe MergePublication et définissez les propriétés suivantes pour cet objet :
La classe ServerConnection créée à l'étape 1 pour la propriété ConnectionContext.
Le nom de la base de données publiée pour DatabaseName.
Le nom de la publication pour Name.
Les champs Login et Password de SnapshotGenerationAgentProcessSecurity pour fournir les informations d'identification pour le compte Windows sous lequel le travail de l'Agent d'instantané s'exécute. Ce compte est également utilisé lorsque l'Agent d'instantané établit des connexions au serveur de distribution local et pour toute connexion distante lors de l'utilisation de l'authentification Windows.
Remarque
Il n'est pas nécessaire de définir SnapshotGenerationAgentProcessSecurity lorsque la publication est créée par un membre du rôle serveur fixe sysadmin . Pour plus d’informations, voir Replication Agent Security Model.
(Facultatif) Utilisez l'opérateur OR logique inclusif (
|
en Visual C# etOr
en Visual Basic) et l'opérateur OR logique exclusif (^
en Visual C# etXor
en Visual Basic) pour définir les valeurs PublicationAttributes de la propriété Attributes.
Appelez la méthode Create pour créer la publication.
Important
Lors de la configuration d'un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour toutes les propriétés, y compris SnapshotGenerationAgentProcessSecurity, sont envoyées sous forme de texte brut au serveur de distribution. 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).
Appelez la méthode CreateSnapshotAgent pour créer le travail de l'Agent d'instantané pour le serveur de publication.
Exemples (RMO)
Cet exemple active la base de données AdventureWorks
pour une publication transactionnelle, définit un travail de l'Agent de lecture du journal et crée la publication AdvWorksProductTran
. Un article doit être défini pour cette publication. Les informations d'identification du compte Windows nécessaires pour créer le travail de l'Agent de lecture du journal et de l'Agent d'instantané sont passées au moment de l'exécution. Pour savoir comment utiliser des objets RMO pour définir des articles d'instantané et des articles transactionnels, consultez Define an Article.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";
string publisherName = publisherInstance;
ReplicationDatabase publicationDb;
TransPublication publication;
// Create a connection to the Publisher using Windows Authentication.
ServerConnection conn;
conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Enable the AdventureWorks2022 database for transactional publishing.
publicationDb = new ReplicationDatabase(publicationDbName, conn);
// If the database exists and is not already enabled,
// enable it for transactional publishing.
if (publicationDb.LoadProperties())
{
if (!publicationDb.EnabledTransPublishing)
{
publicationDb.EnabledTransPublishing = true;
}
// If the Log Reader Agent does not exist, create it.
if (!publicationDb.LogReaderAgentExists)
{
// Specify the Windows account under which the agent job runs.
// This account will be used for the local connection to the
// Distributor and all agent connections that use Windows Authentication.
publicationDb.LogReaderAgentProcessSecurity.Login = winLogin;
publicationDb.LogReaderAgentProcessSecurity.Password = winPassword;
// Explicitly set authentication mode for the Publisher connection
// to the default value of Windows Authentication.
publicationDb.LogReaderAgentPublisherSecurity.WindowsAuthentication = true;
// Create the Log Reader Agent job.
publicationDb.CreateLogReaderAgent();
}
}
else
{
throw new ApplicationException(String.Format(
"The {0} database does not exist at {1}.",
publicationDb, publisherName));
}
// Set the required properties for the transactional publication.
publication = new TransPublication();
publication.ConnectionContext = conn;
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
// Specify a transactional publication (the default).
publication.Type = PublicationType.Transactional;
// Activate the publication so that we can add subscriptions.
publication.Status = State.Active;
// Enable push and pull subscriptions and independent Distribition Agents.
publication.Attributes |= PublicationAttributes.AllowPull;
publication.Attributes |= PublicationAttributes.AllowPush;
publication.Attributes |= PublicationAttributes.IndependentAgent;
// Specify the Windows account under which the Snapshot Agent job runs.
// This account will be used for the local connection to the
// Distributor and all agent connections that use Windows Authentication.
publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin;
publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword;
// Explicitly set the security mode for the Publisher connection
// Windows Authentication (the default).
publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = true;
if (!publication.IsExistingObject)
{
// Create the transactional publication.
publication.Create();
// Create a Snapshot Agent job for the publication.
publication.CreateSnapshotAgent();
}
else
{
throw new ApplicationException(String.Format(
"The {0} publication already exists.", publicationName));
}
}
catch (Exception ex)
{
// Implement custom application error handling here.
throw new ApplicationException(String.Format(
"The publication {0} could not be created.", publicationName), ex);
}
finally
{
conn.Disconnect();
}
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"
Dim publisherName As String = publisherInstance
Dim publicationDb As ReplicationDatabase
Dim publication As TransPublication
' Create a connection to the Publisher using Windows Authentication.
Dim conn As ServerConnection
conn = New ServerConnection(publisherName)
Try
' Connect to the Publisher.
conn.Connect()
' Enable the AdventureWorks2022 database for transactional publishing.
publicationDb = New ReplicationDatabase(publicationDbName, conn)
' If the database exists and is not already enabled,
' enable it for transactional publishing.
If publicationDb.LoadProperties() Then
If Not publicationDb.EnabledTransPublishing Then
publicationDb.EnabledTransPublishing = True
End If
' If the Log Reader Agent does not exist, create it.
If Not publicationDb.LogReaderAgentExists Then
' Specify the Windows account under which the agent job runs.
' This account will be used for the local connection to the
' Distributor and all agent connections that use Windows Authentication.
publicationDb.LogReaderAgentProcessSecurity.Login = winLogin
publicationDb.LogReaderAgentProcessSecurity.Password = winPassword
' Explicitly set authentication mode for the Publisher connection
' to the default value of Windows Authentication.
publicationDb.LogReaderAgentPublisherSecurity.WindowsAuthentication = True
' Create the Log Reader Agent job.
publicationDb.CreateLogReaderAgent()
End If
Else
Throw New ApplicationException(String.Format( _
"The {0} database does not exist at {1}.", _
publicationDb, publisherName))
End If
' Set the required properties for the transactional publication.
publication = New TransPublication()
publication.ConnectionContext = conn
publication.Name = publicationName
publication.DatabaseName = publicationDbName
' Specify a transactional publication (the default).
publication.Type = PublicationType.Transactional
'Enable push and pull subscriptions and independent Distribition Agents.
publication.Attributes = _
publication.Attributes Or PublicationAttributes.AllowPull
publication.Attributes = _
publication.Attributes Or PublicationAttributes.AllowPush
publication.Attributes = _
publication.Attributes Or PublicationAttributes.IndependentAgent
' Activate the publication so that we can add subscriptions.
publication.Status = State.Active
' Specify the Windows account under which the Snapshot Agent job runs.
' This account will be used for the local connection to the
' Distributor and all agent connections that use Windows Authentication.
publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin
publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword
' Explicitly set the security mode for the Publisher connection
' Windows Authentication (the default).
publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = True
If Not publication.IsExistingObject Then
' Create the transactional publication.
publication.Create()
' Create a Snapshot Agent job for the publication.
publication.CreateSnapshotAgent()
Else
Throw New ApplicationException(String.Format( _
"The {0} publication already exists.", publicationName))
End If
Catch ex As Exception
' Implement custom application error handling here.
Throw New ApplicationException(String.Format( _
"The publication {0} could not be created.", publicationName), ex)
Finally
conn.Disconnect()
End Try
Cet exemple active la base de données AdventureWorks
pour la publication de fusion et crée la publication AdvWorksSalesOrdersMerge
. Des articles doivent encore être définis pour cette publication. Les informations d'identification du compte Windows nécessaires pour créer le travail de l'Agent d'instantané sont passées au moment de l'exécution. Pour savoir comment utiliser des objets RMO pour définir des articles de fusion, consultez Define an Article.
// Set the Publisher, publication database, and publication names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2022";
ReplicationDatabase publicationDb;
MergePublication publication;
// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Enable the database for merge publication.
publicationDb = new ReplicationDatabase(publicationDbName, conn);
if (publicationDb.LoadProperties())
{
if (!publicationDb.EnabledMergePublishing)
{
publicationDb.EnabledMergePublishing = true;
}
}
else
{
// Do something here if the database does not exist.
throw new ApplicationException(String.Format(
"The {0} database does not exist on {1}.",
publicationDb, publisherName));
}
// Set the required properties for the merge publication.
publication = new MergePublication();
publication.ConnectionContext = conn;
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
// Enable precomputed partitions.
publication.PartitionGroupsOption = PartitionGroupsOption.True;
// Specify the Windows account under which the Snapshot Agent job runs.
// This account will be used for the local connection to the
// Distributor and all agent connections that use Windows Authentication.
publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin;
publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword;
// Explicitly set the security mode for the Publisher connection
// Windows Authentication (the default).
publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = true;
// Enable Subscribers to request snapshot generation and filtering.
publication.Attributes |= PublicationAttributes.AllowSubscriberInitiatedSnapshot;
publication.Attributes |= PublicationAttributes.DynamicFilters;
// Enable pull and push subscriptions.
publication.Attributes |= PublicationAttributes.AllowPull;
publication.Attributes |= PublicationAttributes.AllowPush;
if (!publication.IsExistingObject)
{
// Create the merge publication.
publication.Create();
// Create a Snapshot Agent job for the publication.
publication.CreateSnapshotAgent();
}
else
{
throw new ApplicationException(String.Format(
"The {0} publication already exists.", publicationName));
}
}
catch (Exception ex)
{
// Implement custom application error handling here.
throw new ApplicationException(String.Format(
"The publication {0} could not be created.", publicationName), ex);
}
finally
{
conn.Disconnect();
}
' Set the Publisher, publication database, and publication names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2022"
Dim publicationDb As ReplicationDatabase
Dim publication As MergePublication
' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
Try
' Connect to the Publisher.
conn.Connect()
' Enable the database for merge publication.
publicationDb = New ReplicationDatabase(publicationDbName, conn)
If publicationDb.LoadProperties() Then
If Not publicationDb.EnabledMergePublishing Then
publicationDb.EnabledMergePublishing = True
End If
Else
' Do something here if the database does not exist.
Throw New ApplicationException(String.Format( _
"The {0} database does not exist on {1}.", _
publicationDb, publisherName))
End If
' Set the required properties for the merge publication.
publication = New MergePublication()
publication.ConnectionContext = conn
publication.Name = publicationName
publication.DatabaseName = publicationDbName
' Enable precomputed partitions.
publication.PartitionGroupsOption = PartitionGroupsOption.True
' Specify the Windows account under which the Snapshot Agent job runs.
' This account will be used for the local connection to the
' Distributor and all agent connections that use Windows Authentication.
publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin
publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword
' Explicitly set the security mode for the Publisher connection
' Windows Authentication (the default).
publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = True
' Enable Subscribers to request snapshot generation and filtering.
publication.Attributes = publication.Attributes Or _
PublicationAttributes.AllowSubscriberInitiatedSnapshot
publication.Attributes = publication.Attributes Or _
PublicationAttributes.DynamicFilters
' Enable pull and push subscriptions
publication.Attributes = publication.Attributes Or _
PublicationAttributes.AllowPull
publication.Attributes = publication.Attributes Or _
PublicationAttributes.AllowPush
If Not publication.IsExistingObject Then
' Create the merge publication.
publication.Create()
' Create a Snapshot Agent job for the publication.
publication.CreateSnapshotAgent()
Else
Throw New ApplicationException(String.Format( _
"The {0} publication already exists.", publicationName))
End If
Catch ex As Exception
' Implement custom application error handling here.
Throw New ApplicationException(String.Format( _
"The publication {0} could not be created.", publicationName), ex)
Finally
conn.Disconnect()
End Try
Voir aussi
- Utiliser sqlcmd avec des variables de script
- Publier des données et des objets de base de données
- Concepts liés à RMO (Replication Management Objects)
- Définir un article
- Afficher et modifier les propriétés d’une publication
- Configurer la distribution
- Protéger le serveur de distribution
- Sécuriser le serveur de publication