sp_addpublication (Transact-SQL)
Aplica-se a: SQL Server Instâ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
Com suporte apenas para compatibilidade com versões anteriores; use sp_addpublication_snapshot.
@restricted [ = ] N'restrito'
Com suporte apenas para compatibilidade com versões anteriores; use default_access
.
@sync_method [ = ] N'sync_method'
O modo de sincronização. @sync_method é nvarchar(40) e pode ser um dos seguintes valores.
Valor | Descrição |
---|---|
native 1 |
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. Observação: Para um Publicador Oracle, character é válido apenas para replicação de snapshot. |
concurrent 1 |
Produz a saída do programa de cópia em massa de modo nativo de todas as tabelas, mas não bloqueia tabelas durante o instantâneo. 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 é native para Publicadores do SQL Server. Para Publicadores que não são do SQL Server, o character padrão é quando o valor de @repl_freq é Snapshot e concurrent_c para todos os outros casos. |
1 Não suportado para Publicadores 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 do leitor de log é executado continuamente. Para Publicadores não-SQL Server, isso requer que @sync_method seja definido como concurrent_c . |
snapshot |
O agente do leitor de log é executado em um agendamento. Para Publicadores não-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 Assinantes quando a publicação é criada pela primeira vez (eles podem assinar, mas as assinaturas não são processadas). |
Não há suporte para Publicadores 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
, há um Agente de Distribuição independente para esta publicação. - Se
false
, a publicação usa um Distribution Agent compartilhado e cada par de banco de dados do Publicador/banco de dados do Assinante tem 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 ser true
. Se false
, os arquivos de sincronização serão criados somente se houver novas assinaturas. Você deve chamar sp_addsubscription para cada assinatura ao adicionar incrementalmente um novo artigo a uma publicação existente. Os assinantes não podem 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 da publicação serã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 são 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 há suporte 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 |
Definir automaticamente quando a atualização de assinaturas não estiver habilitada ou para Publicadores Oracle. |
NULL (padrão) |
O padrão é true quando a atualização de assinaturas está habilitada e quando a false 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 serão enfileiradas. true
não há suporte 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 foram armazenados no local alternativo especificado pelo @alt_snapshot_folder.
Locais alternativos podem estar em outro servidor, em uma unidade de rede ou em mídia removível (como discos removíveis). 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 verdadeiro 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 do @alt_snapshot_folder deve ser compactado no formato CAB da Microsoft. @compress_snapshot é nvarchar(5), com um padrão de false
.
false
Especifica que o snapshot não está compactado.true
Especifica que o snapshot é 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 o Merge Agent do assinante selecionar 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 do 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 character
concurrent_c
.
true
não há suporte 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 Publicadores 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 são armazenados no Publicador. - Se
false
, os registros de conflito são armazenados no publicador e no assinante que causou o conflito.
Não há suporte para Publicadores 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 Publicadores 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 o uso do serviço de enfileiramento de mensagens da Microsoft foi descontinuado. Especificar um valor de msmq
resultará em um aviso, e a replicação definirá automaticamente o valor como sql
.
Não há suporte para Publicadores 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 uma tarefa existente em vez de uma nova que está sendo criada.
@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 Publicador do SQL Server.
@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 é true para uma publicação em uma topologia de replicação ponto a 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 , sempre use @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 são 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.
Não há suporte para replicação de esquema para Publicadores 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,
sysarticlecolumns
deve ser atualizada para impedir que novas instruções DML incluam a coluna descartada, o que faria com que o agente de distribuição falhasse. 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 nulidade 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 dá suporte à replicação ponto a ponto. Ao definir @enabled_for_p2p como true
, aplicam-se as seguintes restrições:
- @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 não-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 não SQL Server. Quando @enabled_for_het_sub é true
, as seguintes restrições se aplicam:
- @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
ouconcurrent
.
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
. Essa ID será usada para detecção de conflitos se @p2p_conflictdetection estiver definida como TRUE. Especifique uma ID positiva diferente de zero que não tenha sido usada na topologia. Para obter uma lista de IDs usadas, 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 Distribution Agent tenta convergir dados na topologia aplicando a linha conflitante do nó que é a ID de originador mais alta. Esse método não garante a 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 só será válida 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 e 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 , 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 instantâneo e na replicação transacional.
Se existirem várias publicações que publicam o mesmo objeto de banco de dados, somente as publicações com um valor @replicate_ddl de 1
replicarão ALTER TABLE
instruções , ALTER VIEW
, ALTER PROCEDURE
, ALTER FUNCTION
e 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 = 1
) para uma publicação, para fazer alterações DDL não replicantes na publicação, sp_changepublication deve primeiro ser executada para definir @replicate_ddl como .0
Depois que as instruções DDL não replicantes forem emitidas, sp_changepublication poderão ser executadas novamente para ativar a replicação DDL novamente.
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 representa um grupo do Windows não é suficiente.
Conteúdo relacionado
- sp_addlogreader_agent (Transact-SQL)
- sp_addpublication_snapshot (Transact-SQL)
- sp_changepublication (Transact-SQL)
- sp_droppublication (Transact-SQL)
- sp_helppublication (Transact-SQL)
- sp_replicationdboption (Transact-SQL)
- Publicar dados e objetos de banco de dados
- Procedimentos armazenados de replicação (Transact-SQL)