Crie uma publicação

 

Aplicável a: SQL Server 2016

Este tópico descreve como criar uma publicação no SQL Server 2016 usando o SQL Server Management Studio, Transact-SQL ou RMO (Replication Management Objects).

Neste tópico

Limitações e restrições

  • Nomes de publicação e do artigo não podem incluir nenhum dos seguintes caracteres: %, * , [,], |,:, ",? , ' , \ , / , < , >. Se os objetos no banco de dados incluem qualquer um desses caracteres e para replicá-los, você deve especificar um nome de artigo é diferente do nome do objeto no Propriedades do artigo - < artigo> caixa de diálogo, que está disponível na artigos página do assistente.

Segurança

Quando possível, solicite que os usuários insiram as credenciais de segurança em tempo de execução. Se for preciso armazenar credenciais, use os serviços criptográficos fornecidos pelo Microsoft .NET Framework do Windows.

Crie publicações e defina artigos com o Assistente para Nova Publicação. Depois que uma publicação é criada, exibir e modificar propriedades de publicação na Propriedades de publicação - < publicação> caixa de diálogo. 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

  1. Conecte-se ao Publicador no Microsoft SQL Server Management Studioe, depois, expanda o nó do servidor.

  2. Expanda o replicação pasta e, em seguida, clique com botão direito do publicações locais pasta.

  3. Clique em Nova Publicação.

  4. Siga as páginas no Assistente para Nova Publicação para:

    • Especificar um Distribuidor se a distribuição não foi configurada no servidor. Para obter mais informações sobre a configuração de distribuição, consulte Configurar publicação e distribuição.

      Se você especificar o distribuidor página que o servidor do publicador atuará como seu próprio distribuidor (um distribuidor local) e o servidor não está configurado como um distribuidor, o Assistente para nova publicação configurará o servidor. Você especificará uma pasta de instantâneo padrão para o Distribuidor na página Pasta de Instantâneos . A pasta de instantâneo é simplesmente um diretório que você designou como um compartilhamento, agentes que leem essa pasta e gravam nela 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 um outro servidor deverá atuar como um Distribuidor, você deverá inserir uma senha na página Senha Administrativa para conexões feitas do Publicador ao Distribuidor. Esta 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.

    • Especifique os dados e os objetos de banco de dados para serem publicados; opcionalmente filtre as colunas de artigos de tabela e defina as propriedades dos artigos.

    • Opcionalmente filtre as linhas de artigos de tabela. Para obter mais informações, consulte Filtrar dados publicados.

    • Defina a agenda do Snapshot Agent.

    • Especifique as credenciais sob as quais os agentes de replicação a seguir executam e fazem conexões:

      - Agente de instantâneo para todas as publicações.

      - O Log Reader Agent para todas as publicações transacionais.

      - Queue Reader Agent para publicações transacionais que permitem assinaturas de atualização.

      Para obter mais informações, consulte Replication Agent Security Model e Replication Security Best Practices.

    • Opcionalmente faça o script da publicação. Para obter mais informações, consulte Scripting Replication.

    • Especifique um nome para a publicação.

Publicações podem ser criadas programaticamente usando procedimentos armazenados de replicação. Os procedimentos armazenados a serem usados dependerão do tipo de publicação a ser criada.

Para criar uma publicação de instantâneo ou transacional

  1. No publicador do banco de dados de publicação, execute sp_replicationdboption & #40. O Transact-SQL e 41; Para habilitar a publicação do banco de dados atual usando replicação de instantâneo ou transacional.

  2. Para uma publicação transacional, determine se um existe um trabalho do Log Reader Agent para o banco de dados de publicação. (Essa etapa não é requerida para publicações de instantâneo.)

    • Se já houver um trabalho do Log Reader Agent para o banco de dados de publicação, passe à etapa 3.

    • Se você não tiver certeza se um trabalho do Log Reader Agent existe para um banco de dados publicado, execute sp_helplogreader_agent & #40. O Transact-SQL e 41; o publicador do banco de dados de publicação.

    • Se o conjunto de resultados estiver vazio, crie um trabalho do Log Reader Agent. No publicador, execute sp_addlogreader_agent & #40. O Transact-SQL e 41;. Especifique o Microsoft credenciais do Windows sob a qual o agente executa @job_name e @password. Se o agente usar autenticação do SQL Server ao se conectar ao Editor, você também deve especificar um valor de 0 para @publisher_security_mode e Microsoft SQL Server informações de logon para @publisher_login e @publisher_password. Passe para a etapa 3.

  3. No publicador, execute sp_addpublication & #40. O Transact-SQL e 41;. Especifique um nome de publicação para @publication, e, para o @repl_freq parâmetro, especifique um valor de instantâneo para uma publicação de instantâneo ou um valor de contínua para uma publicação transacional. Especifique quaisquer outras opções de publicação. Isso define a publicação.

    System_CAPS_ICON_note.jpg Observação


    Os nomes de publicação não podem incluir nenhum dos caracteres a seguir:

    % * [ ] | : " ? \ / < >

  4. No publicador, execute sp_addpublication_snapshot & #40. O Transact-SQL e 41;. Especifique o nome da publicação usado na etapa 3 para @publication e as credenciais do Windows na qual o Snapshot Agent é executado para @snapshot_job_name e @password. Se o agente usar autenticação do SQL Server ao se conectar ao Editor, você também deve especificar um valor de 0 para @publisher_security_mode e o SQL Server informações de logon para @publisher_login e @publisher_password. Isso cria um trabalho do Agente de Instantâneo para a publicação.

    System_CAPS_ICON_important.jpg Importante


    Ao configurar um editor 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, consulte Habilitar conexões criptografadas para o mecanismo de banco de dados e 40; SQL Server Configuration Manager & 41;.

  5. Adicione artigos à publicação. Para obter mais informações, consulte Define an Article.

  6. Inicie o trabalho do Agente de Instantâneo para gerar o instantâneo inicial para essa publicação. Para obter mais informações, consulte Create and Apply the Initial Snapshot.

Para criar uma publicação de mesclagem

  1. No publicador, execute sp_replicationdboption & #40. O Transact-SQL e 41; Para habilitar a publicação do banco de dados atual usando replicação de mesclagem.

  2. No publicador do banco de dados de publicação, execute sp_addmergepublication & #40. O Transact-SQL e 41;. Especifique o nome da publicação para @publication e quaisquer outras opções de publicação. Isso define a publicação.

    System_CAPS_ICON_note.jpg Observação


    Os nomes de publicação não podem incluir nenhum dos caracteres a seguir:

    % * [ ] | : " ? \ / < >

  3. No publicador, execute sp_addpublication_snapshot & #40. O Transact-SQL e 41;. Especifique o nome da publicação usado na etapa 2 para @publication e as credenciais do Windows na qual o Snapshot Agent é executado para @snapshot_job_name e @password. Se o agente usar autenticação do SQL Server ao se conectar ao Editor, você também deve especificar um valor de 0 para @publisher_security_mode e o SQL Server informações de logon para @publisher_login e @publisher_password. Isso cria um trabalho do Agente de Instantâneo para a publicação.

    System_CAPS_ICON_important.jpg Importante


    Ao configurar um editor 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, consulte Habilitar conexões criptografadas para o mecanismo de banco de dados e 40; SQL Server Configuration Manager & 41;.

  4. Adicione artigos à publicação. Para obter mais informações, consulte Define an Article.

  5. Inicie o trabalho do Agente de Instantâneo para gerar o instantâneo inicial para essa publicação. Para obter mais informações, consulte Create and Apply the Initial Snapshot.

Exemplo (Transact-SQL)

Este exemplo cria uma publicação transacional. As variáveis de script são usadas para passar as credenciais do Windows necessárias para criar trabalhos do Agente de Instantâneo e do 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 do Agente de Instantâneo.

-- 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

Crie publicações de forma programada, usando o RMO (Replication Management Objects). As classes de RMO usadas para criar uma publicação dependem do tipo de publicação criada.

Para criar uma publicação de instantâneo ou transacional

  1. Criar uma conexão com o publicador usando o ServerConnection classe.

  2. Criar uma instância do ReplicationDatabase de classe para o banco de dados de publicação, defina o ConnectionContext propriedade para a instância do ServerConnection da etapa 1 e chame o LoadProperties método. Se LoadProperties retorna false, verifique se existe o banco de dados.

  3. Se o EnabledTransPublishing é de propriedade false, defina-o como true.

  4. Para uma publicação transacional, verifique o valor de LogReaderAgentExists propriedade. Se essa propriedade for true, um trabalho do Log Reader Agent já existirá para esse banco de dados. Se essa propriedade for false, faça o seguinte:

  5. Criar uma instância do TransPublication de classe e defina as seguintes propriedades para esse objeto:

  6. Chamar o criar método para criar a publicação.

    System_CAPS_ICON_important.jpg Importante


    Ao configurar um editor 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 criar método. Para obter mais informações, consulte Habilitar conexões criptografadas para o mecanismo de banco de dados e 40; SQL Server Configuration Manager & 41;.

  7. Chamar o CreateSnapshotAgent método para criar o trabalho do Snapshot Agent para a publicação.

Para criar uma publicação de mesclagem

  1. Criar uma conexão com o publicador usando o ServerConnection classe.

  2. Criar uma instância do ReplicationDatabase de classe para o banco de dados de publicação, defina o ConnectionContext propriedade para a instância do ServerConnection da etapa 1 e chame o LoadProperties método. Se LoadProperties retorna false, verifique se existe o banco de dados.

  3. Se EnabledMergePublishing é de propriedade false, defina-o como true, e chamar CommitPropertyChanges.

  4. Criar uma instância do MergePublication de classe e defina as seguintes propriedades para esse objeto:

  5. Chamar o criar método para criar a publicação.

    System_CAPS_ICON_important.jpg Importante


    Ao configurar um editor 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 criar método. Para obter mais informações, consulte Habilitar conexões criptografadas para o mecanismo de banco de dados e 40; SQL Server Configuration Manager & 41;.

  6. Chamar o CreateSnapshotAgent método para criar o trabalho do Snapshot Agent para a publicação.

Exemplos (RMO)

Esse exemplo ativa o banco de dados AdventureWorks para publicação transacional; define um trabalho do Agente de Leitor de Log e cria a publicação AdvWorksProductTran. É preciso definir um artigo para essa publicação. As credenciais da conta do Windows necessárias para criar o trabalho do Log Reader Agent e o do Snapshot Agent são passadas em tempo de execução. Para saber como usar RMO para definir artigos instantâneos e transacionais, consulte Define an Article.

			// 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

Esse exemplo ativa o banco de dados AdventureWorks para publicação de mesclagem e cria a publicação AdvWorksSalesOrdersMerge. Artigos ainda precisam ser definidos para essa publicação. As credenciais da conta do Windows, necessárias para criar o trabalho do Agente de Instantâneo, são passadas em tempo de execução. Para saber como usar RMO para definir artigos de mesclagem, consulte Define an Article.

			// 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

Usar sqlcmd com variáveis de script
Publicar dados e objetos de banco de dados
Conceitos de Replication Management Objects
Defina um Artigo
Visualizar e modificar as propriedades da publicação
Configurar a distribuição
Proteger o distribuidor
Proteger o Publicador

Contribuições da comunidade

ADICIONAR
Mostrar: