Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico descreve como criar uma publicação no SQL Server 2014 usando o SQL Server Management Studio, o Transact-SQL ou o RMO (Replication Management Objects).
Nesse Tópico
Antes de começar:
Para criar uma publicação e definir artigos usando:
Antes de começar
Limitações e restrições
- Os nomes de publicação e artigo não podem incluir nenhum dos seguintes caracteres: %, * , [ , ] , | , : , " , ? , ' , \ , / , < , >. Se os objetos no banco de dados incluirem qualquer um desses caracteres e você quiser replicá-los, você deverá 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 no assistente.
Segurança
Quando possível, solicite aos usuários que insiram credenciais de segurança no runtime. Se você precisar armazenar credenciais, use os serviços criptográficos fornecidos pelo Microsoft Windows .NET Framework.
Como usar o SQL Server Management Studio.
Crie publicações e defina artigos com o Assistente para Nova Publicação. Depois que uma publicação for criada, exiba e modifique as propriedades da publicação na caixa de diálogo Propriedades da Publicação – <Publicação> . Para obter informações sobre como criar uma publicação de um banco de dados Oracle, consulte Criar uma publicação de um Banco de Dados Oracle.
Para criar uma publicação e definir artigos
Conecte-se ao Publicador no Microsoft SQL Server Management Studio e, em seguida, expanda o nó do servidor.
Expanda a pasta Replicação e clique com o botão direito do mouse na pasta Publicações Locais .
Clique em Nova Publicação.
Siga as páginas no Assistente para Nova Publicação para:
Especifique um Distribuidor se a distribuição não tiver sido configurada no servidor. Para obter mais informações sobre como configurar a distribuição, consulte Configurar Publicação e Distribuição.
Se você especificar na página Distribuidor que o servidor Publicador atuará como seu próprio Distribuidor (um Distribuidor local) e o servidor não estiver configurado como um Distribuidor, o Assistente de Nova Publicação configurará o servidor. Você especificará uma pasta de instantâneo padrão para o Distribuidor na página Pasta de Instantâneo . A pasta de instantâneo é simplesmente um diretório que você designou como um compartilhamento; os agentes que leem e gravam nessa pasta devem ter permissões suficientes para acessá-la. Para obter mais informações sobre como proteger a pasta adequadamente, consulte Proteger a Pasta de Instantâneo.
Se você especificar que outro servidor deve atuar como o Distribuidor, insira uma senha na página Senha Administrativa para conexões feitas do Publicador para o Distribuidor. Essa senha deve corresponder à senha especificada quando o Publicador foi habilitado no Distribuidor remoto.
Para obter mais informações, consulte Configurar Distribuição.
Escolha um banco de dados de publicação.
Selecione um tipo de publicação. Para obter mais informações, consulte Tipos de Replicação.
Especificar dados e objetos de banco de dados a serem publicados; opcionalmente, filtre colunas de artigos de tabela e defina as propriedades do artigo.
Opcionalmente, filtre linhas da tabela de artigos. Para obter 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 são executados e faça conexões.
– Agente de Instantâneo para todas as publicações.
– Agente de Registro de Logs para todas as publicações transacionais.
– Queue Reader Agent para publicações transacionais que permitem a atualização de assinaturas.
Para obter mais informações, consulte o Modelo de Segurança do Agente de Replicação e as Práticas Recomendadas de Segurança de Replicação.
Roteirize a publicação opcionalmente. Para obter mais informações, consulte Replicação de Scripts.
Especifique um nome para a publicação.
Usando Transact-SQL
As publicações podem ser criadas programaticamente usando procedimentos armazenados de replicação. Os procedimentos armazenados usados dependerão do tipo de publicação que está sendo criada.
Para criar um instantâneo ou uma publicação transacional
No Publicador do banco de dados de publicação, execute sp_replicationdboption (Transact-SQL) para habilitar a publicação do banco de dados atual usando instantâneo ou replicação transacional.
Para uma publicação transacional, determine se existe um trabalho do Agente de Leitor de Log para o banco de dados de publicação. (Esta etapa não é necessária para publicações de captura instantânea.)
Se houver uma tarefa do Agente de Leitor de Log para o banco de dados de publicação, prossiga para etapa 3.
Se você não tiver certeza se existe um trabalho do Agente de Leitor de Log para um banco de dados publicado, execute sp_helplogreader_agent (Transact-SQL) no Publicador no banco de dados de publicação.
Se o conjunto de resultados estiver vazio, crie uma tarefa do Agente de Leitura de Log. No Publicador, execute sp_addlogreader_agent (Transact-SQL). Especifique as credenciais do Microsoft Windows nas quais o agente é executado para @job_name e @password. Se o agente usar a Autenticação do SQL Server ao se conectar ao Publicador, você também deverá especificar um valor 0 para @publisher_security_mode e as informações de logon do Microsoft SQL Server para @publisher_login e @publisher_password. Passe para a etapa 3.
No Publicador, execute sp_addpublication (Transact-SQL). Especifique um nome de publicação para @publication e, para o parâmetro @repl_freq , especifique um valor para uma publicação de
snapshotinstantâneo ou um valor decontinuousuma publicação transacional. Especifique outras opções de publicação. Isso define a publicação.Observação
Os nomes de publicação não podem incluir os seguintes caracteres:
% * [ ] | : " ? \ / <>
No Publicador, execute sp_addpublication_snapshot (Transact-SQL). Especifique o nome da publicação usado na etapa 3 para @publication e as credenciais do Windows nas quais o Snapshot Agent é executado para @snapshot_job_name e @password. Se o agente usar a Autenticação do SQL Server ao se conectar ao Publicador, você também deverá especificar um valor 0 para @publisher_security_mode e as informações de logon do SQL Server para @publisher_login e @publisher_password. Isso cria um trabalho do 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 sem formatação. Você deve criptografar a conexão entre o Publicador e seu Distribuidor remoto antes de executar esse procedimento armazenado. Para obter mais informações, confira Habilitar conexões criptografadas para o mecanismo de banco de dados (SQL Server Configuration Manager).
Adicione artigos à publicação. Para obter mais informações, consulte Define an Article.
Inicie o trabalho do Snapshot Agent para gerar o instantâneo inicial desta publicação. Para obter mais informações, consulte Criar e aplicar o instantâneo inicial.
Para criar uma publicação de fusão
No Publicador, execute sp_replicationdboption (Transact-SQL) para habilitar a publicação do banco de dados atual usando a replicação por mesclagem.
No editor do banco de dados de publicação, execute sp_addmergepublication (Transact-SQL). Especifique um nome para a publicação para @publication e qualquer outra opção de publicação. Isso define a publicação.
Observação
Os nomes de publicação não podem incluir os seguintes caracteres:
% * [ ] | : " ? \ / <>
No Publicador, execute sp_addpublication_snapshot (Transact-SQL). Especifique o nome da publicação usado na etapa 2 para @publication e as credenciais do Windows nas quais o Agente de Instantâneo é executado para @snapshot_job_name e @password. Se o agente usar a Autenticação do SQL Server ao se conectar ao Publicador, você também deverá especificar um valor 0 para @publisher_security_mode e as informações de logon do SQL Server para @publisher_login e @publisher_password. Isso cria um trabalho do 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 sem formatação. Você deve criptografar a conexão entre o Publicador e seu Distribuidor remoto antes de executar esse procedimento armazenado. Para obter mais informações, confira Habilitar conexões criptografadas para o mecanismo de banco de dados (SQL Server Configuration Manager).
Adicione artigos à publicação. Para obter mais informações, consulte Define an Article.
Inicie a tarefa do Snapshot Agent para gerar o instantâneo inicial desta publicação. Para obter mais informações, consulte Criar e aplicar o instantâneo inicial.
Exemplo (Transact-SQL)
Este exemplo cria uma publicação transacional. Variáveis de script são usadas para passar credenciais do Windows necessárias para criar trabalhos para o Agente de Instantâneo e o Agente de Leitor de Log.
-- 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 mesclagem. As variáveis de script são usadas para passar as credenciais do Windows necessárias para criar o trabalho para o 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'AdventureWorks2012';
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 [AdventureWorks2012]
EXEC sp_addmergepublication
-- These parameters are optional.
@publication = @publication,
-- optional parameters
@description = N'Merge publication of AdventureWorks2012.',
@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
Usando Objetos de Gerenciamento de Replicação (RMO)
Você pode criar publicações programaticamente usando RMO (Replication Management Objects). As classes RMO que você usa para criar uma publicação dependem do tipo de publicação que você cria.
Para criar um instantâneo ou uma publicação transacional
Crie uma conexão com o Publicador usando a classe ServerConnection .
Crie uma instância da classe ReplicationDatabase para o banco de dados de publicação, defina a propriedade ConnectionContext para a instância de ServerConnection da etapa 1 e chame o método LoadProperties. Se LoadProperties retornar
false, verifique se o banco de dados existe.Se a EnabledTransPublishing propriedade for
false, defina-a comotrue.Para uma publicação transacional, verifique o valor da propriedade LogReaderAgentExists. Se essa propriedade for
true, já existe uma tarefa do Agente de Leitura de Log para esse banco de dados. Se essa propriedade forfalse, faça o seguinte:Defina os campos Login, Password ou SecurePassword* de LogReaderAgentProcessSecurity para fornecer as credenciais para a conta do Microsoft Windows sob a qual o Agente de Leitor de Log é executado.
Observação
A configuração LogReaderAgentProcessSecurity não é necessária quando a publicação é criada por um membro da
sysadminfunção de servidor fixa. Nesse caso, o agente representará a conta do SQL Server Agent. 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 se conectar ao Publicador.
Chame o método CreateLogReaderAgent para criar a tarefa do Agente de Leitor de Log para o banco de dados.
Crie uma instância da TransPublication classe e defina as seguintes propriedades para este objeto:
O ServerConnection na etapa 1 para ConnectionContext.
O nome do banco de dados publicado para DatabaseName.
Um nome para a publicação Name.
Um PublicationType de Transactional ou Snapshot.
Os campos Login e Password de SnapshotGenerationAgentProcessSecurity fornecem as credenciais para a conta do Windows sob a qual o Agente de Instantâneo é executado. Essa conta também é usada quando o Snapshot Agent faz conexões com o Distribuidor local e para quaisquer conexões remotas ao usar a Autenticação do Windows.
Observação
A configuração SnapshotGenerationAgentProcessSecurity não é necessária quando a publicação é criada por um membro da
sysadminfunção de servidor fixa. Nesse caso, o agente representará a conta do SQL Server Agent. Para obter mais informações, consulte Replication Agent Security Model.(Opcional) Os campos SqlStandardLogin e SqlStandardPassword ou SecureSqlStandardPassword ao usar a Autenticação SQL Server para se conectar ao Publicador.
(Opcional) Use o operador OR lógico inclusivo (
|no Visual C# eOrno Visual Basic) e o operador OR lógico exclusivo (^no Visual C# eXorno Visual Basic) para definir os PublicationAttributes valores da Attributes propriedade.(Opcional) O nome do Editor para PublisherName quando o Editor não for um Editor do SQL Server.
Chame o método Create para criar a publicação.
Importante
Ao configurar um Publicador com um Distribuidor remoto, os valores fornecidos para todas as propriedades, incluindo SnapshotGenerationAgentProcessSecurity, são enviados ao Distribuidor como texto sem formatação. Você deve criptografar a conexão entre o Publicador e seu Distribuidor remoto antes de chamar o Create método. Para obter mais informações, confira Habilitar conexões criptografadas para o mecanismo de banco de dados (SQL Server Configuration Manager).
Execute o método CreateSnapshotAgent para criar o trabalho do Snapshot Agent para a publicação.
Para criar uma publicação de fusão
Crie uma conexão com o Publicador usando a classe ServerConnection .
Crie uma instância da classe ReplicationDatabase para o banco de dados de publicação, defina a propriedade ConnectionContext para a instância de ServerConnection da etapa 1 e chame o método LoadProperties. Se LoadProperties retornar
false, verifique se o banco de dados existe.Se EnabledMergePublishing a propriedade for
false, defina-a comotrue, e chame CommitPropertyChanges.Crie uma instância da MergePublication classe e defina as seguintes propriedades para este objeto:
O ServerConnection na etapa 1 para ConnectionContext.
O nome do banco de dados publicado para DatabaseName.
Um nome para a publicação Name.
Os campos Login e Password de SnapshotGenerationAgentProcessSecurity fornecem as credenciais para a conta do Windows sob a qual o Agente de Snapshot é executado. Essa conta também é usada quando o Snapshot Agent faz conexões com o Distribuidor local e para quaisquer conexões remotas ao usar a Autenticação do Windows.
Observação
A configuração SnapshotGenerationAgentProcessSecurity não é necessária quando a publicação é criada por um membro da
sysadminfunção de servidor fixa. Para obter mais informações, consulte Replication Agent Security Model.(Opcional) Use o operador OR lógico inclusivo (
|no Visual C# eOrno Visual Basic) e o operador OR lógico exclusivo (^no 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 Publicador com um Distribuidor remoto, os valores fornecidos para todas as propriedades, incluindo SnapshotGenerationAgentProcessSecurity, são enviados ao Distribuidor como texto sem formatação. Você deve criptografar a conexão entre o Publicador e seu Distribuidor remoto antes de chamar o Create método. Para obter mais informações, confira Habilitar conexões criptografadas para o mecanismo de banco de dados (SQL Server Configuration Manager).
Chame o método CreateSnapshotAgent para criar o trabalho do Agente de Snapshot para a publicação.
Exemplos (RMO)
Este exemplo habilita o banco de dados AdventureWorks para publicação transacional, define um trabalho do Log Reader Agent e cria a publicação AdvWorksProductTran. Um artigo deve ser definido para esta publicação. As credenciais da conta do Windows necessárias para criar o trabalho do Agente de Leitor de Log e o trabalho do Agente de Instantâneo são passadas no tempo de execução. Para saber como usar o RMO para definir artigos transacionais e instantâneos, consulte Definir um artigo.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";
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 AdventureWorks2012 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 = "AdventureWorks2012"
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 AdventureWorks2012 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 habilita o banco de dados AdventureWorks para publicação de mesclagem e cria a publicação AdvWorksSalesOrdersMerge. Os artigos ainda devem ser definidos para esta publicação. As credenciais da conta do Windows necessárias para criar o trabalho do Snapshot Agent são passadas em runtime. Para saber como usar o RMO para definir artigos de mesclagem, consulte Definir um artigo.
// Set the Publisher, publication database, and publication names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2012";
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 = "AdventureWorks2012"
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
Consulte Também
Usar sqlcmd com variáveis de script
Publicar dados e objetos de banco de dados
Conceitos de Objetos de Gerenciamento de Replicação
Defina um Artigo
Exibir e modificar as propriedades da publicação
Configurar Distribuição
Proteger o Distribuidor
Proteger o Publicador