Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Adiciona uma subscrição a uma publicação e define o estatuto de Assinante. Este procedimento armazenado é executado no Publisher no banco de dados de publicação.
Transact-SQL convenções de sintaxe
Sintaxe
sp_addsubscription
[ @publication = ] N'publication'
[ , [ @article = ] N'article' ]
[ , [ @subscriber = ] N'subscriber' ]
[ , [ @destination_db = ] N'destination_db' ]
[ , [ @sync_type = ] N'sync_type' ]
[ , [ @status = ] N'status' ]
[ , [ @subscription_type = ] N'subscription_type' ]
[ , [ @update_mode = ] N'update_mode' ]
[ , [ @loopback_detection = ] N'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 = ] N'optional_command_line' ]
[ , [ @reserved = ] N'reserved' ]
[ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
[ , [ @offloadagent = ] offloadagent ]
[ , [ @offloadserver = ] N'offloadserver' ]
[ , [ @dts_package_name = ] N'dts_package_name' ]
[ , [ @dts_package_password = ] N'dts_package_password' ]
[ , [ @dts_package_location = ] N'dts_package_location' ]
[ , [ @distribution_job_name = ] N'distribution_job_name' ]
[ , [ @publisher = ] N'publisher' ]
[ , [ @backupdevicetype = ] N'backupdevicetype' ]
[ , [ @backupdevicename = ] N'backupdevicename' ]
[ , [ @mediapassword = ] N'mediapassword' ]
[ , [ @password = ] N'password' ]
[ , [ @fileidhint = ] fileidhint ]
[ , [ @unload = ] unload ]
[ , [ @subscriptionlsn = ] subscriptionlsn ]
[ , [ @subscriptionstreams = ] subscriptionstreams ]
[ , [ @subscriber_type = ] subscriber_type ]
[ , [ @memory_optimized = ] memory_optimized ]
[ ; ]
Arguments
[ @publication = ] N'publicação'
O nome da publicação. @publication é sysname, sem padrão.
[ @article = ] N'artigo'
O artigo ao qual a publicação está subscrita.
@article é sysname, com um padrão de all. Se all, uma subscrição é adicionada a todos os artigos dessa publicação. Apenas valores de all ou NULL são suportados para editoras Oracle.
[ @subscriber = ] N'assinante'
O nome do Assinante.
@subscriber é sysname, com um padrão de NULL.
Observação
O nome do servidor pode ser especificado como <Hostname>,<PortNumber> para uma instância padrão ou <Hostname>\<InstanceName>,<PortNumber> para uma instância nomeada. Especifique o número da porta para sua conexão quando o SQL Server for implantado no Linux ou no Windows com uma porta personalizada e o serviço do navegador estiver desabilitado. O uso de números de porta personalizados para distribuidor remoto se aplica ao SQL Server 2019 (15.x) e versões posteriores.
[ @destination_db = ] N'destination_db'
O nome da base de dados de destino onde colocar os dados replicados.
@destination_db é sysname, com um padrão de NULL. Quando NULL, @destination_db é definido para o nome da base de dados da publicação. Para a Oracle Publishers, @destination_db deve ser especificado. Para um assinante de servidor que não seja SQL, especifique um valor de (destino padrão) para @destination_db.
[ @sync_type = ] N'sync_type'
O tipo de sincronização de subscrição. @sync_type é nvarchar(255), e pode ter um dos seguintes valores:
| Valor | Description |
|---|---|
none
1 |
O subscritor já tem o esquema e os dados iniciais para as tabelas publicadas. |
automatic (padrão) |
O esquema e os dados iniciais das tabelas publicadas são transferidos primeiro para o Assinante. |
replication support only
2 |
Proporciona geração automática no assinante de procedimentos armazenados personalizados do artigo e disparadores que suportam a atualização de subscrições, se apropriado. Assume que o assinante já tem o esquema e os dados iniciais das tabelas publicadas. Ao configurar uma topologia de replicação transacional peer-to-peer, certifique-se de que os dados em todos os nós da topologia são idênticos. Para mais informações, consulte Peer-to-Peer - Replicação Transacional. |
initialize with backup
2 |
Os esquemas e os dados iniciais das tabelas publicadas são obtidos a partir de uma cópia de segurança da base de dados da publicação. Pressupõe que o Assinante tem acesso a uma cópia de segurança da base de dados da publicação. A localização da cópia de segurança e do tipo de suporte para a cópia de segurança é especificada por @backupdevicename e @backupdevicetype. Ao utilizar esta opção, uma topologia de replicação transacional peer-to-peer não precisa de ser desativada durante a configuração. |
initialize from lsn |
Usado quando se adiciona um nó a uma topologia de replicação transacional peer-to-peer. Usado com @subscriptionlsn para garantir que todas as transações relevantes são replicadas para o novo nó. Assume que o assinante já tem o esquema e os dados iniciais das tabelas publicadas. Para mais informações, consulte Peer-to-Peer - Replicação Transacional. |
1 Esta opção foi descontinuada. Use apenas suporte à replicação.
2 Não é suportado para subscrições de publicações não SQL Server.
Observação
As tabelas e dados do sistema são sempre transferidos.
[ @status = ] N'estado'
O estado da subscrição.
@status é sysname, com um padrão de NULL. Quando este parâmetro não está explicitamente definido, a replicação define automaticamente para um desses valores.
| Valor | Description |
|---|---|
active |
A subscrição está iniciada e pronta para aceitar alterações. Esta opção é definida quando o valor de @sync_type é nenhum, inicializar apenas com backup ou suporte à replicação. |
subscribed |
A subscrição precisa de ser inicializada. Esta opção é definida quando o valor de @sync_type é automático. |
[ @subscription_type = ] N'subscription_type'
O tipo de subscrição.
@subscription_type é nvarchar(4), com um padrão de push. Pode ser push ou pull. Os Agentes de Distribuição das subscrições push residem no Distribuidor, e os Agentes de Distribuição das subscrições pull residem no Assinante.
@subscription_type pode ser pull criar uma subscrição de pull nomeada que seja conhecida pelo Editor. Para mais informações, consulte Subscrever Publicações.
Observação
As subscrições anónimas não precisam de usar este procedimento armazenado.
[ @update_mode = ] N'update_mode'
O tipo de atualização. @update_mode é nvarchar(30), e pode ser um desses valores.
| Valor | Description |
|---|---|
read only (padrão) |
A assinatura é somente leitura. As alterações no Assinante não são enviadas ao Editor. |
sync tran |
Permite o suporte para atualização imediata de subscrições. Não é suportado para a Oracle Publishers. |
queued tran |
Permite a subscrição para atualizações em fila. As modificações de dados podem ser feitas no Assinante, armazenadas numa fila e depois propagadas ao Editor. Não é suportado para a Oracle Publishers. |
failover |
Permite a subscrição para atualização imediata com atualização em fila como failover. As modificações dos dados podem ser feitas no Assinante e propagadas imediatamente para o Editor. Se o Editor e o Assinante não estiverem ligados, o modo de atualização pode ser alterado para que as modificações de dados feitas no Assinante fiquem armazenadas numa fila até que o Assinante e o Editor sejam religados. Não é suportado para a Oracle Publishers. |
queued failover |
Permite a subscrição como uma subscrição de atualização em fila, com a possibilidade de mudar para o modo de atualização imediata. As modificações de dados podem ser feitas no Assinante e armazenadas numa fila até que seja estabelecida uma ligação entre o Assinante e o Publicador. Quando uma ligação contínua é estabelecida, o modo de atualização pode ser alterado para atualização imediata. Não é suportado para a Oracle Publishers. |
Os valores sync tran e queued tran não são permitidos se a publicação subscrita permitir DTS.
[ @loopback_detection = ] N'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 ser um desses valores.
| Valor | Description |
|---|---|
true |
O Agente de Distribuição não envia transações originadas pelo Assinante de volta para o Assinante. Usado com replicação transacional bidirecional. Para mais informações, veja Replicação Transacional Bidirecional. |
false |
O Agente de Distribuição envia as transações que tiveram origem no Assinante de volta ao Assinante. |
NULL (padrão) |
Definido automaticamente como verdadeiro para um assinante do SQL Server e falso para um que não seja assinante do SQL Server. |
[ @frequency_type = ] frequency_type
A frequência com que agendar a tarefa de distribuição. @frequency_type é int, e pode ser um desses valores.
| Valor | Description |
|---|---|
1 |
Uma vez |
2 |
A pedido |
4 |
Diariamente |
8 |
Weekly |
16 |
Monthly |
32 |
Parente mensal |
64 (padrão) |
Arranque automático |
128 |
Recorrente |
[ @frequency_interval = ] frequency_interval
O valor a aplicar à frequência definida por @frequency_type.
@frequency_interval é int, com um padrão de NULL.
[ @frequency_relative_interval = ] frequency_relative_interval
A data do Agente de Distribuição. Este parâmetro é usado quando @frequency_type está definido como 32 (relativo mensal).
@frequency_relative_interval é int, e pode ser um desses valores.
| Valor | Description |
|---|---|
1 |
First |
2 |
Second |
4 |
Terceiro |
8 |
Quarto |
16 |
Último |
NULL (padrão) |
[ @frequency_recurrence_factor = ] frequency_recurrence_factor
O fator de recorrência utilizado por @frequency_type.
@frequency_recurrence_factor é int, com um padrão de NULL.
[ @frequency_subday = ] frequency_subday
Quantas vezes, em minutos, reagendar durante o período definido. @frequency_subday é int, e pode ser um desses valores.
| Valor | Description |
|---|---|
1 |
Uma vez |
2 |
Second |
4 |
Minute |
8 |
Hora |
NULL |
[ @frequency_subday_interval = ] frequency_subday_interval
O intervalo para @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 em que o Agente de Distribuição é agendado pela primeira vez, formatado 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 em que o Agente de Distribuição deixa de ser agendado, formatada como HHmmss.
@active_end_time_of_day é int, com um padrão de NULL.
[ @active_start_date = ] active_start_date
A data em que o Agente de Distribuição é agendado pela primeira vez, formatada como yyyyMMdd.
@active_start_date é int, com um padrão de NULL.
[ @active_end_date = ] active_end_date
A data em que o Agente de Distribuição deixa de ser agendado, formatada como yyyyMMdd.
@active_end_date é int, com um padrão de NULL.
[ @optional_command_line = ] N'optional_command_line'
O símbolo opcional para executar.
@optional_command_line é nvarchar(4000), com um padrão de NULL.
[ @reserved = ] N'reservado'
Identificado apenas para fins informativos. Não suportado. A compatibilidade futura não é garantida.
[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'
Se a subscrição pode ser sincronizada através do Gestor de Sincronização do Windows.
@enabled_for_syncmgr é nvarchar(5), com um padrão de NULL, que é o mesmo que false. Se false, a subscrição não está registada no Gestor de Sincronização do Windows. Se true, a subscrição está registada no Windows Synchronization Manager e pode ser sincronizada sem iniciar o SQL Server Management Studio. Não é suportado para a Oracle Publishers.
[ @offloadagent = ] agente de descarga
Especifica que o agente pode ser ativado remotamente.
@offloadagent é bit, com um padrão de 0.
Observação
Este parâmetro foi descontinuado e é mantido apenas para compatibilidade retroativa de scripts.
[ @offloadserver = ] N'offloadserver'
Especifica o nome da rede do servidor a ser usado para ativação remota.
@offloadserver é sysname, com um padrão de NULL.
[ @dts_package_name = ] N'dts_package_name'
Especifica o nome do pacote Data Transformation Services (DTS).
@dts_package_name é sysname, com um padrão de NULL. Por exemplo, para especificar um pacote de DTSPub_Package, o parâmetro seria @dts_package_name = N'DTSPub_Package'. Este parâmetro está disponível para subscrições push. Para adicionar informação de pacote DTS a uma subscrição pull, use sp_addpullsubscription_agent.
[ @dts_package_password = ] N'dts_package_password'
Especifica a palavra-passe do pacote, se houver.
@dts_package_password é sysname, com um padrão de NULL.
Observação
Deve especificar uma palavra-passe se @dts_package_name for especificada.
[ @dts_package_location = ] N'dts_package_location'
Especifica a localização da encomenda.
@dts_package_location é nvarchar(12), com um padrão de NULL, que é o mesmo que distributor. A localização do pacote pode ser distributor ou subscriber.
[ @distribution_job_name = ] N'distribution_job_name'
Identificado apenas para fins informativos. Não suportado. A compatibilidade futura não é garantida.
@publisher [ = ] N'editor'
Especifica um Editor de Server que não seja SQL.
@publisher é sysname, com um padrão de NULL.
Observação
@publisher não deve ser especificado para um editor SQL Server.
[ @backupdevicetype = ] N'tipo de dispositivo de backup'
Especifica o tipo de dispositivo de backup utilizado ao inicializar um Assinante a partir de um backup. @backupdevicetype é nvarchar(20), e pode ser um destes valores:
| Valor | Description |
|---|---|
logical (padrão) |
O dispositivo de backup é um dispositivo lógico |
disk |
O dispositivo de backup é o disco rígido |
tape |
O dispositivo de backup é uma unidade de fita |
url |
O dispositivo de backup é uma URL |
@backupdevicetype só é usado quando @sync_method está definido para initialize_with_backup.
[ @backupdevicename = ] N'nome do dispositivo de backup'
Especifica o nome do dispositivo usado ao inicializar um Assinante a partir de um backup.
@backupdevicename é nvarchar(1000), com um padrão de NULL.
[ @mediapassword = ] N'mediapassword
Especifica uma palavra-passe para o conjunto de media se uma palavra-passe foi definida quando o media foi formatado.
@mediapassword é sysname, com o padrão de NULL.
Observação
Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso.
@password [ = ] N'senha'
Especifica uma palavra-passe para o backup se uma palavra-passe foi 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 restaurar.
@fileidhint é int, com um padrão de NULL.
[ @unload = ] descarregar
Especifica se um dispositivo de backup de fita deve ser descarregado após a inicialização a partir de trás estar concluída.
@unload é bit, com um padrão de 1, que especifica que a fita deve ser descarregada.
@unload só é usado quando @backupdevicetype é tape.
[ @subscriptionlsn = ] subscrições
Especifica o número de sequência de log (LSN) em que uma subscrição deve começar a fornecer alterações a um nó numa topologia de replicação transacional peer-to-peer.
@subscriptionlsn é binário(10), com um padrão de NULL. Usado com um valor @sync_type de initialize from lsn para garantir que todas as transações relevantes são replicadas para um novo nó. Para mais informações, consulte Peer-to-Peer - Replicação Transacional.
[ @subscriptionstreams = ] streams por subscrição
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 único thread.
@subscriptionstreams é minyint, com um padrão de NULL. É suportado um intervalo de valores de 1 a 64 . Este parâmetro não é suportado para subscritores que não sejam SQL Server, editores Oracle ou subscrições peer-to-peer. Sempre que @subscriptionstreams é usado, são adicionadas linhas adicionais na msreplication_subscriptions tabela (uma linha por fluxo) com um agent_id conjunto para NULL.
Observação
Os fluxos de assinatura não funcionam para artigos configurados para fornecer Transact-SQL. Para usar fluxos de assinatura, configure artigos para entregar chamadas de procedimento armazenado.
[ @subscriber_type = ] subscriber_type
O tipo de assinante. @subscriber_type é minúsculo e pode ser um desses valores.
| Valor | Description |
|---|---|
0 (padrão) |
SQL Server Subscriber |
1 |
Servidor fonte de dados ODBC |
2 |
Base de dados Microsoft Jet |
3 |
fornecedor de OLE DB |
[ @memory_optimized = ] memory_optimized
Indica que a subscrição suporta tabelas otimizadas para memória.
@memory_optimized é bit, com um padrão de 0 (falso).
1 (verdadeiro) significa que a subscrição suporta tabelas otimizadas para memória.
Valores de código de retorno
0 (sucesso) ou 1 (fracasso).
Observações
sp_addsubscription é usado na replicação instantânea e na replicação transacional.
Quando sp_addsubscription é executado por um membro do papel fixo de servidor sysadmin para criar uma subscrição push, o trabalho do Agente de Distribuição é implicitamente criado e executado sob a conta do serviço SQL Server Agent. Recomendamos que execute sp_addpushsubscription_agent e especifique as credenciais de uma conta Windows diferente, específica de um agente, para @job_login e @job_password. Para obter mais informações, consulte Replication Agent Security Model.
sp_addsubscription impede o acesso dos subscritores ODBC e OLE DB a publicações que:
Foram criados com o @sync_method nativo no chamado para sp_addpublication.
Conter artigos que foram adicionados à publicação com o procedimento armazenado sp_addarticle que tinha um valor de parâmetro @pre_creation_cmd 3 (truncate).
Tente definir @update_mode para
sync tran.Tenha um artigo configurado para usar instruções parametrizadas.
Além disso, se uma publicação tiver a opção @allow_queued_tran definida como verdadeira (o que permite a fila de alterações no Assinante até que possam ser aplicadas no Editor), a coluna de carimbo temporal num artigo é scriptada como carimbo temporal, e as alterações nessa coluna são enviadas ao Assinante. O Assinante gera e atualiza o valor da coluna com carimbo temporal. Para um Assinante ODBC ou OLE DB, sp_addsubscription falha se for feita uma tentativa de subscrever uma publicação que tenha @allow_queued_tran definida como true e artigos com colunas de carimbo temporal.
Se uma subscrição não usar um pacote DTS, não pode subscrever uma publicação definida para @allow_transformable_subscriptions. Se a tabela da publicação precisar de ser replicada tanto para uma subscrição DTS como para uma não-subscrição DTS, têm de ser criadas duas publicações separadas: uma para cada tipo de subscrição.
Ao selecionar as opçõesreplication support onlysync_type , initialize with backup, ou initialize from lsn, o agente leitor de registo deve ser executado após a sp_addsubscriptionexecução de , para que os scripts de configuração sejam escritos na base de dados de distribuição. O agente do leitor de logs deve ser executado em uma conta que seja membro da função de servidor predefinida sysadmin. Quando a opção @sync_type está definida para Automatic, não são necessárias ações especiais do agente leitor de log.
Permissions
Apenas os membros do papel fixo de servidor administrador do sistema ou db_owner papel fixo de base de dados podem executar sp_addsubscription. Para subscrições de pull, os utilizadores com logins na lista de acesso à publicação podem executar sp_addsubscription.
Examples
-- 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'AdventureWorks2022Replica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks2022]
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
Conteúdo relacionado
- Criar uma subscrição push
- Crie uma Subscrição para um Assinante Não SQL Server
- Subscreva Publicações
- sp_addpushsubscription_agent (Transact-SQL)
- sp_changesubstatus (Transact-SQL)
- sp_dropsubscription (Transact-SQL)
- sp_helpsubscription (Transact-SQL)
- Procedimentos armazenados do sistema (Transact-SQL)