Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Azure SQL Managed Instance
Este artigo descreve como criar uma publicação no SQL Server utilizando o SQL Server Management Studio, Transact-SQL ou Replication Management Objects (RMO).
Limitações e restrições
- Os nomes de publicações e artigos não podem incluir nenhum dos seguintes caracteres:
%,*,[,],:|,"?',/\<ou .>Se os objetos na base de dados incluírem algum destes caracteres e quiser replicá-los, deve especificar um nome de artigo diferente do nome do objeto na caixa de diálogo Propriedades do Artigo - <Artigo> , que está disponível na página Artigos do assistente.
Segurança
Quando possível, solicite que os usuários insiram credenciais de segurança em tempo de execução. Se precisar de armazenar credenciais, utilize os serviços criptográficos fornecidos pelo Microsoft Windows .NET Framework.
Utilize SQL Server Management Studio
Crie publicações e defina artigos com o Assistente de Novas Publicações. Após a criação de uma publicação, visualize e modifique as propriedades da publicação na caixa de diálogo Propriedades de Publicação - <Publicação> . Para informações sobre como criar uma publicação a partir de uma base de dados Oracle, veja Criar uma Publicação a partir de uma Base de Dados Oracle.
Crie uma publicação e defina artigos
Liga-te ao Publisher no Microsoft SQL Server Management Studio e depois expande o nó do servidor.
Expanda a pasta Replicação e depois clique com o botão direito na pasta Publicações Locais .
Seleção de Nova Publicação.
Siga as instruções nas páginas do Assistente de Nova Publicação para:
Especifique um distribuidor se a distribuição não tiver sido configurada no servidor. Para mais informações sobre a configuração da distribuição, consulte Configurar Publicação e Distribuição.
Se especificar na página do Distribuidor que o servidor Publisher atuará como um Distribuidor próprio (um Distribuidor local), e o servidor não estiver configurado como Distribuidor, o Assistente de Nova Publicação irá configurar o servidor. Irá especificar uma pasta predefinida para instantâneos para o Distribuidor na página Pasta de Instantâneos. A pasta snapshot é simplesmente um diretório que designou como partilha; Os agentes que leem e escrevem nesta pasta devem ter permissões suficientes para a aceder. Para mais informações sobre como proteger adequadamente a pasta, consulte Proteger a Pasta de Snapshot.
Se especificar que outro servidor deve atuar como Distribuidor, deve introduzir uma palavra-passe na página de Palavra-passe Administrativa para ligações feitas do Publisher ao Distribuidor. Esta palavra-passe deve corresponder à especificada quando o Publisher foi ativado no Distribuidor remoto.
Para obter mais informações, consulte Configurar Distribuição.
Escolha uma base de dados de publicações.
Selecione um tipo de publicação. Para mais informações, consulte Tipos de Replicação.
Especificar dados e objetos da base de dados a publicar; opcionalmente, filtrar colunas dos artigos da tabela e definir propriedades dos artigos.
Opcionalmente, filtra linhas dos artigos de tabelas. Para mais informações, consulte Filtrar Dados Publicados.
Defina o agendamento do Snapshot Agent.
Especifique as credenciais sob as quais os seguintes agentes de replicação funcionam e faça ligações:
Snapshot Agent para todas as publicações.
Agente Leitor de Registo para todas as publicações transacionais.
Agente de Leitor de Fila para publicações transacionais que permitem atualizar subscrições.
Para mais informações, consulte Modelo de Segurança de Agentes de Replicação e Boas Práticas de Segurança de Replicação.
Opcionalmente, crie um script para a publicação. Para mais informações, consulte Replicação de Scripts.
Especifique um nome para a publicação.
Utilize o Transact-SQL
As publicações podem ser criadas programaticamente usando procedimentos armazenados de replicação. Os procedimentos armazenados utilizados dependerão do tipo de publicação que está a ser criada.
Crie um snapshot ou uma publicação transacional
No Publicador, na base de dados de publicação, execute sp_replicationdboption (Transact-SQL) para ativar a publicação da base de dados atual utilizando replicação de instantâneo ou replicação transacional.
Para uma publicação transacional, determine se existe um trabalho de Agente Leitor de Registos para a base de dados da publicação. (Este passo não é obrigatório para publicações instantâneas.)
Se existir um trabalho de Agente Leitor de Registos para a base de dados da publicação, avance para o passo 3.
Se não tiver a certeza se existe um trabalho de Agente Leitor de Registos para uma base de dados publicada, execute sp_helplogreader_agent (Transact-SQL) no Publisher na base de dados de publicação.
Se o conjunto de resultados estiver vazio, crie um trabalho de Agente Leitor de Logs. No Publicador, execute sp_addlogreader_agent (Transact-SQL). Especifique as credenciais Microsoft Windows sob as quais o agente corre para
@job_namee@password. Se o agente usar Autenticação SQL Server ao ligar-se ao Publisher, deve também especificar um valor de0para@publisher_security_modee a informação de login do SQL Server para@publisher_logine@publisher_password. Avance para o passo 3.
No Publicador, execute sp_addpublication (Transact-SQL). Especifique um nome de publicação para
@publication, e, para o@repl_freqparâmetro, especifique um valor desnapshotpara uma publicação instantânea ou um valor decontinuouspara uma publicação transacional. Especifique quaisquer outras opções de publicação. Isto define a publicação.Note
Os nomes das publicações não podem incluir os seguintes caracteres:
%,*,[,],|,:,",?,/,\,<, ou>.No Publicador, execute sp_addpublication_snapshot (Transact-SQL). Especifique o nome da publicação usado no passo 3 para
@publicatione as credenciais do Windows sob as quais o Snapshot Agent corre para@snapshot_job_namee@password. Se o agente usar Autenticação SQL Server ao ligar-se ao Publisher, deve também especificar um valor de0para@publisher_security_modee a informação de login do SQL Server para@publisher_loginepublisher_password. Isto cria um trabalho de Snapshot Agent para a publicação.Importante
Ao configurar um Publicador com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, incluindo job_login e job_password, são enviados ao Distribuidor como texto simples. Você deve criptografar a conexão entre o Editor e seu Distribuidor remoto antes de executar este procedimento armazenado. Para obter mais informações, consulte Habilitar conexões criptografadas com o Mecanismo de Banco de Dados (Gestor de Configuração do SQL Server).
Adicione artigos à publicação. Para mais informações, consulte Definir um Artigo.
Inicie a tarefa Snapshot Agent para gerar o instantâneo inicial desta publicação. Para mais informações, consulte Criar e Aplicar o Snapshot Inicial.
Criar uma publicação de fusão
No Publisher, execute sp_replicationdboption (Transact-SQL) para permitir a publicação da base de dados atual usando a replicação por fusão.
No Publicador, na base de dados de publicação, execute sp_addmergepublication (Transact-SQL). Indique um nome para a publicação de
@publicatione quaisquer outras opções de publicação. Isto define a publicação.Note
Os nomes das publicações não podem incluir os seguintes caracteres:
%,*,[,],|,:,",?,/,\,<, ou>.No Publicador, execute sp_addpublication_snapshot (Transact-SQL). Especifique o nome da publicação usado no passo 2 para
@publicatione as credenciais do Windows sob as quais o Snapshot Agent corre para@snapshot_job_namee@password. Se o agente usar Autenticação SQL Server ao ligar-se ao Publisher, deve também especificar um valor de0para@publisher_security_modee a informação de login do SQL Server para@publisher_logine@publisher_password. Isto cria um trabalho de Snapshot Agent para a publicação.Importante
Ao configurar um Publicador com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, incluindo job_login e job_password, são enviados ao Distribuidor como texto simples. Você deve criptografar a conexão entre o Editor e seu Distribuidor remoto antes de executar este procedimento armazenado. Para obter mais informações, consulte Habilitar conexões criptografadas com o Mecanismo de Banco de Dados (Gestor de Configuração do SQL Server).
Adicione artigos à publicação. Para mais informações, consulte Definir um Artigo.
Inicie a tarefa Snapshot Agent para gerar o instantâneo inicial desta publicação. Para mais informações, consulte Criar e Aplicar o Snapshot Inicial.
Exemplo (Transact-SQL)
Este exemplo cria uma publicação transacional. As variáveis de scripting são usadas para passar as credenciais do Windows necessárias para criar trabalhos para o Snapshot Agent e o 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
Este exemplo cria uma publicação de fusão. As variáveis de script são usadas para fornecer as credenciais do Windows necessárias para criar a tarefa do 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
Use Objetos de Gestão de Replicação (RMO)
Pode criar publicações programaticamente usando Replication Management Objects (RMO). As classes RMO que utiliza para criar uma publicação dependem do tipo de publicação que cria.
Crie um snapshot ou uma publicação transacional
Crie uma conexão com o Publisher usando a classe ServerConnection.
Crie uma instância da ReplicationDatabase classe para a base de dados de publicação, defina a ConnectionContext propriedade para a instância de ServerConnection a partir do passo 1 e chame o LoadProperties método. Se LoadProperties devolver
false, verifique se a base de dados existe.Se a EnabledTransPublishing propriedade for
false, defina-a paratrue.Para uma publicação transacional, consulte o valor da propriedade LogReaderAgentExists. Se esta propriedade for
true, já existe um trabalho Log Read Agent para esta base de dados. Se esta propriedade forfalse, faça o seguinte:Defina os campos Login e Password de LogReaderAgentProcessSecurity para especificar as credenciais da conta do Microsoft Windows na qual é executado o agente Log Reader.
Note
A configuração LogReaderAgentProcessSecurity não é necessária quando a publicação é criada por um membro da função fixa de servidor sysadmin. Neste caso, o agente irá fazer-se passar pela conta do Agente SQL Server. Para obter mais informações, consulte Replication Agent Security Model.
(Opcional) Defina os campos SqlStandardLogin e SqlStandardPassword ou SecureSqlStandardPassword de LogReaderAgentPublisherSecurity ao usar a autenticação do SQL Server para estabelecer ligação ao Publisher.
Chame o método CreateLogReaderAgent para criar o trabalho do Agente Leitor de Registos para a base de dados.
Crie uma instância da TransPublication classe e defina as seguintes propriedades para este objeto:
O ServerConnection do passo 1 para ConnectionContext.
O nome da base de dados publicada para DatabaseName.
Um nome para a publicação para Name.
A
Type(que é do tipo PublicationType) ou Transactional ou Snapshot.Utilize os campos Login e Password de SnapshotGenerationAgentProcessSecurity para fornecer as credenciais da conta do Windows sob a qual o Snapshot Agent é executado. Esta conta também é usada quando o Snapshot Agent faz ligações ao Distribuidor local e para quaisquer ligações remotas ao utilizar a Autenticação Windows.
Note
A configuração SnapshotGenerationAgentProcessSecurity não é necessária quando a publicação é criada por um membro da função fixa de servidor sysadmin. Neste caso, o agente irá fazer-se passar pela conta do Agente SQL Server. Para obter mais informações, consulte Replication Agent Security Model.
(Opcional) Os campos SqlStandardLogin, SqlStandardPassword ou SecureSqlStandardPassword de SnapshotGenerationAgentPublisherSecurity ao utilizar a Autenticação do SQL Server para estabelecer ligação ao Publicador.
(Opcional) Use o operador lógico OR inclusivo (
|em Visual C# eOrno Visual Basic) e o operador lógico exclusivo OR (^em Visual C# eXorno Visual Basic) para definir os PublicationAttributes valores da Attributes propriedade.(Opcional) O nome do Publisher para PublisherName quando o Publisher não é SQL Server Publisher.
Chame o método Create para criar a publicação.
Importante
Ao configurar um Publisher com um Distribuidor remoto, os valores fornecidos para todas as propriedades, incluindo SnapshotGenerationAgentProcessSecurity, são enviados ao Distribuidor como texto simples. Deves encriptar a ligação entre o Publisher e o seu distribuidor remoto antes de chamar o Create método. Para obter mais informações, consulte Habilitar conexões criptografadas com o Mecanismo de Banco de Dados (Gestor de Configuração do SQL Server).
Chame o método CreateSnapshotAgent para criar a tarefa do Snapshot Agent para a publicação.
Criar uma publicação de fusão
Crie uma conexão com o Publisher usando a classe ServerConnection.
Crie uma instância da ReplicationDatabase classe para a base de dados de publicação, defina a ConnectionContext propriedade para a instância de ServerConnection a partir do passo 1 e chame o LoadProperties método. Se LoadProperties devolver
false, verifique se a base de dados existe.Se a propriedade EnabledMergePublishing for
false, defina-a comotruee chame CommitPropertyChanges.Crie uma instância da MergePublication classe e defina as seguintes propriedades para este objeto:
O ServerConnection do passo 1 relativo a ConnectionContext.
O nome da base de dados publicada para DatabaseName.
Um nome para a publicação para Name.
Utilize os campos Login e Password de SnapshotGenerationAgentProcessSecurity para fornecer as credenciais da conta do Windows com a qual o Snapshot Agent é executado. Esta conta também é usada quando o Snapshot Agent faz ligações ao Distribuidor local e para quaisquer ligações remotas ao utilizar a Autenticação Windows.
Note
A configuração SnapshotGenerationAgentProcessSecurity não é necessária quando a publicação é criada por um membro da função fixa de servidor sysadmin. Para obter mais informações, consulte Replication Agent Security Model.
(Opcional) Use o operador lógico OR inclusivo (
|em Visual C# eOrno Visual Basic) e o operador lógico exclusivo OR (^em Visual C# eXorno Visual Basic) para definir os PublicationAttributes valores da Attributes propriedade.
Chame o método Create para criar a publicação.
Importante
Ao configurar um Publisher com um Distribuidor remoto, os valores fornecidos para todas as propriedades, incluindo SnapshotGenerationAgentProcessSecurity, são enviados ao Distribuidor como texto simples. Deves encriptar a ligação entre o Publisher e o seu distribuidor remoto antes de chamar o Create método. Para obter mais informações, consulte Habilitar conexões criptografadas com o Mecanismo de Banco de Dados (Gestor de Configuração do SQL Server).
Chame o método CreateSnapshotAgent para criar o trabalho do Snapshot Agent para a publicação.
Exemplos (RMO)
Este exemplo ativa a base de dados AdventureWorks para publicação transacional, define uma tarefa do Agente Leitor de Registos e cria a publicação AdvWorksProductTran. Deve ser definido um artigo para esta publicação. As credenciais da conta Windows necessárias para criar o trabalho Log Reader Agent e o trabalho Snapshot Agent são passadas em tempo de execução. Para aprender a usar a RMO para definir artigos instantâneos e transacionais, veja Definir um Artigo.
// 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
Este exemplo ativa a base de dados AdventureWorks para publicação de intercalação e cria a publicação AdvWorksSalesOrdersMerge. Os artigos devem ainda ser definidos para esta publicação. As credenciais da conta Windows necessárias para criar o trabalho Snapshot Agent são passadas em tempo de execução. Para aprender a usar o RMO para definir artigos de fusão, consulte Definir um Artigo.
// 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