Condividi tramite


Creazione di una sottoscrizione push

In questo argomento viene descritto come creare una sottoscrizione push in SQL Server 2012 tramite SQL Server Management Studio, Transact-SQL o RMO (Replication Management Objects). Per informazioni sulla creazione di una sottoscrizione push per un Sottoscrittore non SQL Server, vedere Creazione di una sottoscrizione per un Sottoscrittore non SQL Server.

Contenuto dell'argomento

  • Per creare una sottoscrizione push, utilizzando:

    SQL Server Management Studio

    Transact-SQL

    Oggetti RMO (Replication Management Objects)

Utilizzo di SQL Server Management Studio

Creare una sottoscrizione push nel server di pubblicazione o nel Sottoscrittore utilizzando la Creazione guidata nuova sottoscrizione. Attenersi alle indicazioni presenti nelle pagine della procedura guidata per:

  • Specificare il server di pubblicazione e la pubblicazione.

  • Selezionare la posizione di esecuzione degli agenti di replica. 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.

  • Specificare i Sottoscrittori e i database di sottoscrizione.

  • Specificare gli accessi e le password utilizzati per le connessioni stabilite dagli agenti di replica:

    • Per effettuare sottoscrizioni di pubblicazioni snapshot e transazionali, specificare le credenziali nella pagina Sicurezza agente di distribuzione.

    • Per effettuare sottoscrizioni di pubblicazioni di tipo merge, specificare le credenziali nella pagina Sicurezza agente di merge.

    Per informazioni sulle autorizzazioni richieste per ogni agente, vedere Modello di sicurezza dell'agente di replica.

  • Specificare una pianificazione della sincronizzazione e definire quando il Sottoscrittore dovrà essere inizializzato.

  • Specificare le opzioni aggiuntive per le pubblicazioni di tipo merge, ovvero tipo di sottoscrizione e valori per il filtro con parametri.

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

  • Facoltativamente, creare lo script della sottoscrizione.

Per creare una sottoscrizione push dal server di pubblicazione

  1. Connettersi al server di pubblicazione in Microsoft SQL Server Management Studio e quindi espandere il nodo del server.

  2. Espandere la cartella Replica e quindi la cartella Pubblicazioni locali.

  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.

  4. Completare i passaggi della Creazione guidata nuova sottoscrizione.

Per creare una sottoscrizione push dal Sottoscrittore

  1. Connettersi al Sottoscrittore in SQL Server Management Studio e quindi espandere il nodo del server.

  2. Espandere la cartella Replica.

  3. Fare clic col pulsante destro del mouse sulla cartella Sottoscrizioni locali e quindi scegliere Nuove sottoscrizioni.

  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.

  5. Connettersi al server di pubblicazione nella finestra di dialogo Connetti al server.

  6. Selezionare una pubblicazione nella pagina Pubblicazione.

  7. Completare i passaggi della Creazione guidata nuova sottoscrizione.

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

Utilizzo di Transact-SQL

Le sottoscrizioni push possono essere create a livello di programmazione utilizzando stored procedure di replica. Le stored procedure utilizzate dipenderanno dal tipo di pubblicazione a cui appartiene la sottoscrizione.

Nota sulla sicurezzaNota sulla sicurezza

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.

Per creare una sottoscrizione push a una pubblicazione snapshot o transazionale

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni push.

    • Se il valore di allow_push è 1, le sottoscrizioni push sono supportate.

    • Se il valore di allow_push è 0, eseguire sp_changepublication specificando allow_push per @property e true per @value.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_addsubscription. Specificare @publication, @subscriber e @destination_db. Specificare il valore push per @subscription_type. Per informazioni sull'aggiornamento delle sottoscrizioni, vedere Creazione di una sottoscrizione aggiornabile di una pubblicazione transazionale.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_addpushsubscription_agent. Specificare quanto segue:

    • I parametri @subscriber, @subscriber_db e @publication.

    • Le credenziali di Microsoft Windows utilizzate per l'esecuzione dell'agente di distribuzione nel server di distribuzione per @job_login e @job_password.

      [!NOTA]

      Per le connessioni effettuate con l'autenticazione integrata di Windows vengono utilizzate sempre le credenziali di Windows specificate da @job_login e @job_password. L'agente di distribuzione esegue sempre la connessione locale al server di distribuzione utilizzando l'autenticazione integrata di Windows. Per impostazione predefinita, l'agente si connette al Sottoscrittore utilizzando l'autenticazione integrata di Windows.

    • (Facoltativo) Il valore 0 per @subscriber_security_mode e le informazioni sull'account di accesso di Microsoft SQL Server per @subscriber_login e @subscriber_password. Specificare questi parametri se è necessario utilizzare l'autenticazione di SQL Server per la connessione al Sottoscrittore.

    • Una pianificazione per il processo dell'agente di distribuzione per la sottoscrizione. Per ulteriori informazioni, vedere Impostazione di pianificazioni della sincronizzazione.

    Nota sulla sicurezzaNota sulla sicurezza

    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. È 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 Abilitazione di connessioni crittografate al Motore di database (Gestione configurazione SQL Server).

Per creare una sottoscrizione push a una pubblicazione di tipo merge

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_helpmergepublication per verificare che la pubblicazione supporti le sottoscrizioni push.

    • Se il valore di allow_push è 1, la pubblicazione supporta le sottoscrizioni push.

    • Se il valore di allow_push non è 1, eseguire sp_changemergepublication specificando allow_push per @property e true per @value.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergesubscription specificando i parametri seguenti:

    • @publication. Nome della pubblicazione.

    • @subscriber_type. Per una sottoscrizione client specificare local e per una sottoscrizione server specificare global.

    • @subscription_priority. Per una sottoscrizione server, specificare una priorità per la pubblicazione utilizzando un valore compreso tra 0.00 e 99.99.

      Per ulteriori informazioni, vedere Rilevamento e risoluzione avanzati dei conflitti nella replica di tipo merge.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergepushsubscription_agent. Specificare quanto segue:

    • I parametri @subscriber, @subscriber_db e @publication.

    • Le credenziali di Windows utilizzate per l'esecuzione dell'agente di merge nel server di distribuzione per @job_login e @job_password.

      [!NOTA]

      Per le connessioni effettuate con l'autenticazione integrata di Windows vengono utilizzate sempre le credenziali di Windows specificate da @job_login e @job_password. L'agente di merge esegue sempre la connessione locale al server di distribuzione utilizzando l'autenticazione integrata di Windows. Per impostazione predefinita, l'agente si connette al Sottoscrittore utilizzando l'autenticazione integrata di Windows.

    • (Facoltativo) Il valore 0 per @subscriber_security_mode e le informazioni sull'account di accesso di SQL Server per @subscriber_login e @subscriber_password. Specificare questi parametri se è necessario utilizzare l'autenticazione di SQL Server per la connessione al Sottoscrittore.

    • (Facoltativo) Il valore 0 per @publisher_security_mode e le informazioni sull'account di accesso di SQL Server per @publisher_login e @publisher_password. Specificare questi valori se è necessario utilizzare l'autenticazione di SQL Server per la connessione al server di pubblicazione.

    • Una pianificazione per il processo dell'agente di merge per la sottoscrizione. Per ulteriori informazioni, vedere Impostazione di pianificazioni della sincronizzazione.

    Nota sulla sicurezzaNota sulla sicurezza

    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. È 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 Abilitazione di connessioni crittografate al Motore di database (Gestione configurazione SQL Server).

Esempi (Transact-SQL)

Nell'esempio seguente viene creata una sottoscrizione push a una pubblicazione transazionale. I valori dell'account di accesso e della password vengono forniti in fase di esecuzione tramite le variabili di scripting sqlcmd.

-- 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. I valori dell'account di accesso e della password vengono forniti in fase di esecuzione tramite le variabili di scripting sqlcmd.

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

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

Utilizzo di RMO (Replication Management Objects)

È possibile creare sottoscrizioni push a livello di programmazione tramite gli oggetti RMO (Replication Management Objects). Le classi RMO utilizzate per la creazione di una sottoscrizione push dipendono dal tipo di pubblicazione per cui viene creata la sottoscrizione.

Nota sulla sicurezzaNota sulla sicurezza

Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione. Se è necessario archiviare le credenziali, utilizzare i servizi di crittografia offerti da Microsoft Windows .NET Framework.

Per creare una sottoscrizione push di una pubblicazione snapshot o transazionale

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection.

  2. Creare un'istanza della classe TransPublication utilizzando la connessione al server di pubblicazione creata nel passaggio 1. Specificare Name, DatabaseName e ConnectionContext.

  3. Chiamare il metodo LoadProperties. Se il metodo restituisce false, le proprietà specificate nel passaggio 2 non sono corrette oppure la pubblicazione non esiste nel 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. Se il risultato è None, impostare Attributes sul risultato di un bit per bit logico OR ( |in Visual C# e Or in Visual Basic) tra Attributes e AllowPush. Chiamare quindi CommitPropertyChanges per abilitare le sottoscrizioni push.

  5. Se il database di sottoscrizione non esiste, crearlo utilizzando la classe Database. Per ulteriori informazioni, vedere Creazione, modifica e rimozione di database.

  6. Creare un'istanza della classe TransSubscription.

  7. Impostare le proprietà seguenti per la sottoscrizione:

  8. Chiamare il metodo Create.

    Nota sulla sicurezzaNota sulla sicurezza

    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. È consigliabile crittografare la connessione tra il server di pubblicazione e il server di distribuzione remoto prima di chiamare il metodo Create. Per ulteriori informazioni, vedere Abilitazione di connessioni crittografate al Motore di database (Gestione configurazione SQL Server).

Per creare una sottoscrizione push di una pubblicazione di tipo merge

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection.

  2. Creare un'istanza della classe MergePublication utilizzando la connessione al server di pubblicazione creata nel passaggio 1. Specificare Name, DatabaseName e ConnectionContext.

  3. Chiamare il metodo LoadProperties. Se il metodo restituisce false, le proprietà specificate nel passaggio 2 non sono corrette oppure la pubblicazione non esiste nel 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. Se il risultato è None, impostare Attributes sul risultato di un bit per bit logico OR ( |in Visual C# e Or in Visual Basic) tra Attributes e AllowPush. Chiamare quindi CommitPropertyChanges per abilitare le sottoscrizioni push.

  5. Se il database di sottoscrizione non esiste, crearlo utilizzando la classe Database. Per ulteriori informazioni, vedere Creazione, modifica e rimozione di database.

  6. Creare un'istanza della classe MergeSubscription.

  7. Impostare le proprietà seguenti per la sottoscrizione:

  8. Chiamare il metodo Create.

    Nota sulla sicurezzaNota sulla sicurezza

    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. È consigliabile crittografare la connessione tra il server di pubblicazione e il server di distribuzione remoto prima di chiamare il metodo Create. Per ulteriori informazioni, vedere Abilitazione di connessioni crittografate al Motore di database (Gestione configurazione SQL Server).

Esempi (RMO)

In questo esempio viene creata una nuova sottoscrizione push di una pubblicazione transazionale. Le credenziali dell'account di Windows utilizzate per eseguire il processo dell'agente di distribuzione vengono passate in fase di esecuzione.

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

In questo esempio viene creata una nuova sottoscrizione push di una pubblicazione di tipo merge. Le credenziali dell'account di Windows utilizzate per eseguire il processo dell'agente di merge vengono passate in fase di esecuzione.

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

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

Vedere anche

Concetti

Visualizzazione e modifica delle proprietà delle sottoscrizioni push

Procedure consigliate per la sicurezza della replica

Creazione di una pubblicazione

Concetti di base relativi a RMO (Replication Management Objects)

Creazione di una sottoscrizione push

Sincronizzazione di una sottoscrizione push

Sottoscrizione delle pubblicazioni

Utilizzo di sqlcmd con variabili di scripting