Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Managed Instance
Tento článek popisuje, jak vytvořit publikaci v SQL Server pomocí SQL Server Management Studio, Transact-SQL nebo Replication Management Objects (RMO).
Limity a omezení
- Názvy publikací a článků nesmí obsahovat žádné z následujících znaků:
%, ,*[,],|,:,\"'/?<, nebo .>Pokud objekty v databázi obsahují některý z těchto znaků a chcete je replikovat, musíte v dialogovém okně Vlastnosti článku – >článek< zadat název článku, který se liší od názvu objektu; toto dialogové okno je dostupné na stránce Články v průvodci.
Zabezpečení
Pokud je to možné, vyzve uživatele, aby za běhu zadali přihlašovací údaje zabezpečení. Pokud musíte uchovávat přihlašovací údaje, použijte kryptografické služby poskytované Microsoft Windows .NET Frameworkem.
Použití aplikace SQL Server Management Studio
Vytvářejte publikace a definujte články pomocí Průvodce novými publikacemi. Po vytvoření publikace si prohlédněte a upravte vlastnosti publikace v dialogovém okně Vlastnosti publikace – <Publikace> . Pro informace o vytváření publikace z Oracle databáze viz Vytvořit publikaci z Oracle databáze.
Vytvoření publikace a definování článků
Připojte se k publisheru v aplikaci Microsoft SQL Server Management Studio a potom rozbalte uzel serveru.
Rozbalte složku Replikace a pak klikněte pravým tlačítkem na složku Lokální publikace .
Vyberte Novou publikaci.
Sledujte stránky v Čarodějce nových publikací, abyste:
Specifikujte distributora, pokud distribuce na serveru nebyla nakonfigurována. Pro více informací o konfiguraci distribuce viz Konfigurovat publikování a distribuci.
Pokud na stránce distributora specifikujete, že server Publisher bude fungovat jako samostatný distributor (lokální distributor) a server není nakonfigurován jako distributor, průvodce novou publikací server nakonfiguruje. Na stránce Složka snímků určíte výchozí složku snímků pro Distributor. Složka snapshot je jednoduše adresář, který jste označili jako sdílený soubor; Agenti, kteří z této složky čtou a zapisují do ní, musí mít dostatečná oprávnění k jejímu přístupu. Pro více informací o správném zabezpečení složky viz Secure the Snapshot Folder.
Pokud určíte, že jiný server má fungovat jako distributor, musíte zadat heslo na stránce Administrátorské heslo pro spojení z Publisher k distributorovi. Toto heslo musí odpovídat heslu stanovenému při aktivaci Publisher u vzdáleného distributora.
Další informace najdete v tématu Konfigurace distribuce.
Vyberte databázi publikací.
Vyberte typ publikace. Pro více informací viz Typy replikace.
Specifikovat datové a databázové objekty k publikaci; volitelně filtrujte sloupce z článků v tabulce a nastavte vlastnosti článků.
Volitelně filtrujte řádky z článků v tabulce. Další informace najdete v tématu Filtrování publikovaných dat.
Nastavte rozvrh Snapshot Agent.
Specifikujte přihlašovací údaje, pod kterými následující replikační agenti běží a navazují spojení:
Snapshot Agent pro všechny publikace.
Log Reader Agent pro všechny transakční publikace.
Queue Reader Agent pro transakční publikace, které umožňují aktualizaci odběrů.
Pro více informací viz Modely bezpečnosti replikačních agentů a nejlepší postupy v oblasti bezpečnosti replikace.
Volitelně napište scénář publikace. Pro více informací viz Replikace skriptování.
Uveďte název publikace.
Použijte Transact-SQL
Publikace lze vytvářet programově pomocí uložených procedur při replikaci. Uložené procedury, které se použijí, závisejí na typu vytvářené publikace.
Vytvořte snapshot nebo transakční publikaci
Na Publisher v databázi publikací spusťte sp_replicationdboption (Transact-SQL), aby bylo možné publikovat aktuální databázi pomocí snapshotu nebo transakční replikace.
U transakční publikace zjistěte, zda pro databázi publikace existuje pracovní pozice Log Reader Agent. (Tento krok není vyžadován pro snapshot publikace.)
Pokud pro databázi publikací existuje pracovní pozice Log Reader Agent, přejděte ke kroku 3.
Pokud si nejste jisti, zda existuje úloha Log Reader Agent pro publikovanou databázi, spusťte sp_helplogreader_agent (Transact-SQL) na Publisher v publikační databázi.
Pokud je výsledná sada prázdná, vytvořte úlohu Log Reader Agent. Na serveru Publisher proveďte sp_addlogreader_agent (Transact-SQL). Specifikujte Microsoft Windows přihlašovací údaje, pod kterými agent běží pro
@job_namea@password. Pokud agent použije SQL Server Authentication při připojení k Publisher, musíte také zadat hodnotu0pro a@publisher_security_modepřihlašovací informace do SQL Server pro@publisher_logina@publisher_password. Přejděte ke kroku 3.
Na Publisher proveďte sp_addpublication (Transact-SQL). Zadejte název publikace pro
@publication, a pro@repl_freqparametr uveďte hodnotu prosnapshotsnapshot publikaci nebo hodnotu procontinuoustransakční publikaci. Uveďte jakékoli další možnosti publikace. To definuje publikaci.Note
Názvy publikací nesmí obsahovat následující znaky:
%,*,[,],|,:,",?,/,\,<nebo>.Na Publisher proveďte sp_addpublication_snapshot (Transact-SQL). Zadejte název publikace použitý v kroku 3 pro
@publicationa přihlašovací údaje systému Windows, pod nimiž běží Snapshot Agent pro@snapshot_job_namea@password. Pokud agent použije SQL Server Authentication při připojení k Publisher, musíte také zadat hodnotu0pro a@publisher_security_modepřihlašovací informace do SQL Server pro@publisher_loginapublisher_password. To vytváří pracovní pozici Snapshot Agent pro publikaci.Important
Při konfiguraci publisheru se vzdáleným distributorem se hodnoty zadané pro všechny parametry, včetně job_login a job_password, odešlou distributorovi jako prostý text. Před spuštěním této uložené procedury byste měli šifrovat připojení mezi vydavatelem a jeho vzdáleným distributorem. Další informace najdete v tématu Povolení šifrovaných připojení k databázovému stroji (SQL Server Configuration Manager).
Přidejte do publikace články. Další informace najdete v tématu Definování článku.
Spusťte úlohu Snapshot Agent pro vygenerování počátečního snímku pro tuto publikaci. Další informace naleznete v tématu Vytvoření a použití počátečního snímku.
Vytvořte sloučenou publikaci
Na Publisher spusťte sp_replicationdboption (Transact-SQL), aby bylo možné publikovat aktuální databázi pomocí replikace sloučení.
Na serveru Publisher v databázi publikace spusťte příkaz sp_addmergepublication (Transact-SQL). Uveďte název publikace pro
@publicationa jakékoli další možnosti publikace. To definuje publikaci.Note
Názvy publikací nesmí obsahovat následující znaky:
%,*,[,],|,:,",?,/,\,<nebo>.Na Publisher proveďte sp_addpublication_snapshot (Transact-SQL). Zadejte název publikace použitý v kroku 2 pro
@publicationa přihlašovací údaje Windows, pod kterými Snapshot Agent běží pro@snapshot_job_namea@password. Pokud agent použije SQL Server Authentication při připojení k Publisher, musíte také zadat hodnotu0pro a@publisher_security_modepřihlašovací informace do SQL Server pro@publisher_logina@publisher_password. To vytváří pracovní pozici Snapshot Agent pro publikaci.Important
Při konfiguraci publisheru se vzdáleným distributorem se hodnoty zadané pro všechny parametry, včetně job_login a job_password, odešlou distributorovi jako prostý text. Před spuštěním této uložené procedury byste měli šifrovat připojení mezi vydavatelem a jeho vzdáleným distributorem. Další informace najdete v tématu Povolení šifrovaných připojení k databázovému stroji (SQL Server Configuration Manager).
Přidejte do publikace články. Další informace najdete v tématu Definování článku.
Spusťte úlohu Snapshot Agent pro vygenerování počátečního snímku pro tuto publikaci. Další informace naleznete v tématu Vytvoření a použití počátečního snímku.
Příklad (Transact-SQL)
Tento příklad vytváří transakční publikaci. Skriptovací proměnné se používají k předávání přihlašovacích údajů Windows, které jsou nutné k vytvoření úloh pro Snapshot Agent a Log Reader Agent.
-- 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
Tento příklad vytváří publikaci sloučení. Skriptovací proměnné se používají k předávání přihlašovacích údajů Windows, které jsou potřebné k vytvoření úlohy pro Snapshot Agent.
-- 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
Použijte objekty pro správu replikace (RMO)
Publikace můžete vytvářet programově pomocí Replication Management Objects (RMO). RMO třídy, které použijete k vytvoření publikace, závisí na typu publikace, kterou vytvoříte.
Vytvořte snapshot nebo transakční publikaci
Vytvořte připojení k Publisheru pomocí ServerConnection třídy.
Vytvořte instanci třídy ReplicationDatabase pro databázi publikací, nastavte vlastnost ConnectionContext na instanci ServerConnection z kroku 1 a zavolejte metodu LoadProperties. Pokud LoadProperties vrací
false, ověřte, že databáze existuje.Pokud je vlastnost EnabledTransPublishing
false, nastavte ji natrue.Pro transakční publikaci zkontrolujte hodnotu nemovitosti LogReaderAgentExists . Pokud má tato vlastnost hodnotu
true, pro tuto databázi již existuje úloha agenta Log Read Agent. Pokud je tato vlastnostfalse, proveďte následující:Nastavte pole Login a Password objektu LogReaderAgentProcessSecurity tak, aby poskytovala přihlašovací údaje k účtu systému Microsoft Windows, pod nímž je spuštěn agent Log Reader.
Note
Nastavení LogReaderAgentProcessSecurity není nutné, pokud publikaci vytváří člen role pevného správce systému . V takovém případě agent zosobní účet agenta SQL Serveru. Další informace naleznete v tématu Model zabezpečení agenta replikace.
(Volitelné) Při použití ověřování SQL Serveru pro připojení k Vydavateli nastavte pole SqlStandardLogin a SqlStandardPassword nebo SecureSqlStandardPassword v LogReaderAgentPublisherSecurity.
Zavolejte metodu CreateLogReaderAgent pro vytvoření role Log Reader Agent pro databázi.
Vytvořte instanci třídy TransPublication a nastavte následující vlastnosti pro tento objekt:
ServerConnection z kroku 1 pro ConnectionContext.
Název publikované databáze pro DatabaseName.
Název publikace pro položku Name.
Type(který je typu PublicationType) jednoho z typů Transactional nebo Snapshot.Pole Login a Password v SnapshotGenerationAgentProcessSecurity slouží k zadání přihlašovacích údajů k účtu systému Windows, pod kterým je spuštěn agent Snapshot Agent. Tento účet se také používá, když Snapshot Agent navazuje spojení s místním distributorem a při jakýchkoli vzdálených spojení při použití Windows Authentication.
Note
Nastavení SnapshotGenerationAgentProcessSecurity není nutné, pokud publikaci vytváří člen role pevného správce systému . V takovém případě agent zosobní účet agenta SQL Serveru. Další informace naleznete v tématu Model zabezpečení agenta replikace.
(Volitelné) Pole SqlStandardLogin a SqlStandardPassword nebo SecureSqlStandardPassword v poli SnapshotGenerationAgentPublisherSecurity při použití ověřování serveru SQL Server pro připojení k Vydavateli.
(Volitelné) Použijte inkluzivní logický OR operátor (
|ve Visual C# aOrVisual Basic) a exkluzivní logický OR operátor (^ve Visual C# aXorVisual Basic) k nastavení PublicationAttributes hodnot vlastnostiAttributes.(Volitelné) Název vydavatele pro PublisherName, pokud je vydavatel jiný než vydavatel SQL Server.
Zavolejte metodu Create a vytvořte publikaci.
Important
Při konfiguraci Publisher s vzdáleným distributorem jsou hodnoty dodané pro všechny vlastnosti, včetně SnapshotGenerationAgentProcessSecurity, odesílány distributorovi jako prostý text. Před voláním metody byste měli zašifrovat připojení mezi vydavatelem a jeho vzdáleným distributorem Create . Další informace najdete v tématu Povolení šifrovaných připojení k databázovému stroji (SQL Server Configuration Manager).
Zavolejte metodu CreateSnapshotAgent a vytvořte pro publikaci úlohu agenta Snapshot.
Vytvořte sloučenou publikaci
Vytvořte připojení k Publisheru pomocí ServerConnection třídy.
Vytvořte instanci třídy ReplicationDatabase pro databázi publikací, nastavte vlastnost ConnectionContext na instanci ServerConnection z kroku 1 a zavolejte metodu LoadProperties. Pokud LoadProperties vrací
false, ověřte, že databáze existuje.Pokud je EnabledMergePublishing vlastnost
false, nastavte ji natruea zavolejte CommitPropertyChanges.Vytvořte instanci třídy MergePublication a nastavte následující vlastnosti pro tento objekt:
ServerConnection z 1. kroku pro ConnectionContext.
Název publikované databáze pro DatabaseName.
Název publikace pro Name.
Pomocí polí Login a Password u SnapshotGenerationAgentProcessSecurity zadejte přihlašovací údaje k účtu systému Windows, pod kterým je spuštěn Snapshot Agent. Tento účet se také používá, když Snapshot Agent navazuje spojení s místním distributorem a při jakýchkoli vzdálených spojení při použití Windows Authentication.
Note
Nastavení SnapshotGenerationAgentProcessSecurity není nutné, pokud publikaci vytváří člen role pevného správce systému . Další informace naleznete v tématu Model zabezpečení agenta replikace.
(Volitelné) Použijte inkluzivní logický OR operátor (
|ve Visual C# aOrVisual Basic) a exkluzivní logický OR operátor (^ve Visual C# aXorVisual Basic) k nastavení PublicationAttributes hodnot vlastnostiAttributes.
Zavolejte způsob, Create jak publikaci vytvořit.
Important
Při konfiguraci Publisher s vzdáleným distributorem jsou hodnoty dodané pro všechny vlastnosti, včetně SnapshotGenerationAgentProcessSecurity, odesílány distributorovi jako prostý text. Před voláním metody byste měli zašifrovat připojení mezi vydavatelem a jeho vzdáleným distributorem Create . Další informace najdete v tématu Povolení šifrovaných připojení k databázovému stroji (SQL Server Configuration Manager).
Zavolejte metodu CreateSnapshotAgent pro vytvoření práce Snapshot Agent pro publikaci.
Příklady (RMO)
Tento příklad umožňuje databázi AdventureWorks pro transakční publikování, definuje úlohu Log Reader Agenta a vytváří publikaci AdvWorksProductTran . Pro tuto publikaci musí být definován článek. Přihlašovací údaje k Windows účtům potřebné k vytvoření úlohy Log Reader Agent a Snapshot Agent jsou předávány za běhu. Chcete-li se naučit, jak použít RMO k definování snapshotů a transakčních článků, viz Definujte článek.
// 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
Tento příklad povolí databázi AdventureWorks pro publikování sloučením a vytvoří publikaci AdvWorksSalesOrdersMerge. Články musí být pro tuto publikaci stále definovány. Přihlašovací údaje k Windows účtu potřebné k vytvoření úlohy Snapshot Agent jsou předávány za běhu. Chcete-li se naučit, jak použít RMO k definování článků pro sloučení, viz Definujte článek.
// 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