Condividi tramite


sp_addpushsubscription_agent (Transact-SQL)

Si applica a: SQL Server Istanza gestita di SQL di Azure

Aggiunge un nuovo processo di agente pianificato per sincronizzare una sottoscrizione push di una pubblicazione transazionale. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.

Importante

Quando si configura un server di pubblicazione con un server di distribuzione remoto, i valori forniti per tutti i parametri, inclusi @job_login e @job_password, vengono inviati al server di distribuzione come testo normale. È consigliabile crittografare la connessione tra il server di pubblicazione e il server di distribuzione remoto prima di eseguire questa stored procedure. Per ulteriori informazioni, vedere Configurare il motore di database di SQL Server per la crittografia delle connessioni.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

sp_addpushsubscription_agent
    [ @publication = ] N'publication'
    [ , [ @subscriber = ] N'subscriber' ]
    [ , [ @subscriber_db = ] N'subscriber_db' ]
    [ , [ @subscriber_security_mode = ] subscriber_security_mode ]
    [ , [ @subscriber_login = ] N'subscriber_login' ]
    [ , [ @subscriber_password = ] N'subscriber_password' ]
    [ , [ @job_login = ] N'job_login' ]
    [ , [ @job_password = ] N'job_password' ]
    [ , [ @job_name = ] N'job_name' ]
    [ , [ @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 ]
    [ , [ @dts_package_name = ] N'dts_package_name' ]
    [ , [ @dts_package_password = ] N'dts_package_password' ]
    [ , [ @dts_package_location = ] N'dts_package_location' ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @distribution_job_name = ] N'distribution_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @subscriber_provider = ] N'subscriber_provider' ]
    [ , [ @subscriber_datasrc = ] N'subscriber_datasrc' ]
    [ , [ @subscriber_location = ] N'subscriber_location' ]
    [ , [ @subscriber_provider_string = ] N'subscriber_provider_string' ]
    [ , [ @subscriber_catalog = ] N'subscriber_catalog' ]
[ ; ]

Argomenti

[ @publication = ] N'publication'

Nome della pubblicazione. @publication è sysname, senza impostazione predefinita.

[ @subscriber = ] N'subscriber'

Nome dell'istanza del Sottoscrittore o nome del listener del gruppo di disponibilità se il database del sottoscrittore fa parte di un gruppo di disponibilità. @subscriber è sysname, con il valore predefinito NULL.

Nota

Il nome del server può essere specificato come <Hostname>,<PortNumber> per un'istanza predefinita o <Hostname>\<InstanceName>,<PortNumber> per un'istanza denominata. Specificare il numero di porta per la connessione quando SQL Server viene distribuito in Linux o Windows con una porta personalizzata e il servizio browser è disabilitato. L'uso di numeri di porta personalizzati per il server di distribuzione remoto si applica a SQL Server 2019 (15.x) e versioni successive.

[ @subscriber_db = ] N'subscriber_db'

Nome del database di sottoscrizione. @subscriber_db è sysname, con un valore predefinito .NULL

Per un Sottoscrittore non SQL Server, specificare il valore (destinazione predefinita) per subscriber_db.

[ @subscriber_security_mode = ] subscriber_security_mode

Modalità di sicurezza da utilizzare per la connessione a un Sottoscrittore durante la sincronizzazione. @subscriber_security_mode è smallint, con il valore predefinito .1 I valori seguenti definiscono la modalità di sicurezza:

  • 0 specifica l'autenticazione di SQL Server.
  • 1specifica autenticazione di Windows.
  • 2 specifica l'autenticazione della password di Microsoft Entra a partire da SQL Server 2022 (16.x) CU 6.
  • 3 specifica l'autenticazione integrata di Microsoft Entra a partire da SQL Server 2022 (16.x) CU 6.
  • 4 specifica l'autenticazione del token Microsoft Entra a partire da SQL Server 2022 (16.x) CU 6.

Importante

Per le sottoscrizioni ad aggiornamento in coda, usare l'autenticazione di SQL Server per le connessioni ai Sottoscrittori e specificare un account diverso per la connessione a ogni Sottoscrittore. Per tutte le altre sottoscrizioni utilizzare l'autenticazione di Windows.

[ @subscriber_login = ] N'subscriber_login'

Account di accesso del Sottoscrittore da utilizzare per la connessione a un Sottoscrittore durante la sincronizzazione. @subscriber_login è sysname, con un valore predefinito .NULL

[ @subscriber_password = ] N'subscriber_password'

Password del Sottoscrittore. subscriber_password è necessario se subscriber_security_mode è impostato su 0. @subscriber_password è sysname, con un valore predefinito .NULL Se viene usata una password del sottoscrittore, viene crittografata automaticamente.

Importante

Non usare una password vuota. Usare una password complessa. Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione. Se è necessario archiviare le credenziali in un file script, è fondamentale proteggere il file per evitare accessi non autorizzati.

[ @job_login = ] N'job_login'

Account di accesso per l'account con cui viene eseguito l'agente. In Istanza gestita di SQL di Azure usare un account SQL Server. @job_login è nvarchar(257), con il valore predefinito NULL. Questo account di Windows viene sempre utilizzato per le connessioni dell'agente al server di distribuzione e per le connessioni al Sottoscrittore quando si utilizza l'autenticazione integrata di Windows.

[ @job_password = ] N'job_password'

Password per l'account con cui viene eseguito l'agente. @job_password è sysname, senza impostazione predefinita.

Importante

Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione. Se è necessario archiviare le credenziali in un file script, è fondamentale proteggere il file per evitare accessi non autorizzati.

[ @job_name = ] N'job_name'

Nome di un processo dell'agente esistente. @job_name è sysname, con il valore predefinito NULL. Questo parametro viene specificato solo quando la sottoscrizione viene sincronizzata usando un processo esistente, anziché un processo appena creato (impostazione predefinita). Se non si è membri del ruolo predefinito del server sysadmin , è necessario specificare @job_login e @job_password quando si specifica @job_name.

[ @frequency_type = ] frequency_type

Frequenza con cui pianificare il agente di distribuzione. @frequency_type è int e può essere uno dei valori seguenti.

valore Descrizione
1 Singola occorrenza
2 Su richiesta
4 Ogni giorno
8 Settimanale
16 Mensile
32 Mensile relativa
64 (predefinito) Avvio automatico
128 Ricorrente

Nota

Se si specifica un valore, 64 il agente di distribuzione viene eseguito in modalità continua. Corrisponde all'impostazione del -Continuous parametro per l'agente. Per altre informazioni, vedere Replication Distribution Agent.

[ @frequency_interval = ] frequency_interval

Valore da applicare alla frequenza impostata da @frequency_type. @frequency_interval è int, con il valore predefinito 1.

[ @frequency_relative_interval = ] frequency_relative_interval

Data del agente di distribuzione. Questo parametro viene usato quando frequency_type è impostato su 32 (relativo mensile). @frequency_relative_interval è int e può essere uno dei valori seguenti.

valore Descrizione
1 (predefinito) First
2 Secondo
4 Terza
8 Quarta
16 Ultimo

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

Fattore di ricorrenza utilizzato da @frequency_type. @frequency_recurrence_factor è int, con un valore predefinito .0

[ @frequency_subday = ] frequency_subday

Specifica la frequenza con cui riprogrammare durante il periodo definito. @frequency_subday è int e può essere uno dei valori seguenti.

valore Descrizione
1 Una sola volta
2 Secondo
4 (predefinito) Minute
8 Ore

[ @frequency_subday_interval = ] frequency_subday_interval

Intervallo per @frequency_subday. @frequency_subday_interval è int, con il valore predefinito 5.

[ @active_start_time_of_day = ] active_start_time_of_day

Ora del giorno in cui il agente di distribuzione viene pianificato per la prima volta, formattato come HHmmss. @active_start_time_of_day è int, con il valore predefinito 0.

[ @active_end_time_of_day = ] active_end_time_of_day

Ora del giorno in cui il agente di distribuzione smette di essere pianificato, formattato come HHmmss. @active_end_time_of_day è int, con il valore predefinito .235959

[ @active_start_date = ] active_start_date

Data in cui il agente di distribuzione viene pianificato per la prima volta, formattato come yyyyMMdd. @active_start_date è int, con un valore predefinito .0

[ @active_end_date = ] active_end_date

Data in cui il agente di distribuzione smette di essere pianificato, formattato come yyyyMMdd. @active_end_date è int, con un valore predefinito .99991231

[ @dts_package_name = ] N'dts_package_name'

Specifica il nome del pacchetto Data Transformation Services (DTS). @dts_package_name è sysname, con un valore predefinito .NULL Per specificare, ad esempio, il nome di pacchetto DTSPub_Package, il parametro deve essere @dts_package_name = N'DTSPub_Package'.

[ @dts_package_password = ] N'dts_package_password'

Password necessaria per l'esecuzione del pacchetto. @dts_package_password è sysname, con un valore predefinito , NULLil che significa che il pacchetto non ha password.

Nota

È necessario specificare una password se si specifica @dts_package_name .

[ @dts_package_location = ] N'dts_package_location'

Specifica la posizione del pacchetto. @dts_package_location è nvarchar(12), con il valore predefinito distributor. Il percorso del pacchetto può essere distributor o subscriber.

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

Specifica se la sottoscrizione può essere sincronizzata tramite Microsoft Synchronization Manager. @enabled_for_syncmgr è nvarchar(5), con il valore predefinito false.

  • Se false, la sottoscrizione non è registrata con Synchronization Manager.
  • Se true, la sottoscrizione viene registrata con Synchronization Manager e può essere sincronizzata senza avviare SQL Server Management Studio.

[ @distribution_job_name = ] N'distribution_job_name'

Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.

[ @publisher = ] N'publisher'

Nome del server di pubblicazione. @publisher è sysname, con un valore predefinito .NULL

[ @subscriber_provider = ] N'subscriber_provider'

Identificatore programmatico univoco (PROGID) con cui è registrato il provider OLE DB per l'origine dati non SQL Server. @subscriber_provider è sysname, con il valore predefinito NULL. @subscriber_provider deve essere univoco per il provider OLE DB installato nel server di distribuzione. @subscriber_provider è supportato solo per i Sottoscrittori non SQL Server.

[ @subscriber_datasrc = ] N'subscriber_datasrc'

Nome dell'origine dati riconosciuto dal provider OLE DB.@subscriber_datasrc è nvarchar(4000), con il valore predefinito NULL. @subscriber_datasrc viene passato come DBPROP_INIT_DATASOURCE proprietà per inizializzare il provider OLE DB. @subscriber_datasrc è supportato solo per i Sottoscrittori non SQL Server.

[ @subscriber_location = ] N'subscriber_location'

Percorso del database riconosciuto dal provider OLE DB. @subscriber_location è nvarchar(4000), con il valore predefinito NULL. @subscriber_location viene passato come DBPROP_INIT_LOCATION proprietà per inizializzare il provider OLE DB. @subscriber_location è supportato solo per i Sottoscrittori non SQL Server.

[ @subscriber_provider_string = ] N'subscriber_provider_string'

Stringa di connessione specifica del provider OLE DB che identifica l'origine dati. @subscriber_provider_string è nvarchar(4000), con il valore predefinito NULL. @subscriber_provider_string viene passato a IDataInitialize o impostato come DBPROP_INIT_PROVIDERSTRING proprietà per inizializzare il provider OLE DB. @subscriber_provider_string è supportato solo per i Sottoscrittori non SQL Server.

[ @subscriber_catalog = ] N'subscriber_catalog'

Catalogo da utilizzare per stabilire una connessione al provider OLE DB. @subscriber_catalog è sysname, con un valore predefinito .NULL @subscriber_catalog viene passato come DBPROP_INIT_CATALOG proprietà per inizializzare il provider OLE DB. @subscriber_catalog è supportato solo per sottoscrittori non SQL Server.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

sp_addpushsubscription_agent viene usato nella replica snapshot e nella replica transazionale.

Esempi

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

Autorizzazioni

Solo i membri del ruolo predefinito del server sysadmin o db_owner ruolo predefinito del database possono eseguire sp_addpushsubscription_agent.