Creazione di una sottoscrizione pushCreate a Push Subscription

In questo argomento viene descritto come creare una sottoscrizione push in SQL Server 2017SQL Server 2017 tramite SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQLo RMO (Replication Management Objects).This topic describes how to create a push subscription in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or Replication Management Objects (RMO). Per informazioni sulla creazione di una sottoscrizione push per un Sottoscrittore non SQL ServerSQL Server, vedere Creare una sottoscrizione per un Sottoscrittore non SQL Server.For information about creating a push subscription for a non- SQL ServerSQL Server Subscriber, see Create a Subscription for a Non-SQL Server Subscriber.

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

Creare una sottoscrizione push nel server di pubblicazione o nel Sottoscrittore utilizzando la Creazione guidata nuova sottoscrizione.Create a push subscription at the Publisher or the Subscriber using the New Subscription Wizard. Attenersi alle indicazioni presenti nelle pagine della procedura guidata per:Follow the pages in the wizard to:

  • Specificare il server di pubblicazione e la pubblicazione.Specify the Publisher and publication.

  • Selezionare la posizione di esecuzione degli agenti di replica.Select where replication agents will run. Per una sottoscrizione push, selezionare Esegui tutti gli agenti nel server di distribuzione (sottoscrizioni push) nella pagina Posizione in cui eseguire l'agente di distribuzione o nella pagina Posizione in cui eseguire l'agente di merge , in base al tipo di pubblicazione.For a push subscription, select Run all agents at the Distributor (push subscriptions) on the Distribution Agent Location page or Merge Agent Location page, depending on the type of publication.

  • Specificare i Sottoscrittori e i database di sottoscrizione.Specify Subscribers and subscription databases.

  • Specificare gli accessi e le password utilizzati per le connessioni stabilite dagli agenti di replica:Specify the logins and passwords used for connections made by replication agents:

    • Per effettuare sottoscrizioni di pubblicazioni snapshot e transazionali, specificare le credenziali nella pagina Sicurezza agente di distribuzione .For subscriptions to snapshot and transactional publications, specify credentials on the Distribution Agent Security page.

    • Per effettuare sottoscrizioni di pubblicazioni di tipo merge, specificare le credenziali nella pagina Sicurezza agente di merge .For subscriptions to merge publications, specify credentials on the Merge Agent Security page.

      Per informazioni sulle autorizzazioni richieste per ogni agente, vedere Replication Agent Security Model.For information about the permissions required by each agent, see Replication Agent Security Model.

  • Specificare una pianificazione della sincronizzazione e definire quando il Sottoscrittore dovrà essere inizializzato.Specify a synchronization schedule and when the Subscriber should be initialized.

  • Specificare le opzioni aggiuntive per le pubblicazioni di tipo merge, ovvero tipo di sottoscrizione e valori per il filtro con parametri.Specify additional options for merge publications: subscription type; and values for parameterized filtering.

  • Specificare le opzioni aggiuntive per le pubblicazioni transazionali che consentono l'aggiornamento delle sottoscrizioni, indicando se si desidera che i Sottoscrittori eseguano immediatamente il commit delle modifiche nel server di pubblicazione o se devono aggiungerle a una coda e le credenziali utilizzate per stabilire una connessione dal Sottoscrittore al server di pubblicazione.Specify additional options for transactional publications that allow updating subscriptions: whether Subscribers should commit changes at the Publisher immediately or write them to a queue; credentials used to connect from the Subscriber to the Publisher.

  • Facoltativamente, creare lo script della sottoscrizione.Optionally script the subscription.

Per creare una sottoscrizione push dal server di pubblicazioneTo create a push subscription from the Publisher

  1. Connettersi al server di pubblicazione in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studioe quindi espandere il nodo del server.Connect to the Publisher in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. Espandere la cartella Replica e quindi la cartella Pubblicazioni locali .Expand the Replication folder, and then expand the Local Publications folder.

  3. Fare clic con il pulsante destro del mouse sulla pubblicazione per la quale si desidera creare una o più sottoscrizioni e scegliere Nuove sottoscrizioni.Right-click the publication for which you want to create one or more subscriptions, and then click New Subscriptions.

  4. Completare i passaggi della Creazione guidata nuova sottoscrizione.Complete the pages in the New Subscription Wizard.

Per creare una sottoscrizione push dal SottoscrittoreTo create a push subscription from the Subscriber

  1. Connettersi al Sottoscrittore in SQL Server Management StudioSQL Server Management Studioe quindi espandere il nodo del server.Connect to the Subscriber in SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. Espandere la cartella Replica .Expand the Replication folder.

  3. Fare clic col pulsante destro del mouse sulla cartella Sottoscrizioni locali e quindi scegliere Nuove sottoscrizioni.Right-click the Local Subscriptions folder, and then click New Subscriptions.

  4. Nella pagina Pubblicazione della Creazione guidata nuova sottoscrizione selezionare <Trova server di pubblicazione SQL Server o <Trova server di pubblicazione Oracle> nell'elenco a discesa Server di pubblicazione.On the Publication page of the New Subscription Wizard, select <Find SQL Server Publisher> or <Find Oracle Publisher> from the Publisher drop-down list.

  5. Connettersi al server di pubblicazione nella finestra di dialogo Connetti a server .Connect to the Publisher in the Connect to Server dialog box.

  6. Selezionare una pubblicazione nella pagina Pubblicazione .Select a publication on the Publication page.

  7. Completare i passaggi della Creazione guidata nuova sottoscrizione.Complete the pages in the New Subscription Wizard.

Utilizzo di Transact-SQL Using Transact-SQL

Le sottoscrizioni push possono essere create a livello di programmazione utilizzando stored procedure di replica.Push subscriptions can be created programmatically using replication stored procedures. Le stored procedure utilizzate dipenderanno dal tipo di pubblicazione a cui appartiene la sottoscrizione.The stored procedures used will depend on the type of publication to which the subscription belongs.

IMPORTANTEIMPORTANT! Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione.When possible, prompt users to enter security credentials at run time. Se è necessario archiviare le credenziali in un file script, è fondamentale proteggere il file per evitare accessi non autorizzati.If you must store credentials in a script file, you must secure the file to prevent unauthorized access.

Per creare una sottoscrizione push di una pubblicazione snapshot o transazionaleTo create a push subscription to a snapshot or transactional publication

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_helppublicationper verificare che la pubblicazione supporti le sottoscrizioni push.At the Publisher on the publication database, verify that the publication supports push subscriptions by executing sp_helppublication.

    • Se il valore di allow_push è 1, le sottoscrizioni push sono supportate.If the value of allow_push is 1, push subscriptions are supported.

    • Se il valore di allow_push è 0, eseguire sp_changepublicationspecificando allow_push per @property e true per @value.If the value of allow_push is 0, execute sp_changepublication, specifying allow_push for @property and true for @value.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_addsubscription.At the Publisher on the publication database, execute sp_addsubscription. Specificare @publication, @subscriber e @destination_db.Specify @publication, @subscriber and @destination_db. Specificare il valore push per @subscription_type.Specify a value of push for @subscription_type. Per informazioni sull'aggiornamento delle sottoscrizioni, vedere Create an Updatable Subscription to a Transactional Publication.For information about how to update subscriptions, see Create an Updatable Subscription to a Transactional Publication.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_addpushsubscription_agent.At the Publisher on the publication database, execute sp_addpushsubscription_agent. Specificare le opzioni seguenti:Specify the following:

    • I parametri @subscriber, @subscriber_dbe @publication .The @subscriber, @subscriber_db, and @publication parameters.

    • I parametri MicrosoftMicrosoft Windows utilizzate per l'esecuzione dell'agente di distribuzione nel server di distribuzione per @job_login e @job_password.The MicrosoftMicrosoft Windows credentials under which the Distribution Agent at the Distributor runs for @job_login and @job_password.

      NOTA: per le connessioni effettuate con l'autenticazione integrata di Windows vengono usate sempre le credenziali di Windows specificate da @job_login e @job_password.NOTE: Connections made using Windows Integrated Authentication always use the Windows credentials specified by @job_login and @job_password. L'agente di distribuzione esegue sempre la connessione locale al server di distribuzione utilizzando l'autenticazione integrata di Windows.The Distribution Agent always makes the local connection to the Distributor using Windows Integrated Authentication. Per impostazione predefinita, l'agente si connette al Sottoscrittore utilizzando l'autenticazione integrata di Windows.By default, the agent will connect to the Subscriber using Windows Integrated Authentication.

    • (Facoltativo) Il valore 0 per @subscriber_security_mode e le informazioni sull'account di accesso di MicrosoftMicrosoft SQL ServerSQL Server per @subscriber_login e @subscriber_password.(Optional) A value of 0 for @subscriber_security_mode and the MicrosoftMicrosoft SQL ServerSQL Server login information for @subscriber_login and @subscriber_password. Specificare questi parametri se è necessario utilizzare l'autenticazione di SQL Server per la connessione al Sottoscrittore.Specify these parameters if you need to use SQL Server Authentication when connecting to the Subscriber.

    • Specificare una pianificazione per il processo dell'agente di distribuzione da eseguire per la sottoscrizione.A schedule for the Distribution Agent job for this subscription. Per altre informazioni, vedere Specify Synchronization Schedules.For more information, see Specify Synchronization Schedules.

    IMPORTANTEIMPORTANT!! Quando si crea una sottoscrizione push in un server di pubblicazione per un server di distribuzione remoto, i valori specificati per tutti i parametri, compresi job_login e job_password, vengono inviati al server di distribuzione come testo normale.When creating a push subscription at a Publisher with a remote Distributor, the values supplied for all parameters, including job_login and job_password, are sent to the Distributor as plain text. È consigliabile crittografare la connessione tra il server di pubblicazione e il server di distribuzione remoto prima di eseguire questa stored procedure.You should encrypt the connection between the Publisher and its remote Distributor before executing this stored procedure. Per altre informazioni, vedere Abilitare le connessioni crittografate al motore di database (Gestione configurazione SQL Server).For more information, see Enable Encrypted Connections to the Database Engine (SQL Server Configuration Manager).

Per creare una sottoscrizione push di una pubblicazione di tipo mergeTo create a push subscription to a merge publication

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_helpmergepublicationper verificare che la pubblicazione supporti le sottoscrizioni push.At the Publisher on the publication database, verify that the publication supports push subscriptions by executing sp_helpmergepublication.

    • Se il valore di allow_push è 1, la pubblicazione supporta le sottoscrizioni push.If the value of allow_push is 1, the publication supports push subscriptions.

    • Se il valore di allow_push non è 1, eseguire sp_changemergepublicationspecificando allow_push per @property e true per @value.If the value of allow_push is not 1, execute sp_changemergepublication, specifying allow_push for @property and true for @value.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergesubscriptionspecificando i parametri seguenti:At the Publisher on the publication database, execute sp_addmergesubscription, specifying the following parameters:

    • @publication.@publication. Nome della pubblicazione.This is the name of the publication.

    • @subscriber_type.@subscriber_type. Per una sottoscrizione client specificare local e per una sottoscrizione server specificare global.For a client subscription, specify local and for a server subscription, specify global.

    • @subscription_priority.@subscription_priority. Per una sottoscrizione server, specificare una priorità per la pubblicazione utilizzando un valore compreso tra0.00 e 99.99.For a server subscription, specify a priority for the subscription (0.00 to 99.99).

      Per altre informazioni, vedere Advanced Merge Replication Conflict Detection and Resolution.For more information, see Advanced Merge Replication Conflict Detection and Resolution.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergepushsubscription_agent.At the Publisher on the publication database, execute sp_addmergepushsubscription_agent. Specificare le opzioni seguenti:Specify the following:

    • I parametri @subscriber, @subscriber_dbe @publication .The @subscriber, @subscriber_db, and @publication parameters.

    • Le credenziali di Windows utilizzate per l'esecuzione dell'agente di merge nel server di distribuzione per @job_login e @job_password.The Windows credentials under which the Merge Agent at the Distributor runs for @job_login and @job_password.

      NOTA: per le connessioni effettuate con l'autenticazione integrata di Windows vengono usate sempre le credenziali di Windows specificate da @job_login e @job_password.NOTE: Connections made using Windows Integrated Authentication always use the Windows credentials specified by @job_login and @job_password. L'agente di merge esegue sempre la connessione locale al server di distribuzione utilizzando l'autenticazione integrata di Windows.The Merge Agent always makes the local connection to the Distributor using Windows Integrated Authentication. Per impostazione predefinita, l'agente si connette al Sottoscrittore utilizzando l'autenticazione integrata di Windows.By default, the agent will connect to the Subscriber using Windows Integrated Authentication.

    • (Facoltativo) Il valore 0 per @subscriber_security_mode e le informazioni sull'account di accesso di SQL ServerSQL Server per @subscriber_login e @subscriber_password.(Optional) A value of 0 for @subscriber_security_mode and the SQL ServerSQL Server login information for @subscriber_login and @subscriber_password. Specificare questi parametri se è necessario utilizzare l'autenticazione di SQL Server per la connessione al Sottoscrittore.Specify these parameters if you need to use SQL Server Authentication when connecting to the Subscriber.

    • (Facoltativo) Il valore 0 per @publisher_security_mode e le informazioni sull'account di accesso di SQL ServerSQL Server per @publisher_login e @publisher_password.(Optional) A value of 0 for @publisher_security_mode and the SQL ServerSQL Server login information for @publisher_login and @publisher_password. Specificare questi valori se è necessario utilizzare l'autenticazione di SQL Server per la connessione al server di pubblicazione.Specify these values if you need to use SQL Server Authentication when connecting to the Publisher.

    • Una pianificazione per il processo dell'agente di merge per la sottoscrizione.A schedule for the Merge Agent job for this subscription. Per altre informazioni, vedere Specify Synchronization Schedules.For more information, see Specify Synchronization Schedules.

    IMPORTANTEIMPORTANT!! Quando si crea una sottoscrizione push in un server di pubblicazione per un server di distribuzione remoto, i valori specificati per tutti i parametri, compresi job_login e job_password, vengono inviati al server di distribuzione come testo normale.When creating a push subscription at a Publisher with a remote Distributor, the values supplied for all parameters, including job_login and job_password, are sent to the Distributor as plain text. È consigliabile crittografare la connessione tra il server di pubblicazione e il server di distribuzione remoto prima di eseguire questa stored procedure.You should encrypt the connection between the Publisher and its remote Distributor before executing this stored procedure. Per altre informazioni, vedere Abilitare le connessioni crittografate al motore di database (Gestione configurazione SQL Server).For more information, see Enable Encrypted Connections to the Database Engine (SQL Server Configuration Manager).

Esempi (Transact-SQL) Examples (Transact-SQL)

Nell'esempio seguente viene creata una sottoscrizione push a una pubblicazione transazionale.The following example creates a push subscription to a transactional publication. I valori dell'account di accesso e della password vengono forniti in fase di esecuzione tramite le variabili di scripting di sqlcmd .Login and password values are supplied at run time by using sqlcmd scripting variables.

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

Nell'esempio seguente viene creata una sottoscrizione push a una pubblicazione di tipo merge.The following example creates a push subscription to a merge publication. I valori dell'account di accesso e della password vengono forniti in fase di esecuzione tramite le variabili di scripting di sqlcmd .Login and password values are supplied at run time by using sqlcmd scripting variables.

-- 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;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks2012];
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @hostname = @hostname;

--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO
-- 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;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks2012];
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @hostname = @hostname;

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

Utilizzo di RMO (Replication Management Objects) Using Replication Management Objects (RMO)

È possibile creare sottoscrizioni push a livello di programmazione tramite gli oggetti RMO (Replication Management Objects).You can create push subscriptions programmatically by using Replication Management Objects (RMO). Le classi RMO utilizzate per la creazione di una sottoscrizione push dipendono dal tipo di pubblicazione per cui viene creata la sottoscrizione.The RMO classes you use to create a push subscription depend on the type of publication to which the subscription is created.

IMPORTANTEIMPORTANT! Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione.When possible, prompt users to enter security credentials at runtime. Se è necessario archiviare le credenziali, utilizzare i servizi di crittografia offerti da MicrosoftMicrosoft Windows .NET Framework.If you must store credentials, use the cryptographic services provided by the MicrosoftMicrosoft Windows .NET Framework.

Per creare una sottoscrizione push di una pubblicazione snapshot o transazionaleTo create a push subscription to a snapshot or transactional publication

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection .Create a connection to the Publisher by using the ServerConnection class.

  2. Creare un'istanza della classe TransPublication utilizzando la connessione al server di pubblicazione creata nel passaggio 1.Create an instance of the TransPublication class by using the Publisher connection from step 1. Specificare Name, DatabaseNamee ConnectionContext.Specify Name, DatabaseName, and ConnectionContext.

  3. Chiamare il metodo LoadProperties .Call the LoadProperties method. Se il metodo restituisce false, le proprietà specificate nel passaggio 2 non sono corrette oppure la pubblicazione non esiste nel server.If this method returns false, either the properties specified in step 2 are incorrect or the publication does not exists on the server.

  4. Eseguire un'operazione con AND logico bit per bit (& in Visual C# e And in Visual Basic) tra la proprietà Attributes e AllowPush.Perform a bitwise logical AND (& in Visual C# and And in Visual Basic) between the Attributes property and AllowPush. Se il risultato è None, impostare Attributes sul risultato di un'operazione con OR logico bit per bit (| in Visual C# e Or in Visual Basic) tra Attributes e AllowPush.If the result is None, set Attributes to the result of a bitwise logical OR (| in Visual C# and Or in Visual Basic) between Attributes and AllowPush. Chiamare quindi CommitPropertyChanges per abilitare le sottoscrizioni push.Then, call CommitPropertyChanges to enable push subscriptions.

  5. Se il database di sottoscrizione non esiste, crearlo utilizzando la classe Database .If the subscription database does not exist, create it by using the Database class. Per altre informazioni, vedere Creazione, modifica e rimozione di database.For more information, see Creating, Altering, and Removing Databases.

  6. Creare un'istanza della classe TransSubscription .Create an instance of the TransSubscription class.

  7. Impostare le proprietà seguenti per la sottoscrizione:Set the following subscription properties:

  8. Chiamare il metodo Create .Call the Create method.

    IMPORTANTE!Quando si crea una sottoscrizione push in un server di pubblicazione con un server di distribuzione remoto, i valori specificati per tutte le proprietà, compresa SynchronizationAgentProcessSecurity, vengono inviati al server di distribuzione come testo normale.IMPORTANT!!When creating a push subscription at a Publisher with a remote Distributor, the values supplied for all properties, including SynchronizationAgentProcessSecurity, are sent to the Distributor as plain text. È consigliabile crittografare la connessione tra il server di pubblicazione e il server di distribuzione remoto prima di chiamare il metodo Create .You should encrypt the connection between the Publisher and its remote Distributor before calling the Create method. Per altre informazioni, vedere Abilitare le connessioni crittografate al motore di database (Gestione configurazione SQL Server).For more information, see Enable Encrypted Connections to the Database Engine (SQL Server Configuration Manager).

Per creare una sottoscrizione push di una pubblicazione di tipo mergeTo create a push subscription to a merge publication

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection .Create a connection to the Publisher by using the ServerConnection class.

  2. Creare un'istanza della classe MergePublication utilizzando la connessione al server di pubblicazione creata nel passaggio 1.Create an instance of the MergePublication class by using the Publisher connection from step 1. Specificare Name, DatabaseNamee ConnectionContext.Specify Name, DatabaseName, and ConnectionContext.

  3. Chiamare il metodo LoadProperties .Call the LoadProperties method. Se il metodo restituisce false, le proprietà specificate nel passaggio 2 non sono corrette oppure la pubblicazione non esiste nel server.If this method returns false, either the properties specified in step 2 are incorrect or the publication does not exists on the server.

  4. Eseguire un'operazione con AND logico bit per bit (& in Visual C# e And in Visual Basic) tra la proprietà Attributes e AllowPush.Perform a bitwise logical AND (& in Visual C# and And in Visual Basic) between the Attributes property and AllowPush. Se il risultato è None, impostare Attributes sul risultato di un'operazione con OR logico bit per bit (| in Visual C# e Or in Visual Basic) tra Attributes e AllowPush.If the result is None, set Attributes to the result of a bitwise logical OR (| in Visual C# and Or in Visual Basic) between Attributes and AllowPush. Chiamare quindi CommitPropertyChanges per abilitare le sottoscrizioni push.Then, call CommitPropertyChanges to enable push subscriptions.

  5. Se il database di sottoscrizione non esiste, crearlo utilizzando la classe Database .If the subscription database does not exist, create it by using the Database class. Per altre informazioni, vedere Creazione, modifica e rimozione di database.For more information, see Creating, Altering, and Removing Databases.

  6. Creare un'istanza della classe MergeSubscription .Create an instance of the MergeSubscription class.

  7. Impostare le proprietà seguenti per la sottoscrizione:Set the following subscription properties:

  8. Chiamare il metodo Create .Call the Create method.

    IMPORTANTEIMPORTANT! Quando si crea una sottoscrizione push in un server di pubblicazione con un server di distribuzione remoto, i valori specificati per tutte le proprietà, compresa SynchronizationAgentProcessSecurity, vengono inviati al server di distribuzione come testo normale.When creating a push subscription at a Publisher with a remote Distributor, the values supplied for all properties, including SynchronizationAgentProcessSecurity, are sent to the Distributor as plain text. È consigliabile crittografare la connessione tra il server di pubblicazione e il server di distribuzione remoto prima di chiamare il metodo Create .You should encrypt the connection between the Publisher and its remote Distributor before calling the Create method. Per altre informazioni, vedere Abilitare le connessioni crittografate al motore di database (Gestione configurazione SQL Server).For more information, see Enable Encrypted Connections to the Database Engine (SQL Server Configuration Manager).

Esempi (RMO) Examples (RMO)

In questo esempio viene creata una nuova sottoscrizione push di una pubblicazione transazionale.This example creates a new push subscription to a transactional publication. Le credenziali dell'account di Windows utilizzate per eseguire il processo dell'agente di distribuzione vengono passate in fase di esecuzione.The Windows account credentials you use to run the Distribution Agent job are passed at runtime.

// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";

//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(subscriberName);

// Create the objects that we need.
TransPublication publication;
TransSubscription subscription;

try
{
	// Connect to the Publisher.
	conn.Connect();

	// Ensure that the publication exists and that 
	// it supports push subscriptions.
	publication = new TransPublication();
	publication.Name = publicationName;
	publication.DatabaseName = publicationDbName;
	publication.ConnectionContext = conn;

	if (publication.IsExistingObject)
	{
		if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
		{
			publication.Attributes |= PublicationAttributes.AllowPush;
		}

		// Define the push subscription.
		subscription = new TransSubscription();
		subscription.ConnectionContext = conn;
		subscription.SubscriberName = subscriberName;
		subscription.PublicationName = publicationName;
		subscription.DatabaseName = publicationDbName;
		subscription.SubscriptionDBName = subscriptionDbName;

		// Specify the Windows login credentials for the Distribution Agent job.
		subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
		subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

                 // By default, subscriptions to transactional publications are synchronized 
                 // continuously, but in this case we only want to synchronize on demand.
                 subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand;

		// Create the push subscription.
		subscription.Create();
	}
	else
	{
		// Do something here if the publication does not exist.
		throw new ApplicationException(String.Format(
			"The publication '{0}' does not exist on {1}.",
			publicationName, publisherName));
	}
}
catch (Exception ex)
{
	// Implement the appropriate error handling here.
	throw new ApplicationException(String.Format(
		"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
	conn.Disconnect();
}
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";

//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(subscriberName);

// Create the objects that we need.
TransPublication publication;
TransSubscription subscription;

try
{
	// Connect to the Publisher.
	conn.Connect();

	// Ensure that the publication exists and that 
	// it supports push subscriptions.
	publication = new TransPublication();
	publication.Name = publicationName;
	publication.DatabaseName = publicationDbName;
	publication.ConnectionContext = conn;

	if (publication.IsExistingObject)
	{
		if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
		{
			publication.Attributes |= PublicationAttributes.AllowPush;
		}

		// Define the push subscription.
		subscription = new TransSubscription();
		subscription.ConnectionContext = conn;
		subscription.SubscriberName = subscriberName;
		subscription.PublicationName = publicationName;
		subscription.DatabaseName = publicationDbName;
		subscription.SubscriptionDBName = subscriptionDbName;

		// Specify the Windows login credentials for the Distribution Agent job.
		subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
		subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

                 // By default, subscriptions to transactional publications are synchronized 
                 // continuously, but in this case we only want to synchronize on demand.
                 subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand;

		// Create the push subscription.
		subscription.Create();
	}
	else
	{
		// Do something here if the publication does not exist.
		throw new ApplicationException(String.Format(
			"The publication '{0}' does not exist on {1}.",
			publicationName, publisherName));
	}
}
catch (Exception ex)
{
	// Implement the appropriate error handling here.
	throw new ApplicationException(String.Format(
		"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
	conn.Disconnect();
}

' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksProductTran"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New TransPublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New TransSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName

        ' Specify the Windows login credentials for the Distribution Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' By default, subscriptions to transactional publications are synchronized 
        ' continuously, but in this case we only want to synchronize on demand.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand

        ' Create the push subscription.
        subscription.Create()
    Else
        ' Do something here if the publication does not exist.
        Throw New ApplicationException(String.Format( _
         "The publication '{0}' does not exist on {1}.", _
         publicationName, publisherName))
    End If

Catch ex As Exception
    ' Implement the appropriate error handling here.
    Throw New ApplicationException(String.Format( _
        "The subscription to {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksProductTran"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New TransPublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New TransSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName

        ' Specify the Windows login credentials for the Distribution Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' By default, subscriptions to transactional publications are synchronized 
        ' continuously, but in this case we only want to synchronize on demand.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand

        ' Create the push subscription.
        subscription.Create()
    Else
        ' Do something here if the publication does not exist.
        Throw New ApplicationException(String.Format( _
         "The publication '{0}' does not exist on {1}.", _
         publicationName, publisherName))
    End If

Catch ex As Exception
    ' Implement the appropriate error handling here.
    Throw New ApplicationException(String.Format( _
        "The subscription to {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try

In questo esempio viene creata una nuova sottoscrizione push di una pubblicazione di tipo merge.This example creates a new push subscription to a merge publication. Le credenziali dell'account di Windows utilizzate per eseguire il processo dell'agente di merge vengono passate in fase di esecuzione.The Windows account credentials you use to run the Merge Agent job are passed at runtime.

// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
string hostname = @"adventure-works\garrett1";

//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(subscriberName);

// Create the objects that we need.
MergePublication publication;
MergeSubscription subscription;

try
{
	// Connect to the Publisher.
	conn.Connect();

	// Ensure that the publication exists and that 
	// it supports push subscriptions.
	publication = new MergePublication();
	publication.Name = publicationName;
	publication.DatabaseName = publicationDbName;
	publication.ConnectionContext = conn;

	if (publication.IsExistingObject)
	{
		if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
		{
			publication.Attributes |= PublicationAttributes.AllowPush;
		}

		// Define the push subscription.
		subscription = new MergeSubscription();
		subscription.ConnectionContext = conn;
		subscription.SubscriberName = subscriberName;
		subscription.PublicationName = publicationName;
		subscription.DatabaseName = publicationDbName;
		subscription.SubscriptionDBName = subscriptionDbName;
		subscription.HostName = hostname;

		// Set a schedule to synchronize the subscription every 2 hours
		// during weekdays from 6am to 10pm.
		subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly;
		subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32(0x003E);
		subscription.AgentSchedule.FrequencyRecurrenceFactor = 1;
		subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour;
		subscription.AgentSchedule.FrequencySubDayInterval = 2;
		subscription.AgentSchedule.ActiveStartDate = 20051108;
		subscription.AgentSchedule.ActiveEndDate = 20071231;
		subscription.AgentSchedule.ActiveStartTime = 060000;
		subscription.AgentSchedule.ActiveEndTime = 100000;

		// Specify the Windows login credentials for the Merge Agent job.
		subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
		subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

		// Create the push subscription.
		subscription.Create();
	}
	else
	{
		// Do something here if the publication does not exist.
		throw new ApplicationException(String.Format(
			"The publication '{0}' does not exist on {1}.",
			publicationName, publisherName));
	}
}
catch (Exception ex)
{
	// Implement the appropriate error handling here.
	throw new ApplicationException(String.Format(
		"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
	conn.Disconnect();
}
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
string hostname = @"adventure-works\garrett1";

//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(subscriberName);

// Create the objects that we need.
MergePublication publication;
MergeSubscription subscription;

try
{
	// Connect to the Publisher.
	conn.Connect();

	// Ensure that the publication exists and that 
	// it supports push subscriptions.
	publication = new MergePublication();
	publication.Name = publicationName;
	publication.DatabaseName = publicationDbName;
	publication.ConnectionContext = conn;

	if (publication.IsExistingObject)
	{
		if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
		{
			publication.Attributes |= PublicationAttributes.AllowPush;
		}

		// Define the push subscription.
		subscription = new MergeSubscription();
		subscription.ConnectionContext = conn;
		subscription.SubscriberName = subscriberName;
		subscription.PublicationName = publicationName;
		subscription.DatabaseName = publicationDbName;
		subscription.SubscriptionDBName = subscriptionDbName;
		subscription.HostName = hostname;

		// Set a schedule to synchronize the subscription every 2 hours
		// during weekdays from 6am to 10pm.
		subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly;
		subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32(0x003E);
		subscription.AgentSchedule.FrequencyRecurrenceFactor = 1;
		subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour;
		subscription.AgentSchedule.FrequencySubDayInterval = 2;
		subscription.AgentSchedule.ActiveStartDate = 20051108;
		subscription.AgentSchedule.ActiveEndDate = 20071231;
		subscription.AgentSchedule.ActiveStartTime = 060000;
		subscription.AgentSchedule.ActiveEndTime = 100000;

		// Specify the Windows login credentials for the Merge Agent job.
		subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
		subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

		// Create the push subscription.
		subscription.Create();
	}
	else
	{
		// Do something here if the publication does not exist.
		throw new ApplicationException(String.Format(
			"The publication '{0}' does not exist on {1}.",
			publicationName, publisherName));
	}
}
catch (Exception ex)
{
	// Implement the appropriate error handling here.
	throw new ApplicationException(String.Format(
		"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
	conn.Disconnect();
}

' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
Dim hostname As String = "adventure-works\garrett1"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergeSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New MergePublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New MergeSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName
        subscription.HostName = hostname

        ' Set a schedule to synchronize the subscription every 2 hours
        ' during weekdays from 6am to 10pm.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly
        subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32("0x003E", 16)
        subscription.AgentSchedule.FrequencyRecurrenceFactor = 1
        subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour
        subscription.AgentSchedule.FrequencySubDayInterval = 2
        subscription.AgentSchedule.ActiveStartDate = 20051108
        subscription.AgentSchedule.ActiveEndDate = 20071231
        subscription.AgentSchedule.ActiveStartTime = 60000
        subscription.AgentSchedule.ActiveEndTime = 100000

        ' Specify the Windows login credentials for the Merge Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' Create the push subscription.
        subscription.Create()
    Else

        ' Do something here if the publication does not exist.
        Throw New ApplicationException(String.Format( _
         "The publication '{0}' does not exist on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Implement the appropriate error handling here.
    Throw New ApplicationException(String.Format( _
    "The subscription to {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
Dim hostname As String = "adventure-works\garrett1"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergeSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New MergePublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New MergeSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName
        subscription.HostName = hostname

        ' Set a schedule to synchronize the subscription every 2 hours
        ' during weekdays from 6am to 10pm.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly
        subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32("0x003E", 16)
        subscription.AgentSchedule.FrequencyRecurrenceFactor = 1
        subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour
        subscription.AgentSchedule.FrequencySubDayInterval = 2
        subscription.AgentSchedule.ActiveStartDate = 20051108
        subscription.AgentSchedule.ActiveEndDate = 20071231
        subscription.AgentSchedule.ActiveStartTime = 60000
        subscription.AgentSchedule.ActiveEndTime = 100000

        ' Specify the Windows login credentials for the Merge Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' Create the push subscription.
        subscription.Create()
    Else

        ' Do something here if the publication does not exist.
        Throw New ApplicationException(String.Format( _
         "The publication '{0}' does not exist on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Implement the appropriate error handling here.
    Throw New ApplicationException(String.Format( _
    "The subscription to {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try

Vedere ancheSee Also

Visualizzare e modificare le proprietà delle sottoscrizioni push View and Modify Push Subscription Properties
Procedure consigliate per la sicurezza della replica Replication Security Best Practices
Creare una pubblicazione Create a Publication
Replication Management Objects Concepts Replication Management Objects Concepts
Sincronizzare una sottoscrizione push Synchronize a Push Subscription
Sottoscrivere le pubblicazioni Subscribe to Publications
Usare sqlcmd con variabili di scriptingUse sqlcmd with Scripting Variables