Partilhar 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ópicoConvenções de 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 está assinada. article é sysname, com um padrão de todos. Se for todos, uma assinatura será adicionada a todos os artigos naquela publicação. Somente valores de todos ou NULL têm suporte para Publicadores Oracle.

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

  • [ @destination_db=\] 'destination_db'
    É o nome do banco de dados de destino onde colocar os dados replicados. destination_db é sysname, com um padrão 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 de assinatura. sync_type é nvarchar(255) e pode ser um dos valores seguintes:

    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. Use, em vez disso, suporte a replicação.

    automatic (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 Como configurar a replicação transacional ponto a ponto (Programação Transact-SQL de replicação).

    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 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 assegurar que todas as transações relevantes sejam replicadas para o novo nó. Presume que o Assinante já tem o esquema e os dados iniciais para as tabelas publicadas. Para obter mais informações, consulte Como configurar a replicação transacional ponto a ponto (Programação Transact-SQL de replicação).

    ObservaçãoObservação

    Tabelas do sistema e dados sempre são transferidos.

  • [ @status=\] 'status'
    É o status da assinatura. status é sysname, com um valor padrão 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 é none, initialize apenas com backup ou suporte de replicação.

    subscribed

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

  • [ @subscription_type=\] 'subscription_type'
    É o tipo de assinatura. subscription_type é nvarchar(4), com um padrão push. Pode ser push ou pull. Os Distribution Agents de assinaturas push residem no Distribuidor e os Distribution Agents de assinaturas pull residem no Assinante. subscription_type pode ser pull para criar uma assinatura pull nomeada conhecida do Publicador. Para obter mais informações, consulte Assinando 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 que o Distribution Agent envia transações originadas no Assinante de volta para o Assinante. loopback_detection é nvarchar(5), e pode ser 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 de transação bidirecional.

    false

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

    NULL (padrão)

    Automaticamente definido como verdadeiro para um Assinante SQL Server e falso para um assinante não-SQL Server.

  • [ @frequency_type=\] frequency_type
    É a freqüência de agendamento da tarefa de distribuição. frequency_type é int, e pode ser 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)

    Autoiniciar

    128

    Recorrente

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

  • [ @frequency_relative_interval=\] frequency_relative_interval
    É a data do Distribution Agent. É o parâmetro usado quando frequency_type é definido como 32 (relativo ao mês). frequency_relative_interval é int, e pode ser um destes valores.

    Valor

    Descrição

    1

    Primeiro

    2

    Segundo

    4

    Terceiro

    8

    Quarto

    16

    Último

    NULL (padrão)

     

  • [ @frequency_recurrence_factor=\] frequency_recurrence_factor
    É o fator de recorrência usado pelo frequency_type. frequency_recurrence_factor is int, com um padrão NULL.

  • [ @frequency_subday=\] frequency_subday
    É a freqüência, em minutos, de reagendamento durante o período definido. frequency_subday é inte pode ser 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 NULL.

  • [ @active_start_time_of_day=\] active_start_time_of_day
    É a hora do dia do primeiro agendamento do Distribution Agent, formatada como HHMMSS. active_start_time_of_day é int, com um padrão NULL.

  • [ @active_end_time_of_day=\] active_end_time_of_day
    É a hora do dia em que o Distribution Agent deixa de ser agendado, formatada como HHMMSS. active_end_time_of_day é int, com um padrão NULL.

  • [ @active_start_date=\] active_start_date
    É a data do primeiro agendamento do Distribution Agent, formatada como YYYYMMDD. active_start_date é int, com um padrão NULL.

  • [ @active_end_date=\] active_end_date
    É a data em que o Distribution Agent deixa de ser agendado, formatada como YYYYMMDD. active_end_date é int, com um padrão NULL.

  • [ @optional_command_line=\] 'optional_command_line'
    É o prompt de comando opcional a ser executado. optional_command_line é nvarchar(4000), com um padrão 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 falso, a assinatura não será registrada com o Gerenciador de Sincronização do Windows. Se for verdadeiro, 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 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 de rede do servidor a ser usado para uma ativação remota. remote_agent_server_nameé sysname, com um padrão 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 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. dts_package_password é sysname com um padrão 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 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 não-Microsoft SQL Server. publisher é sysname, com um padrão NULL.

    ObservaçãoObservação

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

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

    Valor

    Descrição

    logical (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 é só usado quando sync_method é definido para initialize_with_backup.

  • [ @backupdevicename= ] 'backupdevicename'
    Especifica o nome do dispositivo usado ao inicializar um Assinante de um backup. backupdevicename é nvarchar(1000), com um padrão 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 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 NULL.

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

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

  • [@ subscriptionlsn =] subscriptionlsn
    Especifica o LSN (número de seqüê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 inicialização do lsn para assegurar que todas as transações relevantes sejam replicadas para o novo nó. Para obter mais informações, consulte Como configurar a replicação transacional ponto a ponto (Programação Transact-SQL de replicação).

  • [ @subscriptionstreams = ] subscriptionstreams
    É o número de conexões permitido por Distribution Agent 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 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 não-SQL Server.

  • [ @subscriber_type=\] subscriber_type
    É o tipo de Assinante. subscriber_type é tinyint, e pode ser 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. Recomendamos que você execute sp_addpushsubscription_agent e especifique 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 verdadeiro 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.

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'AdventureWorks2008R2Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2008R2]
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

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.