Compartilhar via


sp_addsubscription (Transact-SQL)

Adiciona uma assinatura a uma publicação e define o status do Assinante. Esse procedimento armazenado é executado no Publicador, no banco de dados de publicação.

Ícone de vínculo de tópico Convenções da sintaxe Transact-SQL

Sintaxe

sp_addsubscription [ @publication = ] 'publication'
    [ , [ @article = ] 'article']
    [ , [ @subscriber = ] 'subscriber' ]
    [ , [ @destination_db = ] 'destination_db' ]
        [ , [ @sync_type = ] 'sync_type' ]
    [ , [ @status = ] 'status'
        [ , [ @subscription_type = ] 'subscription_type' ]
    [ , [ @update_mode = ] 'update_mode' ]
    [ , [ @loopback_detection = ] 'loopback_detection' ]
    [ , [ @frequency_type = ] frequency_type ]
    [ , [ @frequency_interval = ] frequency_interval ]
    [ , [ @frequency_relative_interval = ] frequency_relative_interval ]
    [ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
    [ , [ @frequency_subday = ] frequency_subday ]
    [ , [ @frequency_subday_interval = ] frequency_subday_interval ]
    [ , [ @active_start_time_of_day = ] active_start_time_of_day ]
    [ , [ @active_end_time_of_day = ] active_end_time_of_day ]
    [ , [ @active_start_date = ] active_start_date ]
    [ , [ @active_end_date = ] active_end_date ]
    [ , [ @optional_command_line = ] 'optional_command_line' ]
    [ , [ @reserved = ] 'reserved' ]
    [ , [ @enabled_for_syncmgr= ] 'enabled_for_syncmgr' ]
    [ , [ @offloadagent= ] remote_agent_activation]
    [ , [ @offloadserver= ] 'remote_agent_server_name' ]
    [ , [ @dts_package_name= ] 'dts_package_name' ]
    [ , [ @dts_package_password= ] 'dts_package_password' ]
    [ , [ @dts_package_location= ] 'dts_package_location' ]
    [ , [ @distribution_job_name= ] 'distribution_job_name' ]
    [ , [ @publisher = ] 'publisher' ]
    [ , [ @backupdevicetype = ] 'backupdevicetype' ]
    [ , [ @backupdevicename = ] 'backupdevicename' ]
    [ , [ @mediapassword = ] 'mediapassword' ]
    [ , [ @password = ] 'password' ]
    [ , [ @fileidhint = ] fileidhint ]
    [ , [ @unload = ] unload ]
    [ , [ @subscriptionlsn = ] subscriptionlsn ]
    [ , [ @subscriptionstreams = ] subscriptionstreams ]
    [ , [ @subscriber_type = ] subscriber_type ]

Argumentos

  • [ @publication=\] 'publication'
    É o nome da publicação. publication é sysname, sem padrão.

  • [ @article=\] 'article'
    É o artigo no qual a publicação é assinada. article é sysname, com um padrão de tudo. Se for all, uma assinatura será adicionada a todos os artigos dessa publicação. Somente valores all ou NULL têm suporte para Publicadores Oracle.

  • [ @subscriber=\] 'subscriber'
    É o nome do Assinante. subscriber é sysname, com um padrão de NULL.

  • [ @destination\_db=\] 'destination_db'
    É o nome do banco de dados de destino no qual os dados replicados são colocados. destination_db é sysname, com um padrão de NULL. Quando é NULL, destination_db é definido como o nome do banco de dados de publicação. Para Publicadores Oracle destination_db deve ser especificado. Para um Assinante não SQL Server, especifique um valor de (destino padrão) para destination_db.

  • [ @sync\_type=\] 'sync_type'
    É o tipo de sincronização da assinatura. sync_type é nvarchar(255), e pode ter um dos valores a seguir:

    Valor

    Descrição

    none

    O Assinante já tem o esquema e os dados iniciais para as tabelas publicadas.

    ObservaçãoObservação

    Essa opção foi preterida. Em vez disso, use suporte para replicação somente.

    automático (padrão)

    Esquema e dados iniciais de tabelas publicadas são transferidos ao Assinante primeiro.

    suporte de replicação só

    Fornece geração automática no Assinante de procedimentos armazenados personalizados de artigo e gatilhos que oferecem suporte a assinaturas de atualização, se apropriado. Presume que o Assinante já tem o esquema e os dados iniciais para as tabelas publicadas. Ao configurar uma topologia de replicação transacional ponto a ponto, verifique se os dados em todos os nós na topologia são idênticos. Para obter mais informações, consulte Replicação transacional ponto a ponto.

    Sem suporte para assinaturas em publicações não SQL Server.

    initialize with backup

    Esquema e dados iniciais para tabelas publicadas são obtidos de um backup do banco de dados de publicação. Presume que o Assinante tem acesso a um backup do banco de dados de publicação. O local do tipo de backup e mídia para o backup é especificado por backupdevicename e backupdevicetype. Ao usar essa opção, uma topologia de replicação transacional ponto a ponto não precisa ser desativada durante a configuração.

    Sem suporte para assinaturas em publicações não SQL Server.

    initialize from lsn

    Usado quando você está adicionando um nó a uma topologia de replicação transacional ponto a ponto. Usado com @subscriptionlsn para garantir que todas as transações relevantes sejam replicadas no novo nó. Presume que o Assinante já tem o esquema e os dados iniciais para as tabelas publicadas. Para obter mais informações, consulte Replicação transacional ponto a ponto.

    ObservaçãoObservação

    Tabelas de sistema e dados sempre são transferidos.

  • [ @status=\] 'status'
    E o status da assinatura. status é sysname, com um valor padrão de NULL. Quando esse parâmetro não é definido explicitamente, a replicação o define automaticamente para um destes valores.

    Valor

    Descrição

    active

    A assinatura é inicializada e está pronta para oferecer suporte a alterações. Essa opção é definida quando o valor de sync_type é nenhum, initialize apenas com backup ou suporte para replicação somente.

    subscribed

    A assinatura precisa ser inicializada. Essa opção é definida quando o valor de sync_type é automático.

  • [ @subscription\_type=\] 'subscription_type'
    É o tipo de assinatura. subscription_type é nvarchar(4), com um padrão push. Pode ser push ou pull. Os Agente de Distribuiçãos de assinaturas push residem no Distribuidor, e os Agente de Distribuiçãos de assinaturas pull residem no Assinante. subscription_type pode ser pull para criar uma assinatura pull que é conhecida pelo Publicador. Para obter mais informações, consulte Assinar publicações.

    ObservaçãoObservação

    Assinaturas anônimas não precisam usar esse procedimento armazenado.

  • [ @update\_mode=\] 'update_mode'
    É o tipo de atualização.update_mode é nvarchar(30) e pode ser um destes valores.

    Valor

    Descrição

    read only (padrão)

    A assinatura é somente leitura. Qualquer alteração no Assinante não será mandada ao Publicador.

    sync tran

    Habilita suporte para assinaturas de atualização imediata. Sem suporte para Publicadores Oracle.

    queued tran

    Habilita a assinatura de atualização enfileirada. As modificações de dados podem ser feitas no Assinante, armazenadas em uma fila e, depois, propagadas ao Publicador. Sem suporte para Publicadores Oracle.

    failover

    Habilita a assinatura para atualização imediata com atualização enfileirada como um failover. Modificações de dados podem ser feitas no Assinante e propagadas ao Publicador imediatamente. Se o Publicador e o Assinante não estiverem conectados, o mo do de atualização pode ser alterado para que as modificações de dados feitas no Assinante sejam armazenadas em uma fila até que o Assinante e o Publicador sejam reconectados. Sem suporte para Publicadores Oracle.

    queued failover

    Habilita a assinatura como uma assinatura de atualização enfileirada com a capacidade de alterar para o modo de atualização imediata. Modificações de dados podem ser feitas no Assinante e armazenadas em uma fila até que a conexão seja estabelecida entre o Assinante e o Publicador. Quando uma conexão contínua é estabelecida, o modo de atualização pode ser alterado para atualização imediata. Sem suporte para Publicadores Oracle.

    Observe que os valores sync tran e queued tran não serão permitidos se a publicação que está sendo assinada permitir DTS.

  • [ @loopback\_detection=\] 'loopback_detection'
    Especifica se o Agente de Distribuição envia transações originadas no Assinante de volta ao Assinante. loopback_detection é nvarchar(5), e pode ter um destes valores.

    Valor

    Descrição

    true

    O Distribution Agent não envia transações originadas no Assinante de volta ao Assinante. Usado com replicação transacional bidirecional. Para obter mais informações, consulte Replicação transacional bidirecional.

    false

    O Distribution Agent envia transações originadas no Assinante de volta ao Assinante.

    NULL (padrão)

    Automaticamente definido como true para um Assinante do SQL Server e false para um não assinante do SQL Server.

  • [ @frequency\_type = ] frequency_type
    É a frequência de agendamento da tarefa de distribuição. frequency_type é int, e pode ter um destes valores.

    Valor

    Descrição

    1

    Uma vez

    2

    Sob demanda

    4

    Diariamente

    8

    Semanalmente

    16

    Mensalmente

    32

    Relativo ao mês

    64 (padrão)

    Iniciar automaticamente

    128

    Recorrente

  • [ @frequency\_interval=\] frequency_interval
    É o valor a ser aplicado à frequência definida por frequency_type. frequency_interval é int, com um padrão de NULL.

  • [ @frequency\_relative\_interval=\] frequency_relative_interval
    É a data do Distribution Agent. Esse parâmetro é usado quando frequency_type está definido como 32 (mensal relativo). frequency_relative_interval é int, e pode ter um destes valores.

    Valor

    Descrição

    1

    First

    2

    Segundo

    4

    Terceiro

    8

    Quarto

    16

    Último

    NULL (padrão)

     

  • [ @frequency\_recurrence\_factor=\] frequency_recurrence_factor
    É o fator de recorrência usado por frequency_type. frequency_recurrence_factor é int, com um padrão de NULL.

  • [ @frequency\_subday=\] frequency_subday
    É a frequência, em minutos, de reagendamento durante o período definido. frequency_subday é int, e pode ter um destes valores.

    Valor

    Descrição

    1

    Uma vez

    2

    Segundo

    4

    Minuto

    8

    Hora

    NULL

     

  • [ @frequency\_subday\_interval=\] frequency_subday_interval
    É o intervalo de frequency_subday. frequency_subday_interval é int, com um padrão de NULL.

  • [ @active\_start\_time\_of\_day=\] active_start_time_of_day
    É a hora do dia do primeiro agendamento do Agente de Distribuição, formatada como HHMMSS. active_start_time_of_day é int, com um padrão de NULL.

  • [ @active\_end\_time\_of\_day = ] active_end_time_of_day
    É a hora do dia do último agendamento do Agente de Distribuição, formatada como HHMMSS. active_end_time_of_day é int, com um padrão de NULL.

  • [ @active\_start\_date=\] active_start_date
    É a data do primeiro agendamento do Agente de Distribuição, formatada como AAAAMMDD. active_start_date é int, com um padrão de NULL.

  • [ @active\_end\_date=\] active_end_date
    É a data do último agendamento do Agente de Distribuição, formatada como AAAAMMDD. active_end_date é int, com um padrão de NULL.

  • [ @optional\_command\_line=\] 'optional_command_line'
    É o prompt de comando opcional a ser executado. optional_command_line é nvarchar(4000), com um padrão de NULL.

  • [ @reserved=\] 'reserved'
    Identificado apenas para fins informativos. Sem suporte. A compatibilidade futura não está garantida.

  • [ @enabled\_for\_syncmgr=\] 'enabled_for_syncmgr'
    Se a assinatura puder ser sincronizada pelo Gerenciador de Sincronização do Microsoft Windows. enabled_for_syncmgr é nvarchar(5), com um padrão FALSE. Se for false, a assinatura não será registrada com o Gerenciador de Sincronização do Windows. Se for true, a assinatura será registrada com o Gerenciador de Sincronização do Windows e será sincronizada sem iniciar o SQL Server Management Studio. Sem suporte para Publicadores Oracle.

  • [ @offloadagent= ] 'remote_agent_activation'
    Especifica que o agente pode ser ativado remotamente. remote_agent_activation é bit com um padrão de 0.

    ObservaçãoObservação

    Esse parâmetro foi preterido e só é mantido para compatibilidade com versões anteriores.

  • [ @offloadserver= ] 'remote_agent_server_name'
    Especifica o nome da rede de servidor a ser usada para ativação remota. remote_agent_server_name é sysname, com um padrão de NULL.

  • [ @dts\_package\_name= ] 'dts_package_name'
    Especifica o nome do pacote DTS (Data Transformation Services). dts_package_name é um sysname, com um padrão de NULL. Por exemplo, para especificar um nome de pacote DTSPub_Package, o parâmetro seria @dts\_package\_name = N'DTSPub_Package'. Esse parâmetro está disponível para assinaturas push. Para adicionar informações de pacote DTS a uma assinatura pull, use sp_addpullsubscription_agent.

  • [ @dts\_package\_password= ] 'dts_package_password'
    Especifica a senha no pacote, se houver um. dts_package_password é sysname, com um padrão de NULL.

    ObservaçãoObservação

    Você deve especificar uma senha se dts_package_name for especificado.

  • [ @dts\_package\_location= ] 'dts_package_location'
    Especifica o local do pacote. dts_package_location é um nvarchar(12), com um padrão de DISTRIBUTOR. O local do pacote pode ser distribuidor ou assinante.

  • [ @distribution\_job\_name= ] 'distribution_job_name'
    Identificado apenas para fins informativos. Sem suporte. A compatibilidade futura não está garantida.

  • [ @publisher= ] 'publisher'
    Especifica um Publicador que não é Microsoft SQL Server. publisher é sysname, com um padrão de NULL.

    ObservaçãoObservação

    publisher não deve ser especificado para um Editor SQL Server.

  • [ @backupdevicetype= ] 'backupdevicetype'
    Especifica o tipo do dispositivo de backup a ser usado ao inicializar um Assinante de um backup. backupdevicetype é nvarchar(20), e pode ter um destes valores:

    Valor

    Descrição

    lógico (padrão)

    O dispositivo de backup é um dispositivo lógico.

    disk

    O dispositivo de backup é uma unidade de disco.

    tape

    O dispositivo de backup é uma unidade de fita.

    backupdevicetype é usado apenas quando sync_methodé definido para initialize_with_backup.

  • [ @backupdevicename= ] 'backupdevicename'
    Especifica o nome do dispositivo usado ao inicializar um Assinante em um backup. backupdevicename é nvarchar(1000), com um padrão de NULL.

  • [ @mediapassword= ] 'mediapassword'
    Especifica uma senha para o conjunto de mídias se uma senha já tiver sido definida quando a mídia foi formatada. mediapassword é sysname, com um valor padrão de NULL.

    ObservaçãoObservação

    Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

  • [ @password= ] 'password'
    Especifica uma senha para o backup se uma senha já tiver sido definida quando o backup foi criado. passwordé sysname, com um padrão de NULL.

  • [ @fileidhint= ] fileidhint
    Identifica um valor ordinal do conjunto de backup a ser restaurado. fileidhint é int, com um valor padrão de NULL.

  • [ @unload= ] unload
    Especifica se um dispositivo de backup em fita deve ser descarregado quando a inicialização do backup for concluída. unload é bit, com um valor padrão de 1. 1 especifica que a fita deve ser descarregada. unload é usado apenas quando backupdevicetype for fita.

  • [ @subscriptionlsn= ] subscriptionlsn
    Especifica o LSN (número de sequência de log) no qual uma assinatura deve começar a entrega de alterações para um nó, em uma topologia de replicação transacional ponto a ponto. Usado com um valor @sync\_type de nitialize from lsn para garantir que todas as transações relevantes sejam replicadas no novo nó. Para obter mais informações, consulte Replicação transacional ponto a ponto.

  • [ @subscriptionstreams= ] subscriptionstreams
    É o número de conexões permitido por Agente de Distribuição para aplicar lotes de alterações em paralelo a um Assinante, mantendo muitas das características transacionais presentes ao usar um thread único. subscriptionstreams é tinyint, com um valor padrão de NULL. Há suporte para um intervalo de valores de 1 a 64. Esse parâmetro não tem suporte para Assinantes, Publicadores Oracle ou assinaturas ponto a ponto que não sejam SQL Server. Sempre que fluxos de assinatura são usados, linhas adicionais são acrescentadas à tabela msreplication_subscriptions (1 por fluxo) com um agent_id definido como NULL.

    ObservaçãoObservação

    Fluxos de assinatura não funcionam em artigos configurados para entrega Transact-SQL. Para usar fluxos de assinatura, configure os artigos para entregar chamadas de procedimento armazenado.

  • [ @subscriber\_type=\] subscriber_type
    É o tipo de Assinante. subscriber_type é tinyint e pode ter um destes valores.

    Valor

    Descrição

    0 (padrão)

    Assinante SQL Server

    1

    Servidor de fontes de dados ODBC

    2

    Banco de dados Microsoft Jet

    3

    Provedor OLE DB

Valores de código de retorno

0 (êxito) ou 1 (falha)

Comentários

sp_addsubscription é usado em replicação de instantâneo e replicação transacional.

Quando sp_addsubscription é executado por um membro da função de servidor fixa sysadmin para criar uma assinatura push, o trabalho do Distribution Agent é implicitamente criado e executado na conta de serviço do SQL Server Agent. É recomendável executar sp_addpushsubscription_agent e especificar as credenciais de uma conta do Windows diferente, específica de agente para @job\_login e @job\_password. Para obter mais informações, consulte Modelo de segurança do agente de replicação.

sp_addsubscription impede que Assinantes ODBC e OLE DB acessem publicações que:

  • Foram criadas com o sync_method nativo na chamada para sp_addpublication.

  • Contêm artigos que foram adicionados à publicação com o procedimento armazenado sp_addarticle que tinha um valor de parâmetro pre_creation_cmd de 3 (truncado).

  • Tentam definir update_mode como sync tran.

  • Têm um artigo configurado para usar instruções com parâmetros.

Além disso, se uma publicação tiver a opção allow_queued_tran definida como verdadeira (o que permite enfileiramento de alterações no Assinante até que possam ser aplicadas no Publicador), será feito um script da coluna de carimbo de hora em um artigo como timestamp, e as alterações naquela coluna serão enviadas ao Assinante. O Assinante gera e atualiza o valor da coluna de carimbo de hora. Para um Assinante ODBC ou OLE DB, sp_addsubscription falhará se uma tentativa for feita para assinar uma publicação que tem allow_queued_tran definido como true e contém artigos com colunas de carimbo de data e hora.

Se uma assinatura não usar um pacote DTS, ela não poderá assinar uma publicação definida como allow_transformable_subscriptions. Se a tabela da publicação precisar ser replicada para uma assinatura DTS e uma assinatura não DTS, deverão ser criadas duas publicações separadas, uma para cada tipo de assinatura.

Ao selecionar as opções de sync_type, replication support only, initialize with backup, ou initialize from lsn, o Agente de Leitor de Log deve ser executado após a execução de sp_addsubscription, para que os scripts configurados sejam gravados no banco de dados de distribuição. O Agente de Leitor de Log deve ser executado sob uma conta que seja membro da função de servidor fixa sysadmin. Quando a opção sync_type estiver definida como Automatic, nenhuma ação especial do Agente de Leitor de Log será necessária.

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_addsubscription. Para assinaturas pull, os usuários com logons na lista de acesso à publicação podem executar sp_addsubscription.

Exemplo

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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 @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2012Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2012]
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

Consulte também

Referência

sp_addpushsubscription_agent (Transact-SQL)

sp_changesubstatus (Transact-SQL)

sp_dropsubscription (Transact-SQL)

sp_helpsubscription (Transact-SQL)

Procedimentos armazenados do sistema (Transact-SQL)

Conceitos

Criar uma assinatura push

Criar uma assinatura para um Assinante não SQL Server

Assinar publicações