sp_addmergepublication (Transact-SQL)
Cria uma nova publicação de mesclagem. Esse procedimento armazenado é executado no Publicador, no banco de dados que está sendo publicado.
Sintaxe
sp_addmergepublication [ @publication = ] 'publication'
[ ,[ @description = ] 'description'
[ ,[ @retention = ] retention ]
[ ,[ @sync_mode = ]'sync_mode' ]
[ , [ @allow_push = ] 'allow_push']
[ ,[ @allow_pull = ] 'allow_pull']
[ ,[ @allow_anonymous = ]'allow_anonymous']
[ ,[ @enabled_for_internet = ] 'enabled_for_internet']
[ ,[ @centralized_conflicts = ] 'centralized_conflicts']
[ ,[ @dynamic_filters = ] 'dynamic_filters']
[ ,[ @snapshot_in_defaultfolder = ] 'snapshot_in_default_folder']
[ ,[ @alt_snapshot_folder = ] 'alternate_snapshot_folder']
[ ,[ @pre_snapshot_script = ] 'pre_snapshot_script']
[ ,[ @post_snapshot_script = ] 'post_snapshot_script']
[ ,[ @compress_snapshot = ] 'compress_snapshot']
[ ,[ @ftp_address = ] 'ftp_address']
[ ,[ @ftp_port = ] ftp_port ]
[ ,[ @ftp_subdirectory = ] 'ftp_subdirectory']
[ ,[ @ftp_login = ] 'ftp_login']
[ ,[ @ftp_password = ] 'ftp_password']
[ ,[ @conflict_retention = ] conflict_retention ]
[ ,[ @keep_partition_changes = ] 'keep_partition_changes' ]
[ ,[ @allow_subscription_copy = ] 'allow_subscription_copy']
[ ,[ @allow_synctoalternate = ] 'allow_synctoalternate']
[ , [ @validate_subscriber_info = ] 'validate_subscriber_info']
[ ,[ @add_to_active_directory = ] 'add_to_active_directory']
[ ,[ @max_concurrent_merge = ] maximum_concurrent_merge ]
[ ,[ @max_concurrent_dynamic_snapshots = ] max_concurrent_dynamic_snapshots ]
[ , [ @use_partition_groups = ] 'use_partition_groups']
[ , [ @publication_compatibility_level = ] 'backward_comp_level' ]
[ , [ @replicate_ddl = ] replicate_ddl ]
[ , [ @allow_subscriber_initiated_snapshot = ] 'allow_subscriber_initiated_snapshot' ]
[ , [ @allow_web_synchronization = ] 'allow_web_synchronization' ]
[ , [ @web_synchronization_url = ] 'web_synchronization_url' ]
[ , [ @allow_partition_realignment = ] 'allow_partition_realignment' ]
[ , [ @retention_period_unit = ] 'retention_period_unit' ]
[ , [ @generation_leveling_threshold = ] generation_leveling_threshold ]
[ , [ @automatic_reinitialization_policy = ] automatic_reinitialization_policy ]
[ , [ @conflict_logging = ] 'conflict_logging' ]
Argumentos
[ @publication = ] 'publication'
É o nome da publicação de mesclagem a ser criada. publication é sysname, sem padrão, e não deve ser a palavra-chave ALL. O nome da publicação deve ser exclusivo no banco de dados.[ @description = ] 'description'
É a descrição da publicação. description é nvarchar(255), com um padrão NULL.[ @retention = ] retention
É o período de retenção, em unidades de período de retenção, para o qual salvar alterações para a publication determinada. retention é int, com um padrão de 14 unidades. Unidades de período de retenção são definidas por retention_period_unit. Se a assinatura não estiver sincronizada dentro do período de retenção e as alterações pendentes que por ventura tenha recebido tiverem sido removidas por uma operação de limpeza no Distribuidor, a assinatura irá expirar e deverá ser reiniciada. O período máximo de retenção permitido é o número de dias entre 31 de dezembro de 9999 e a data atual.Observação O período de retenção para publicações de mesclagem tem um período de tolerância de 24 horas para acomodar Assinantes em fusos horários diferentes. Por exemplo, se você definir um período de retenção de um dia, o período de retenção atual será 48 horas.
[ @sync\_mode = ] 'sync_mode'
É o modo de sincronização inicial de assinantes na publicação. sync_mode é nvarchar(10), e pode ser um dos valores a seguir.Valor
Descrição
native (padrão)
Produz saída de programa de cópia em massa em modo nativo de todas as tabelas.
character
Produz saída de programa de cópia em massa em modo de caractere de todas as tabelas. Exigido no suporte a Assinantes do MicrosoftSQL Server Compact 3.5 SP1 e não-SQL Server.
[ @allow\_push = ] 'allow_push'
Especifica se assinaturas push podem ser criadas para a determinada publicação. allow_push é nvarchar(5), com um padrão TRUE, que permite assinaturas push na publicação.[ @allow\_pull = ] 'allow_pull'
Especifica se as assinaturas pull podem ser criadas para a publicação fornecida. allow_pull é nvarchar(5), com um padrão TRUE, que permite assinaturas pull na publicação. Você deve especificar verdadeiro para suporte a Assinantes SQL Server Compact 3.5 SP1.[ @allow\_anonymous = ] 'allow_anonymous'
Especifica se assinaturas anônimas podem ser criadas para a determinada publicação. allow_anonymous é nvarchar(5), com um padrão TRUE, que permite assinaturas anônimas na publicação. Para oferecer suporte a Assinantes SQL Server Compact 3.5 SP1, é necessário especificar true.[ @enabled\_for\_internet = ] 'enabled_for_internet'
Especifica se a publicação está habilitada para Internet e determina se o FTP (File Transfer Protocol) pode ser usado para transferir os arquivos de instantâneo para um assinante. enabled_for_internet é nvarchar(5), com um padrão FALSE. Se for true, os arquivos de sincronização para a publicação será colocada no diretório C:\Arquivos de Programa\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp. O usuário deve criar o diretório Ftp. Se for false, a publicação não está habilitada para acesso à Internet.[ @centralized\_conflicts =] 'centralized_conflicts'
Esse parâmetro foi preterido e tem suporte somente para compatibilidade com versões anteriores. Use conflict_logging para especificar os local onde os registros de conflito são armazenados.[ @dynamic\_filters =] 'dynamic_filters'
Permite que a publicação de mesclagem use filtros de linha com parâmetros. dynamic_filters é nvarchar(5), com um padrão FALSE.Observação Você não deveria especificar esse parâmetro mas, em vez disso, permitir que o SQL Server determine se filtros de linhas com parâmetros serão usados. Se você especificar um valor de true para dynamic_filters, deve definir um filtro de linha com parâmetros para o artigo. Para obter mais informações, consulte Como definir e modificar um filtro de linha com parâmetros para um artigo de mesclagem (Programação Transact-SQL de replicação).
[ @snapshot\_in\_defaultfolder = ] 'snapshot_in_default_folder'
Especifica se os arquivos de instantâneo serão armazenados na pasta padrão. snapshot_in_default_folder é nvarchar(5), com um padrão TRUE. Se for true, arquivos de instantâneo poderão ser encontrados na pasta padrão. Se for false, os arquivos de instantâneo estarão armazenados no local especificado por alternate_snapshot_folder. Locais alternativos podem ser em outro servidor, em uma unidade de rede, ou uma mídia removível (como um CD-ROM ou disco removível). Você também pode salvar os arquivos de instantâneo em um site de FTP (File Transfer Protocol) para ser recuperado pelo Assinante posteriormente Observe que esse parâmetro pode ser verdadeiro e ainda ter um local especificado por alt_snapshot_folder. Essa combinação especifica que os arquivos de instantâneo serão armazenados nos locais padrão e alternativo.[ @alt\_snapshot\_folder = ] 'alternate_snapshot_folder'
Especifica o local da pasta alternativa para o instantâneo. alternate_snapshot_folder é nvarchar(255), com um padrão de NULL.[ @pre\_snapshot\_script = ] 'pre_snapshot_script'
Especifica um ponteiro para um local de arquivo .sql. pre_snapshot_script é nvarchar(255), com um padrão NULL. O Merge Agent executará o script pré-instantâneo antes de qualquer script de objeto replicado ao aplicar o instantâneo no Assinante. O script é executado no contexto de segurança usado pelo Merge Agent ao se conectar ao banco de dados de assinatura. Não são executados scripts de pré-instantâneo em Assinantes SQL Server Compact 3.5 SP1.[ @post\_snapshot\_script = ] 'post_snapshot_script'
Especifica um ponteiro para um local de arquivo .sql. post_snapshot_script é nvarchar(255), com um padrão NULL. O Merge Agent executará o script pós-instantâneo depois que todos os outros scripts de objeto replicado tentam sido aplicados durante uma sincronização inicial. O script é executado no contexto de segurança usado pelo Merge Agent ao se conectar ao banco de dados de assinatura. Não são executados scripts de pós-instantâneo em Assinantes SQL Server Compact 3.5 SP1.[ @compress\_snapshot = ] 'compress_snapshot'
Especifica que o instantâneo gravado no local @alt\_snapshot\_folder é para ser compactado no formato CAB da Microsoft. compress_snapshot é nvarchar(5), com um padrão FALSE. false especifica que o instantâneo não será compactado; true especifica que o instantâneo deve ser compactado. Arquivos de instantâneo maiores de 2 GB não podem ser compactados. Arquivos de instantâneo compactados são descompactados no local onde o Merge Agent é executado; as assinaturas pull são geralmente usadas com instantâneos compactados para que os arquivos sejam descompactados no Assinante. O instantâneo na pasta padrão não pode ser compactado. Para oferecer suporte a Assinantes SQL Server Compact 3.5 SP1, é necessário especificar false.[ @ftp\_address = ] 'ftp_address'
É o endereço de rede do serviço FTP para o Distribuidor. ftp_address é sysname, com um padrão NULL. Especifica onde os arquivos de instantâneo de publicação ficam localizados para serem captados pelo Merge Agent ou por um Assinante. Considerando que essa propriedade é armazenada para cada publicação, cada publicação pode ter um ftp_addressdiferente. A publicação deve oferecer suporte à propagação de instantâneos usando o FTP.[ @ftp\_port**=** ] ftp_port
É o número de porta do serviço FTP para o Distribuidor. ftp_port é int, com um padrão de 21. Especifica onde os arquivos de instantâneo de publicação ficam localizados para serem captados pelo Merge Agent ou por um Assinante. Considerando que essa propriedade é armazenada para cada publicação, cada publicação pode ter seu próprio ftp_port.[ @ftp\_subdirectory = ] 'ftp_subdirectory'
Especifica onde os arquivos de instantâneo estarão disponíveis para serem captados pelo Merge Agent do Assinante se a publicação oferecer suporte à propagação de instantâneo usando o FTP. ftp_subdirectory é nvarchar(255), com um padrão NULL. Já que essa propriedade é armazenada para cada publicação, cada publicação pode ter seu próprio ftp_subdirctory ou escolher não ter um subdiretório indicado com um valor de NULL.Na pré-geração de instantâneos para publicação com filtros com parâmetros, o instantâneo de dados de cada partição de Assinante precisa estar em sua própria pasta. A estrutura de diretório para instantâneos pré-gerados usando o FTP deve obedecer a estrutura seguinte:
alternate_snapshot_folder\ftp\publisher_publicationDB_publication\partitionID.
Observação Os valores acima em itálico dependerão das especificações da publicação e da partição de Assinante.
[ @ftp\_login = ] 'ftp_login'
É o nome de usuário usado para conexão com o serviço FTP. ftp_login é sysname, com um padrão de “anônimo”.[ @ftp\_password = ] 'ftp_password'
É a senha de usuário usada para conexão com o serviço FTP. ftp_password é sysname, com um padrão NULL.Observação sobre segurança Não use uma senha em branco. Use uma senha forte.
[ @conflict\_retention = ] conflict_retention
Especifica o período de retenção, em dias, para o qual os conflitos são retidos. conflict_retention é int, com um padrão de 14 dias antes que a linha de conflito seja limpa da tabela de conflito.[ @keep\_partition\_changes = ] 'keep_partition_changes'
Especifica se otimizações de alteração de partição deverão ser habilitada quando partições pré-computadas não puderem ser usadas. keep_partition_changes é nvarchar(5), com um padrão TRUE. false significa que as alterações de partição não são otimizadas e quando partições pré-computadas não são usadas, as partições enviadas a todos os Assinantes serão verificadas quando os dados forem alterados em uma partição. true significa que as alterações de partição são otimizadas e somente Assinantes com linhas nas partições alteradas serão afetados. Ap usar partições pré-computadas, defina use_partition_groups como true e defina keep_partition_changes como false. Para obter mais informações, consulte Otimizando o desempenho de filtro com parâmetros com partições pré-computadas.Observação Se você especificar um valor de true para keep_partition_changes, especifique um valor de 1 para o parâmetro de Snapshot Agent -MaxNetworkOptimization. Para obter mais informações sobre esse parâmetro, consulte Replication Snapshot Agent. Para obter mais informações sobre como especificar parâmetros de agente, consulte Administrando agentes de replicação.
[ @allow\_subscription\_copy = ] 'allow_subscription_copy'
Habilita ou desabilita a capacidade de copiar os bancos de dados de assinatura que assinam essa publicação. allow_subscription_copy é nvarchar(5), com um padrão FALSE. O tamanho do banco de dados de assinatura copiado deve ser menor de 2 gigabytes (GB).[ @allow\_synctoalternate = ] 'allow_synctoalternate'
Identificado apenas para fins informativos. Não há suporte. A compatibilidade futura não está garantida.[ @validate\_subscriber\_info = ] 'validate_subscriber_info'
Lista as funções usadas para definir uma partição de Assinante dos dados publicados quando são usados filtros de linha com parâmetros. validate_subscriber_info é nvarchar(500), com um padrão NULL. Essa informação é usada pelo Merge Agent para validar a partição do Assinante. Por exemplo, se SUSER_SNAME for usado no filtro de linha com parâmetros, o parâmetro deverá ser @validate\_subscriber\_info=N'SUSER_SNAME()'.Observação Você não deveria especificar esse parâmetro mas, em vez disso, permitir que o SQL Server determine automaticamente os critérios de filtragem.
[ @add\_to\_active\_directory = ] 'add_to_active_directory'
Esse parâmetro foi preterido e tem suporte somente para compatibilidade com versões anteriores. Você já não pode adicionar informações de publicação ao Microsoft Active Directory.[ @max\_concurrent\_merge = ] maximum_concurrent_merge
O número máximo de processos de mesclagem simultâneos. maximum_concurrent_merge é int com um padrão de 0. Um valor de 0 para essa propriedade significa que não há limite para o número de processos de mesclagem em execução em determinado momento. Essa propriedade define um limite para o número de processos de mesclagem simultâneos que pode ser executado em uma publicação de mesclagem de uma só vez. Se houver mais processos de mesclagem agendados ao mesmo tempo do que o valor permitido para execução, os trabalhos em excesso serão enfileirados e esperarão até que o processo de mesclagem em execução no momento seja concluído.[ @max\_concurrent\_dynamic\_snapshots =] max_concurrent_dynamic_snapshots
O número máximo de sessões de Snapshot Agent que pode ser executado simultaneamente para gerar instantâneos de dados filtrados para partições de Assinante. maximum_concurrent_dynamic_snapshots é int com um padrão 0. Se for 0, não haverá nenhum limite para o número de sessões de instantâneo. Se houver mais processos de instantâneo agendados ao mesmo tempo do que o valor permitido para execução, os trabalhos em excesso serão enfileirados e esperarão até que o processo de instantâneo em execução no momento seja concluído.[ @use\_partition\_groups = ] 'use_partition_groups'
Especifica que partições pré-computadas devem ser usadas para otimizar o processo de sincronização. use_partition_groups é nvarchar(5), e pode ser um destes valores:Valor
Descrição
true
A publicação usa partições pré-computadas.
false
A publicação não usa partições pré-computadas.
NULL (padrão)
O sistema escolhe a estratégia de particionamento.
Partições pré-computadas são usadas por padrão. Para evitar usar partições pré-computadas use_partition_groups deve ser definido como false. Quando NULL, o sistema decidirá se partições pré-computadas poderão ser usadas. Se partições pré-computadas não puderem ser usadas , então esse valor se tornará false efetivamente, sem gerar qualquer erro. Em tais casos, keep_partition_changes pode ser definido como true para fornecer alguma otimização. Para obter mais informações, consulte Filtro de linha com parâmetros e Otimizando o desempenho de filtro com parâmetros com partições pré-computadas.
[ @publication\_compatibility\_level = ] backward_comp_level
Indica a compatibilidade com versões anteriores da publicação. backward_comp_level é nvarchar(6)e pode ser um destes valores:Valor
Versão
70RTM
MicrosoftSQL Server 7.0
70SP1
SQL Server 7.0 Service Pack 1
70SP2
SQL Server 7.0 Service Pack 2
70SP3
SQL Server 7.0 Service Pack 3
70SP4
SQL Server 7.0 Service Pack 4
80RTM
MicrosoftSQL Server 2000
80SP1
SQL Server 2000 Service Pack 1
80SP2
SQL Server 2000 Service Pack 2
80SP3
SQL Server 2000 Service Pack 3
90RTM
MicrosoftSQL Server 2005
100RTM
MicrosoftSQL Server 2008
[@replicate_ddl = ] replicate_ddl
Indica se replicação de esquema tem suporte para a publicação. replicate_ddl é int, com um padrão de 1. 1 indica que instruções DDL (linguagem de definição de dados) executadas no Publicador são replicadas e 0 indica que instruções DDL não são replicadas. Para obter mais informações, consulte Fazendo alterações de esquema em bancos de dados de publicação.[ @allow\_subscriber\_initiated\_snapshot = ] 'allow_subscriber_initiated_snapshot'
Indica se um Assinante dessa publicação pode iniciar o processo de instantâneo para gerar o instantâneo filtrado para sua partição de dados. allow_subscriber_initiated_snapshot é nvarchar(5), com um padrão FALSE. true indica que os Assinantes podem iniciar o processo de instantâneo.[ @allow\_web\_synchronization = ] 'allow_web_synchronization'
Especifica se a publicação está habilitada para sincronização da Web. allow_web_synchronization é nvarchar(5), com um padrão FALSE. true especifica que as assinaturas dessa publicação podem ser sincronizadas pelo HTTPS. Para obter mais informações, consulte Sincronização da Web para replicação de mesclagem. Para oferecer suporte a Assinantes SQL Server Compact 3.5 SP1, é necessário especificar true.[ @web\_synchronization\_url = ] 'web_synchronization_url'
Especifica o valor padrão da URL da Internet usado para sincronização da Web. web_synchronization_url i é nvarchar(500), com um padrão NULL. Define a URL da Internet padrão, se não for definido um, explicitamente, quando sp_addmergepullsubscription_agent for executado.[ @allow\_partition\_realignment = ] 'allow_partition_realignment'
Determina se as exclusões serão enviadas ao assinante quando modificação na linha no Publicador causar alteração em sua partição. allow_partition_realignment é nvarchar(5), com um padrão TRUE. true envia exclusões para o Assinante para refletir os resultados de uma alteração de partição removendo os dados que não fazem mais parte da partição do Assinante. false deixa os dados de uma partição antiga no Assinante, onde as alterações feitas nesses dados no Publicador não serão replicadas no Assinante, mas alterações feitas no Assinante serão replicadas para o Publicador. A definição de allow_partition_realignment como false é usada para reter dados em uma assinatura de uma partição antiga, quando os dados precisam estar acessíveis para fins de histórico.Observação Os dados que permanecem no Assinante como resultado da configuração de allow_partition_realignment como false devem ser tratados como somente leitura; no entanto, isso não é forçado pelo sistema de replicação.
[ @retention\_period\_unit = ] 'retention_period_unit'
Especifica as unidades para o período de retenção definido por retention. retention_period_unit é nvarchar(10) e pode ser um dos valores a seguir.Valor
Versão
day (padrão)
O período de retenção é especificado em dias.
week
O período de retenção é especificado em semanas.
month
O período de retenção é especificado em meses.
year
O período de retenção é especificado em anos.
[ @generation\_leveling\_threshold = ] generation_leveling_threshold
Especifica o número de alterações contido em uma geração. Uma geração é uma coleção de alterações entregue a um Publicador ou Assinante. generation_leveling_threshold é int, com um valor padrão 1000. Para obter mais informações, consulte Como a replicação de mesclagem rastreia e enumera alterações.[ @automatic\_reinitialization\_policy = ] automatic_reinitialization_policy
Especifica se as alterações serão carregadas do Assinante antes de qualquer reinicialização automática requerida por uma alteração na publicação, onde um valor de 1 foi especificado para @force_reinit_subscription. automatic_reinitialization_policy é bit, com um valor padrão de 0. 1 significa que as alterações serão carregadas do Assinante antes que ocorra uma reinicialização automática.Importante Se você adicionar, descartar ou alterar um filtro com parâmetros, as alterações pendentes no Assinante não poderão ser carregadas no Publicador durante a reinicialização. Para carregar alterações pendentes, sincronize todas as assinaturas antes de alterar o filtro.
[ @conflict\_logging = ] 'conflict_logging'
Especifica onde os registros de conflito estão armazenados. conflict_logging é nvarchar(15), e pode ser um dos seguintes valores:Valor
Descrição
publisher
Registros de conflito são armazenados no Publicador.
subscriber
Registros de conflito são armazenados no Assinante que causou o conflito. Sem suporte para Assinantes SQL Server Compact 3.5 SP1.
both
Registros de conflito são armazenados no Publicador e no Assinante.
NULL (padrão)
A replicação define conflict_logging automaticamente como both quando o valor backward_comp_level for 90RTM e como publisher em todos os outros casos.
Valores de código de retorno
0 (êxito) ou 1 (falha)
Comentários
sp_addmergepublication é usado em replicação de mesclagem.
Para listar objetos de publicação no Active Directory usando o parâmetro @add_to_active_directory, o objeto SQL Server já deverá ter sido criado no Active Directory.
Se houver várias publicações que publicam os mesmos objetos de banco de dados, somente publicações com um valor replicate_ddl de 1 irá replicar instruções ALTER TABLE, ALTER VIEW, ALTER PROCEDURE, ALTER FUNCTION e ALTER TRIGGER DDL. No entanto, uma instrução ALTER TABLE DROP COLUMN DDL será replicada por todas as publicações que estão publicando a coluna cancelada.
Para Assinantes SQL Server Compact 3.5 SP1, o valor de alternate_snapshot_folder só será usado quando o valor de snapshot_in_default_folder for false.
Com replicação DDL habilitada (replicate_ddl**=1**) para uma publicação, para fazer alterações DDL de não-replicação na publicação,sp_changemergepublication deve ser primeiro executado para definir replicate_ddl como 0. Depois que as instruções DDL de não-replicação forem emitidas, sp_changemergepublication poderá ser executado novamente para definir a replicação de DDL.
Exemplo
-- 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'AdventureWorks';
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 [AdventureWorks]
EXEC sp_addmergepublication
-- These parameters are optional.
@publication = @publication,
-- optional parameters
@description = N'Merge publication of AdventureWorks.',
@publication_compatibility_level = N'90RTM';
-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password;
GO
Permissões
Somente membros da função de servidor fixa sysadmin ou da função de banco de dados fixa db_owner podem executar sp_addmergepublication.
Consulte também