sp_addpublication (Transact-SQL)

Aplica-se a:SQL ServerInstância Gerenciada de SQL do Azure

Cria uma publicação de instantâneo ou transacional. Esse procedimento armazenado é executado no Publicador, no banco de dados publicador.

Convenções de sintaxe de Transact-SQL

Sintaxe

sp_addpublication
    [ @publication = ] N'publication'
    [ , [ @taskid = ] taskid ]
    [ , [ @restricted = ] N'restricted' ]
    [ , [ @sync_method = ] N'sync_method' ]
    [ , [ @repl_freq = ] N'repl_freq' ]
    [ , [ @description = ] N'description' ]
    [ , [ @status = ] N'status' ]
    [ , [ @independent_agent = ] N'independent_agent' ]
    [ , [ @immediate_sync = ] N'immediate_sync' ]
    [ , [ @enabled_for_internet = ] N'enabled_for_internet' ]
    [ , [ @allow_push = ] N'allow_push' ]
    [ , [ @allow_pull = ] N'allow_pull' ]
    [ , [ @allow_anonymous = ] N'allow_anonymous' ]
    [ , [ @allow_sync_tran = ] N'allow_sync_tran' ]
    [ , [ @autogen_sync_procs = ] N'autogen_sync_procs' ]
    [ , [ @retention = ] retention ]
    [ , [ @allow_queued_tran = ] N'allow_queued_tran' ]
    [ , [ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder' ]
    [ , [ @alt_snapshot_folder = ] N'alt_snapshot_folder' ]
    [ , [ @pre_snapshot_script = ] N'pre_snapshot_script' ]
    [ , [ @post_snapshot_script = ] N'post_snapshot_script' ]
    [ , [ @compress_snapshot = ] N'compress_snapshot' ]
    [ , [ @ftp_address = ] N'ftp_address' ]
    [ , [ @ftp_port = ] ftp_port ]
    [ , [ @ftp_subdirectory = ] N'ftp_subdirectory' ]
    [ , [ @ftp_login = ] N'ftp_login' ]
    [ , [ @ftp_password = ] N'ftp_password' ]
    [ , [ @allow_dts = ] N'allow_dts' ]
    [ , [ @allow_subscription_copy = ] N'allow_subscription_copy' ]
    [ , [ @conflict_policy = ] N'conflict_policy' ]
    [ , [ @centralized_conflicts = ] N'centralized_conflicts' ]
    [ , [ @conflict_retention = ] conflict_retention ]
    [ , [ @queue_type = ] N'queue_type' ]
    [ , [ @add_to_active_directory = ] N'add_to_active_directory' ]
    [ , [ @logreader_job_name = ] N'logreader_job_name' ]
    [ , [ @qreader_job_name = ] N'qreader_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @allow_initialize_from_backup = ] N'allow_initialize_from_backup' ]
    [ , [ @replicate_ddl = ] replicate_ddl ]
    [ , [ @enabled_for_p2p = ] N'enabled_for_p2p' ]
    [ , [ @publish_local_changes_only = ] N'publish_local_changes_only' ]
    [ , [ @enabled_for_het_sub = ] N'enabled_for_het_sub' ]
    [ , [ @p2p_conflictdetection = ] N'p2p_conflictdetection' ]
    [ , [ @p2p_originator_id = ] p2p_originator_id ]
    [ , [ @p2p_continue_onconflict = ] N'p2p_continue_onconflict' ]
    [ , [ @allow_partition_switch = ] N'allow_partition_switch' ]
    [ , [ @replicate_partition_switch = ] N'replicate_partition_switch' ]
    [ , [ @allow_drop = ] N'allow_drop' ]
    [ , [ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy' ]
[ ; ]

Argumentos

@publication [ = ] N'publicação'

O nome da publicação a ser criada. @publication é sysname, sem padrão. O nome deve ser exclusivo no banco de dados.

@taskid [ = ] Id da tarefa

Suportado apenas para compatibilidade com versões anteriores; use sp_addpublication_snapshot (Transact-SQL).

@restricted [ = ] N'restrito'

Suportado apenas para compatibilidade com versões anteriores; uso default_access.

@sync_method [ = ] N'sync_method'

O modo de sincronização. @sync_method é nvarchar(40) e pode ser um dos seguintes valores.

Valor Description
native1 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. Nota: Para um editor Oracle, character é válido apenas para replicação de snapshot.
concurrent1 Produz a saída do programa de cópia em massa de modo nativo de todas as tabelas, mas não bloqueia as tabelas durante o snapshot. Com suporte somente para publicações transacionais.
concurrent_c Produz a saída do programa de cópia em massa no modo de caractere de todas as tabelas, mas não bloqueia as tabelas durante o instantâneo. Com suporte somente para publicações transacionais.
database snapshot Produz saída de programa de cópia em massa em modo nativo de todas as tabelas de um instantâneo do banco de dados. Os instantâneos de banco de dados não estão disponíveis em todas as edições do SQL Server. Veja uma lista de recursos que têm suporte nas edições do SQL Server em Edições e recursos com suporte no SQL Server 2022.
database snapshot character Produz saída de programa de cópia em massa em modo de caractere de todas as tabelas de um instantâneo de banco de dados. Os instantâneos de banco de dados não estão disponíveis em todas as edições do SQL Server. Veja uma lista de recursos que têm suporte nas edições do SQL Server em Edições e recursos com suporte no SQL Server 2022.
NULL (padrão) O padrão é para Publicadores do native SQL Server. Para Publicadores que não sejam do SQL Server, o padrão é quando o valor de @repl_freq é Snapshotcharacter e concurrent_c para todos os outros casos.

1 Não suportado para editores Oracle.

@repl_freq [ = ] N'repl_freq'

O tipo de frequência de replicação, @repl_freq é nvarchar(10) e pode ser um dos seguintes valores.

Valor Descrição
continuous (padrão) O agente leitor de log é executado continuamente. Para Editores que não sejam do SQL Server, isso requer que @sync_method seja definido como concurrent_c.
snapshot O agente leitor de log é executado em uma agenda. Para Editores que não sejam do SQL Server, isso requer que @sync_method seja definido como character.

@description [ = ] N'descrição'

Uma descrição opcional para a publicação. @description é nvarchar(255), com um padrão de NULL.

@status [ = ] N'status'

Especifica se os dados da publicação estão disponíveis. @status é nvarchar(8) e pode ser um dos seguintes valores.

Valor Descrição
active O dados da publicação estão imediatamente disponíveis para os Assinantes.
inactive (padrão) Os dados da publicação não estão disponíveis para os Assinantes quando a publicação é criada pela primeira vez (eles podem se inscrever, mas as assinaturas não são processadas).

Não há suporte para editores Oracle.

@independent_agent [ = ] N'independent_agent'

Especifica se há um Agente de Distribuição autônomo para esta publicação. @independent_agent é nvarchar(5), com um padrão de false.

  • Se true, houver um Agente de Distribuição autônomo para esta publicação.
  • Se false, a publicação usará um Agente de Distribuição compartilhado e cada par de banco de dados do Publicador/Banco de Dados do Assinante terá um único Agente compartilhado.

@immediate_sync [ = ] N'immediate_sync'

Especifica se os arquivos de sincronização da publicação são criados em cada execução do Agente de Instantâneo. @immediate_sync é nvarchar(5), com um padrão de false.

Se true, os arquivos de sincronização serão criados ou recriados sempre que o Snapshot Agent for executado. Assinantes podem obter arquivos de sincronização imediatamente se o Snapshot Agent for concluído antes da assinatura ser criada. Novas assinaturas obtêm os arquivos de sincronização mais novos gerados pela execução mais recente do Agente de Instantâneo. @independent_agent deve ser true para @immediate_sync sejatrue. Se false, os arquivos de sincronização serão criados somente se houver novas assinaturas. Você deve chamar sp_addsubscription para cada assinatura quando adicionar incrementalmente um novo artigo a uma publicação existente. Os assinantes não poderão receber os arquivos de sincronização após a assinatura até que os Snapshot Agents sejam iniciados e concluídos.

@enabled_for_internet [ = ] N'enabled_for_internet'

Especifica se a publicação está habilitada para a Internet, e determina se o protocolo FTP pode ser usado para transferir os arquivos de instantâneo para um assinante. @enabled_for_internet é nvarchar(5), com um padrão de false. Se true, os arquivos de sincronização para a publicação são colocados no C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp diretório. O usuário deve criar o Ftp diretório.

@allow_push [ = ] N'allow_push'

Especifica se podem ser criadas assinaturas push para a publicação determinada. @allow_push é nvarchar(5), com um padrão de true, que permite assinaturas push na publicação.

@allow_pull [ = ] N'allow_pull'

Especifica se podem ser criadas assinaturas pull para a publicação determinada. @allow_pull é nvarchar(5), com um padrão de false. Se false, as assinaturas pull não forem permitidas na publicação.

@allow_anonymous [ = ] N'allow_anonymous'

Especifica se podem ser criadas assinaturas anônimas para a publicação determinada. @allow_anonymous é nvarchar(5), com um padrão de false. Se true, @immediate_sync também deve ser definido como true. Se false, assinaturas anônimas não são permitidas na publicação.

@allow_sync_tran [ = ] N'allow_sync_tran'

Especifica se são permitidas assinaturas de atualização imediata na publicação. @allow_sync_tran é nvarchar(5), com um padrão de false. true não é suportado para Publicadores Oracle.

@autogen_sync_procs [ = ] N'autogen_sync_procs'

Especifica se o procedimento armazenado de sincronização para assinaturas de atualização imediata é gerado no Publicador. @autogen_sync_procs é nvarchar(5) e pode ser um dos seguintes valores.

Valor Descrição
true Definido automaticamente quando assinaturas de atualização estão habilitadas.
false Defina automaticamente quando a atualização de assinaturas não estiver habilitada ou para o Oracle Publishers.
NULL (padrão) O padrão é true quando a atualização de assinaturas está habilitada e quando false a atualização de assinaturas não está habilitada.

Observação

O valor fornecido pelo usuário para @autogen_sync_procsserá substituído dependendo dos valores especificados para @allow_queued_tran e @allow_sync_tran.

@retention [ = ] retenção

O período de retenção em horas para a atividade de assinatura. @retention é int, com um padrão de 336. Se uma assinatura não estiver ativa dentro do período de retenção, ela expirará e será removida. O valor pode ser maior que o período de retenção de máximo do banco de dados de distribuição usado pelo Publicador. Se 0, as assinaturas conhecidas da publicação nunca expirarão e serão removidas pelo Agente de Limpeza de Assinatura Expirada.

@allow_queued_tran [ = ] N'allow_queued_tran'

Habilita ou desabilita o enfileiramento de mensagens no Assinante até que possam ser aplicadas no Publicador. @allow_queued_tran é nvarchar(5), com um padrão de false.

  • Se false, as alterações no Assinante não estiverem na fila.
  • true não é suportado para Publicadores Oracle.

@snapshot_in_defaultfolder [ = ] N'snapshot_in_defaultfolder'

Especifica se os arquivos de instantâneo são armazenados na pasta padrão. @snapshot_in_defaultfolder é nvarchar(5), com um padrão de true.

  • Se true, os arquivos de instantâneo podem ser encontrados na pasta padrão.
  • Se false, os arquivos de instantâneo tiverem sido armazenados no local alternativo especificado por @alt_snapshot_folder.

Locais alternativos podem ficar 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 para ser recuperado pelo Assinante posteriormente Esse parâmetro pode ser true e ainda ter um local no parâmetro @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 [ = ] N'alt_snapshot_folder'

Especifica o local da pasta alternativa para o instantâneo. @alt_snapshot_folder é nvarchar(255), com um padrão de NULL.

@pre_snapshot_script [ = ] N'pre_snapshot_script'

Especifica um ponteiro para um local de arquivo .sql . @pre_snapshot_script é nvarchar(255), com um padrão de NULL. O Agente de Distribuição executará o script pré-instantâneo antes de executar qualquer script de objeto replicado, ao aplicar um instantâneo no Assinante. O script é executado no contexto de segurança usado pelo Distribution Agente na conexão com o banco de dados de assinatura.

@post_snapshot_script [ = ] N'post_snapshot_script'

Especifica um ponteiro para um local de .sql arquivo. @post_snapshot_script é nvarchar(255), com um padrão de NULL. O Agente de Distribuição 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 Distribution Agente na conexão com o banco de dados de assinatura.

@compress_snapshot [ = ] N'compress_snapshot'

Especifica que o instantâneo gravado no local @alt_snapshot_folder deve ser compactado no formato Microsoft CAB. @compress_snapshot é nvarchar(5), com um padrão de false.

  • false Especifica que o instantâneo não está compactado.
  • true Especifica que o instantâneo é compactado.

Arquivos de instantâneo maiores que 2 gigabytes (GB) não podem ser compactados. Arquivos de instantâneo compactados são descompactados no local onde o Distribution Agent é executado; 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.

@ftp_address [ = ] N'ftp_address'

O endereço de rede do serviço FTP para o Distribuidor. @ftp_address é sysname, com um padrão de NULL. Especifica onde os arquivos de instantâneo de publicação ficam localizados para serem captados pelo Agente de Distribuição ou por um Assinante. Como essa propriedade é armazenada para cada publicação, cada publicação pode ter um @ftp_address diferente. A publicação deve oferecer suporte à propagação de instantâneos por meio de FTP.

@ftp_port [ = ] ftp_port

O número da porta do serviço FTP do 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 Distribution Agent ou por um Assinante. Como essa propriedade é armazenada para cada publicação, cada publicação pode ter seu próprio @ftp_port.

@ftp_subdirectory [ = ] N'ftp_subdirectory'

Especifica onde os arquivos de instantâneo estão disponíveis para o Distribution Agent ou Merge Agent do assinante pegar se a publicação oferecer suporte à propagação de instantâneos usando FTP. @ftp_subdirectory é nvarchar(255), com um padrão de NULL. Como essa propriedade é armazenada para cada publicação, cada publicação pode ter seu próprio @ftp_subdirctory ou optar por não ter nenhum subdiretório, indicado com um NULL valor.

@ftp_login [ = ] N'ftp_login'

O nome de usuário usado para se conectar ao serviço FTP. @ftp_login é sysname, com um padrão de anonymous.

@ftp_password [ = ] N'ftp_password'

A senha de usuário usada para se conectar ao serviço FTP. @ftp_password é sysname, com um padrão de NULL.

@allow_dts [ = ] N'allow_dts'

Especifica que a publicação permite transformações de dados. Você pode especificar um pacote DTS ao criar uma assinatura. @allow_dts é nvarchar(5), com um padrão de false, que não permite transformações DTS. Quando @allow_dts for true, @sync_method deve ser definido como ou characterconcurrent_c.

true não é suportado para Publicadores Oracle.

@allow_subscription_copy [ = ] N'allow_subscription_copy'

Habilita ou desabilita a capacidade para copiar os bancos de dados de assinatura que assinam essa publicação. @allow_subscription_copy é nvarchar(5), com um padrão de false.

@conflict_policy [ = ] N'conflict_policy'

Especifica a política de resolução de conflito seguida quando a opção de assinante de atualização enfileirado é usada. @conflict_policy é nvarchar(100) e pode ser um dos seguintes valores.

Valor Descrição
pub wins O Publicador vence o conflito.
sub reinit Reinicialize a assinatura.
sub wins O Assinante vence o conflito.
NULL (padrão) Se NULL, e a publicação for uma publicação de instantâneo, a política padrão se tornará sub reinit. Se NULL e a publicação não for uma publicação de instantâneo, o padrão se tornará pub wins.

Não há suporte para editores Oracle.

@centralized_conflicts [ = ] N'centralized_conflicts'

Especifica se registros de conflito são armazenados no Publicador. @centralized_conflicts é nvarchar(5), com um padrão de NULL.

  • Se true, os registros de conflito serão armazenados no Publicador.
  • Se false, os registros de conflito serão armazenados no editor e no assinante que causou o conflito.

Não há suporte para editores Oracle.

@conflict_retention [ = ] conflict_retention

Especifica o período de retenção de conflito, em dias. Esse é o período de tempo em que os metadados de conflito são armazenados para replicação transacional ponto a ponto e assinaturas de atualização enfileiradas. @conflict_retention é int, com um padrão de 14.

Não há suporte para editores Oracle.

@queue_type [ = ] N'queue_type'

Especifica o tipo de fila usado. @queue_type é nvarchar(10) e pode ser um desses valores.

Valor Descrição
sql Use o SQL Server para armazenar transações.
NULL (padrão) O padrão é sql, que especifica o uso do SQL Server para armazenar transações.

Observação

O suporte para usar o serviço de enfileiramento de mensagens da Microsoft foi descontinuado. A especificação de um valor de msmq resultará em um aviso, e a replicação definirá automaticamente o valor como sql.

Não há suporte para editores Oracle.

@add_to_active_directory [ = ] N'add_to_active_directory'

Esse parâmetro foi preterido e só tem suporte para a compatibilidade com versões anteriores de scripts. Você não pode mais adicionar informações de publicação ao Microsoft Active Directory.

@logreader_job_name [ = ] N'logreader_job_name'

O nome de um trabalho de agente existente. @logreader_job_name é sysname, com um padrão de NULL. Esse parâmetro só é especificado quando o Log Reader Agent usa um trabalho existente em vez de um novo que está sendo criado.

@qreader_job_name [ = ] N'qreader_job_name'

O nome de um trabalho de agente existente. @qreader_job_name é sysname, com um padrão de NULL. Esse parâmetro só é especificado quando o Queue Reader Agent usa um trabalho existente em vez de um novo que está sendo criado.

@publisher [ = ] N'editor'

Especifica um editor que não seja do SQL Server. @publisher é sysname, com um padrão de NULL.

@publisher não deve ser usado ao adicionar uma publicação a um SQL Server Publisher.

@allow_initialize_from_backup [ = ] N'allow_initialize_from_backup'

Indica se os Assinantes podem iniciar uma assinatura para essa publicação de um backup em vez de um instantâneo inicial. @allow_initialize_from_backup é nvarchar(5) e pode ser um destes valores:

Valor Descrição
true Habilita inicialização de um backup.
false Desabilita inicialização de um backup.
NULL (padrão) O padrão é para uma publicação em uma topologia de replicação ponto a true ponto e false para todas as outras publicações.

Para obter mais informações, consulte Initialize a Transactional Subscription Without a Snapshot.

Aviso

Para evitar a falta de dados do assinante, ao usar sp_addpublication com @allow_initialize_from_backup = N'true'o , use sempre @immediate_sync = N'true'.

@replicate_ddl [ = ] replicate_ddl

Indica se há suporte para replicação de esquema para a publicação. @replicate_ddl é int, com um padrão de para Publicadores do 1 SQL Server e 0 para Publicadores que não sejam do SQL Server.

  • 1 indica que as instruções DDL (linguagem de definição de dados) executadas no editor são replicadas.
  • 0 indica que as instruções DDL não são replicadas.

A replicação de esquema não é suportada para editores Oracle.

Para obter mais informações, consulte Make Schema Changes on Publication Databases (Fazer alterações de esquema em bancos de dados de publicação).

O parâmetro @replicate_ddl é respeitado quando uma instrução DDL adiciona uma coluna. O parâmetro @replicate_ddl é ignorado quando uma instrução DDL altera ou descarta uma coluna pelos seguintes motivos.

  • Quando uma coluna é descartada, deve ser atualizada para impedir que novas instruções DML incluam a coluna descartada, sysarticlecolumns o que causaria falha no agente de distribuição. O parâmetro @replicate_ddl é ignorado porque a replicação sempre deve replicar a alteração de esquema.

  • Quando uma coluna é alterada, o tipo de dados de origem ou a anulabilidade podem ter sido alterados, fazendo com que as instruções DML contenham um valor que pode não ser compatível com a tabela no assinante. Estas instruções DML podem causar falha no agente de distribuição. O parâmetro @replicate_ddl é ignorado porque a replicação sempre deve replicar a alteração de esquema.

  • Quando uma instrução DDL adiciona uma nova coluna, sysarticlecolumns não inclui a nova coluna. As instruções DML não tentam replicar dados para a nova coluna. O parâmetro é honrado porque replicar ou não replicar o DDL são aceitáveis.

@enabled_for_p2p [ = ] N'enabled_for_p2p'

Permite que a publicação seja usada em uma topologia de replicação ponto a ponto. @enabled_for_p2p é nvarchar(5), com um padrão de false. true indica que a publicação oferece suporte à replicação ponto a ponto. Ao definir @enabled_for_p2p como true, as seguintes restrições se aplicam:

  • @allow_anonymous deve ser false.
  • @allow_dts deve ser false.
  • @allow_initialize_from_backup deve ser true.
  • @allow_queued_tran deve ser false.
  • @allow_sync_tran deve ser false.
  • @conflict_policy deve ser false.
  • @independent_agent deve ser true.
  • @repl_freq deve ser continuous.
  • @replicate_ddl deve ser 1.

Para obter mais informações, consulte Ponto a ponto - replicação transacional.

@publish_local_changes_only [ = ] N'publish_local_changes_only'

Identificado apenas para fins informativos. Não há suporte. A compatibilidade futura não está garantida.

@enabled_for_het_sub [ = ] N'enabled_for_het_sub'

Permite que a publicação ofereça suporte a Assinantes que não sejam do SQL Server. @enabled_for_het_sub é nvarchar(5), com um padrão de false. Um valor de true significa que a publicação oferece suporte a Assinantes que não são do SQL Server. Quando @enabled_for_het_sub é true, aplicam-se as seguintes restrições:

  • @allow_initialize_from_backup deve ser false.
  • @allow_push deve ser true.
  • @allow_queued_tran deve ser false.
  • @allow_subscription_copy deve ser false.
  • @allow_sync_tran deve ser false.
  • @autogen_sync_procs deve ser false.
  • @conflict_policy deve ser NULL.
  • @enabled_for_internet deve ser false.
  • @enabled_for_p2p deve ser false.
  • @ftp_address deve ser NULL.
  • @ftp_subdirectory deve ser NULL.
  • @ftp_password deve ser NULL.
  • @pre_snapshot_script deve ser NULL.
  • @post_snapshot_script deve ser NULL.
  • @replicate_ddl deve ser 0.
  • @qreader_job_name deve ser NULL.
  • @queue_type deve ser NULL.
  • @sync_method não pode ser native ou concurrent.

Para obter mais informações, consulte Non-SQL Server Subscribers.

@p2p_conflictdetection [ = ] N'p2p_conflictdetection'

Permite que o Agente de Distribuição detecte conflitos se a publicação for habilitada para replicação ponto a ponto. @p2p_conflictdetection é nvarchar(5), com um padrão de false. Para obter mais informações, consulte Ponto a ponto - Detecção de conflitos na replicação ponto a ponto.

@p2p_originator_id [ = ] p2p_originator_id

Especifica uma ID para um nó em uma topologia ponto a ponto. @p2p_originator_id é int, com um padrão de NULL. Esse ID será usado para detecção de conflitos se @p2p_conflictdetection estiver definido como TRUE. Especifique uma ID positiva diferente de zero que não tenha sido usada na topologia. Para obter uma lista de IDs usados, execute sp_help_peerconflictdetection.

@p2p_continue_onconflict [ = ] N'p2p_continue_onconflict'

Determina se o Agente de Distribuição deve continuar processando alterações depois da detecção de um conflito. @p2p_continue_onconflict é nvarchar(5), com um padrão de false.

Cuidado

Recomendamos que você use o valor padrão de false. Quando essa opção é definida como true, o Agente de Distribuição tenta convergir dados na topologia aplicando a linha conflitante do nó que é o ID de origem mais alto. Esse método não garante convergência. Verifique se a topologia está consistente depois que um conflito é detectado. Para obter mais informações, consulte "Manipulando conflitos" em Ponto a ponto - Detecção de conflitos na replicação ponto a ponto.

@allow_partition_switch [ = ] N'allow_partition_switch'

Especifica se ALTER TABLE...SWITCH as instruções podem ser executadas no banco de dados publicado. @allow_partition_switch é nvarchar(5), com um padrão de false. Para obter mais informações, consulte Replicar tabelas e índices particionados.

@replicate_partition_switch [ = ] N'replicate_partition_switch'

Especifica se ALTER TABLE...SWITCH as instruções executadas no banco de dados publicado devem ser replicadas para Assinantes. @replicate_partition_switch é nvarchar(5), com um padrão de NULL. Essa opção será válida somente se @allow_partition_switch estiver definida como TRUE.

@allow_drop [ = ] N'allow_drop'

Identificado apenas para fins informativos. Não há suporte. A compatibilidade futura não está garantida.

@p2p_conflictdetection_policy [ = ] N'p2p_conflictdetection_policy'

Aplica-se a: SQL Server 2019 (15.x) 13 e versões posteriores.

@p2p_conflictdetection_policy é nvarchar(12) e pode ser um destes valores:

Valor Descrição
originatorid (Padrão) O agente de distribuição detecta o conflito e decide o vencedor com base no ID do originador, se p2p_continue_onconflict = N'true'. Caso contrário, ela gerará um erro.
lastwriter O agente de distribuição detecta o conflito e decide o vencedor com base na data/hora do último gravador se p2p_continue_onconflict = N'true'. Caso contrário, ela gerará um erro.

Observação

Quando você especifica originatorid, a detecção de conflitos é a mesma do SQL Server 2019 (15.x) 12 e versões anteriores. Quando você especifica lastwriter, o SQL Server permite que os conflitos sejam resolvidos automaticamente com base na gravação mais recente.

Valores do código de retorno

0 (sucesso) ou 1 (falha).

Comentários

sp_addpublication é usado na replicação de snapshot e replicação transacional.

Se existirem várias publicações que publiquem ALTER TABLEo mesmo objeto de banco de dados, somente as publicações com um valor @replicate_ddl de 1 replica instruções , , ALTER PROCEDUREALTER VIEW, ALTER FUNCTIONe ALTER TRIGGER DDL. No entanto, uma ALTER TABLE DROP COLUMN instrução DDL é replicada por todas as publicações que estão publicando a coluna descartada.

Com a replicação DDL habilitada (@replicate_ddl) para uma publicação, para fazer alterações DDL não replicantes na publicação, sp_changepublication deve primeiro ser executado para definir @replicate_ddl 0 = 1 como . Depois que as instruções DDL não replicantes forem emitidas, sp_changepublication poderão ser executadas novamente para ativar novamente a replicação DDL.

Exemplos

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

Permissões

Somente membros da função de servidor fixa sysadmin ou db_owner função de banco de dados fixa podem executar sp_addpublication. Os logons de autenticação do Windows devem ter uma conta de usuário no banco de dados que representa a conta de usuário do Windows. Uma conta de usuário que represente um grupo do Windows não é suficiente.