Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo argomento descrive come creare una sottoscrizione push in SQL Server 2014 usando SQL Server Management Studio, Transact-SQL o Replication Management Objects (RMO). Per informazioni sulla creazione di una sottoscrizione push per un Sottoscrittore non SQL Server, vedere Creare una sottoscrizione per un Sottoscrittore non SQL Server.
Uso di SQL Server Management Studio
Creare una sottoscrizione push presso il Pubblicatore o il Sottoscrittore utilizzando la Creazione guidata Nuova Sottoscrizione. Seguire le pagine della procedura guidata per:
Specificare l'editore e la pubblicazione.
Selezionare la posizione in cui verranno eseguiti gli agenti di replica. Per una sottoscrizione push, selezionare Esegui tutti gli agenti nel distributore (sottoscrizioni push) nella pagina Posizione agente di distribuzione o Posizione agente di merge, a seconda del tipo di pubblicazione.
Specificare Sottoscrittori e database di sottoscrizione.
Specificare gli account di accesso e le password usati per le connessioni effettuate dagli agenti di replica:
Per le sottoscrizioni a pubblicazioni snapshot e transazionali, specificare le credenziali sulla pagina della sicurezza dell'agente di distribuzione.
Per le sottoscrizioni per le 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 quando deve essere inizializzato il Sottoscrittore.
Specificare opzioni aggiuntive per le pubblicazioni di tipo merge: tipo di sottoscrizione; valori per il filtraggio parametrizzato.
Specificare le opzioni aggiuntive per le pubblicazioni transazionali che consentono l'aggiornamento delle sottoscrizioni: se i Sottoscrittori devono commettere immediatamente le modifiche nel server di pubblicazione o inviarle a una coda; le credenziali utilizzate per connettersi dal Sottoscrittore al server di pubblicazione.
Facoltativamente, creare script per la sottoscrizione.
Per creare una sottoscrizione push dal server di pubblicazione
Connettersi al server di pubblicazione in Microsoft SQL Server Management Studio e quindi espandere il nodo del server.
Espandere la cartella Replica e quindi la cartella Pubblicazioni locali .
Fare clic con il pulsante destro del mouse sulla pubblicazione per cui si desidera creare una o più sottoscrizioni e quindi scegliere Nuove sottoscrizioni.
Completare le pagine della Creazione guidata per una nuova sottoscrizione.
Per creare una sottoscrizione push dal Sottoscrittore
Connettersi al Sottoscrittore in SQL Server Management Studio e quindi espandere il nodo del server.
Espandere la cartella Replica .
Fare clic con il pulsante destro del mouse sulla cartella Sottoscrizioni locali e quindi scegliere Nuove sottoscrizioni.
Nella pagina Pubblicazione della Creazione guidata nuova sottoscrizione, selezionare <Trova Publisher SQL Server> o <Trova Publisher Oracle> dall'elenco a discesa Publisher.
Connettersi al server di pubblicazione nella finestra di dialogo Connetti al server .
Selezionare una pubblicazione nella pagina Pubblicazione .
Completare le pagine della Procedura guidata Nuova Sottoscrizione.
Uso di Transact-SQL
Le sottoscrizioni push possono essere create programmaticamente usando stored procedure di replica. Le procedure memorizzate utilizzate dipendono dal tipo di pubblicazione a cui la sottoscrizione appartiene.
Importante
Quando possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione. Se è necessario archiviare le credenziali in un file di script, è necessario proteggere il file per impedire l'accesso non autorizzato.
Per creare una sottoscrizione push a una pubblicazione snapshot o transazionale
Nel database del server dell'editore, verificare che la pubblicazione supporti le sottoscrizioni push eseguendo sp_helppublication.
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
trueper @value.
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 su come aggiornare le sottoscrizioni, vedere Creare una sottoscrizione aggiornabile a una pubblicazione transazionale
Nel database di pubblicazione del server di pubblicazione eseguire sp_addpushsubscription_agent. Specificare quanto segue:
Parametri @subscriber, @subscriber_db e @publication .
Le credenziali di Microsoft Windows utilizzate per eseguire l'agente di distribuzione presso il server di distribuzione per @job_login e @job_password.
Annotazioni
Le connessioni effettuate con l'autenticazione integrata di Windows usano sempre le credenziali di Windows specificate da @job_login e @job_password. L'agente di distribuzione effettua sempre la connessione locale al server di distribuzione usando l'autenticazione integrata di Windows. Per impostazione predefinita, l'agente si connetterà al Sottoscrittore usando l'autenticazione integrata di Windows.
(Facoltativo) Valore 0 per @subscriber_security_mode e le informazioni di accesso di Microsoft SQL Server per @subscriber_login e @subscriber_password. Specificare questi parametri se è necessario usare l'autenticazione di SQL Server durante la connessione al Sottoscrittore.
Programmazione per il compito dell'agente di distribuzione per questa sottoscrizione. Per altre informazioni, vedere Specificare le pianificazioni di sincronizzazione.
Importante
Quando si crea una sottoscrizione push in un server di pubblicazione con un server di distribuzione remoto, i valori specificati 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 altre informazioni, vedere Abilitare le connessioni crittografate al motore di database (Gestione configurazione SQL Server).
Per creare una sottoscrizione push a una pubblicazione di tipo merge
Nel database di pubblicazione del Publisher, verificare che la pubblicazione supporti le sottoscrizioni push eseguendo sp_helpmergepublication.
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
trueper @value.
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 locale e per una sottoscrizione server, specificare globale.
@priorità_abbonamento. Per una sottoscrizione server, specificare una priorità per la sottoscrizione (da 0,00 a 99,99).
Per altre informazioni, vedere Rilevamento e risoluzione avanzati dei conflitti nella replica di tipo merge.
Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergepushsubscription_agent. Specificare quanto segue:
Parametri @subscriber, @subscriber_db e @publication .
Le credenziali di Windows sotto le quali viene eseguito l'agente di merge sul server di distribuzione per @job_login e @job_password.
Annotazioni
Le connessioni effettuate con l'autenticazione integrata di Windows usano sempre le credenziali di Windows specificate da @job_login e @job_password. L'agente di merge effettua sempre la connessione locale al server di distribuzione usando l'autenticazione integrata di Windows. Per impostazione predefinita, l'agente si connetterà al Sottoscrittore usando l'autenticazione integrata di Windows.
(Facoltativo) Valore 0 per @subscriber_security_mode e le informazioni di accesso di SQL Server per @subscriber_login e @subscriber_password. Specificare questi parametri se è necessario usare l'autenticazione di SQL Server durante la connessione al Sottoscrittore.
(Facoltativo) Valore 0 per @publisher_security_mode e le informazioni di accesso di SQL Server per @publisher_login e @publisher_password. Specificare questi valori se è necessario usare l'autenticazione di SQL Server durante la connessione al server di pubblicazione.
Pianificazione per il processo dell'agente di merge per questa sottoscrizione. Per altre informazioni, vedere Specificare le pianificazioni di sincronizzazione.
Importante
Quando si crea una sottoscrizione push in un server di pubblicazione con un server di distribuzione remoto, i valori specificati 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 altre informazioni, vedere Abilitare le 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 di accesso e password vengono forniti in fase di esecuzione usando 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 in una pubblicazione di tipo merge. I valori di accesso e password vengono forniti in fase di esecuzione usando 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
Utilizzo di RMO (Replication Management Objects)
È possibile creare sottoscrizioni push a livello di codice usando RMO (Replication Management Objects). Le classi RMO usate per creare una sottoscrizione push dipendono dal tipo di pubblicazione in cui viene creata la sottoscrizione.
Importante
Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione. Se devi archiviare le credenziali, utilizza i servizi di crittografia offerti da Microsoft Windows .NET Framework.
Per creare una sottoscrizione push a una pubblicazione snapshot o transazionale
Creare una connessione al server di pubblicazione tramite la classe ServerConnection .
Creare un'istanza della classe TransPublication utilizzando la connessione Publisher dal passaggio 1. Specificare Name, DatabaseNamee ConnectionContext.
Chiamare il metodo LoadProperties . Se questo metodo restituisce
false, le proprietà specificate nel passaggio 2 non sono corrette o la pubblicazione non esiste nel server.Eseguire un AND logico bit per bit (
&in Visual C# eAndin Visual Basic) tra proprietà Attributes e AllowPush. Se il risultato è None, impostare Attributes sul risultato di un OR logico bit per bit (|in Visual C# eOrin Visual Basic) tra Attributes e AllowPush. Chiamare CommitPropertyChanges quindi per abilitare le sottoscrizioni push.Se il database di sottoscrizione non esiste, crearlo usando la Database classe . Per altre informazioni, vedere Creazione, modifica e rimozione di database.
Creare un'istanza della classe TransSubscription.
Impostare le proprietà di sottoscrizione seguenti:
Oggetto ServerConnection del server di pubblicazione creato nel passaggio 1 per ConnectionContext.
Nome del database di sottoscrizione per SubscriptionDBName.
Nome del Sottoscrittore per SubscriberName.
Nome del database di pubblicazione per DatabaseName.
Nome della pubblicazione per PublicationName.
I campi Login e Password o SecurePassword* di SynchronizationAgentProcessSecurity sono utilizzati per fornire le credenziali per l'account Microsoft Windows sotto il quale l'agente di distribuzione viene eseguito nel server di distribuzione. Questo account viene usato per stabilire connessioni locali al server di distribuzione e per stabilire connessioni remote tramite l'autenticazione di Windows.
Annotazioni
L'impostazione SynchronizationAgentProcessSecurity non è obbligatoria quando la sottoscrizione viene creata da un membro del ruolo predefinito del
sysadminserver, ma è consigliabile. In questo caso, l'agente rappresenta l'account di SQL Server Agent. Per altre informazioni, vedere Modello di sicurezza dell'agente di replica.(Facoltativo) Valore (
trueimpostazione predefinita) per CreateSyncAgentByDefault per creare un processo dell'agente usato per sincronizzare la sottoscrizione. Se si specificafalse, la sottoscrizione può essere sincronizzata solo a livello di codice.(Facoltativo) Impostare i SqlStandardLogin campi e SqlStandardPassword o SecureSqlStandardPassword di quando si usa l'autenticazione di SubscriberSecurity SQL Server per connettersi al Sottoscrittore.
Chiamare il metodo Create .
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à, inclusi SynchronizationAgentProcessSecurity, vengono inviati al server di distribuzione come testo normale. È necessario crittografare la connessione tra il server di pubblicazione e il relativo server di distribuzione remoto prima di chiamare il Create metodo . Per altre informazioni, vedere Abilitare le connessioni crittografate al motore di database (Gestione configurazione SQL Server).
Per creare una sottoscrizione push a una pubblicazione di tipo merge
Creare una connessione al server di pubblicazione tramite la classe ServerConnection .
Creare un'istanza della MergePublication classe usando la connessione al server di pubblicazione del passaggio 1. Specificare Name, DatabaseNamee ConnectionContext.
Chiamare il metodo LoadProperties . Se questo metodo restituisce
false, le proprietà specificate nel passaggio 2 non sono corrette o la pubblicazione non esiste nel server.Eseguire un AND logico bit per bit (
&in Visual C# eAndin Visual Basic) tra la Attributes proprietà e AllowPush. Se il risultato è None, impostare Attributes sul risultato di un OR logico bit per bit (|in Visual C# eOrin Visual Basic) tra Attributes e AllowPush. Chiamare CommitPropertyChanges quindi per abilitare le sottoscrizioni push.Se il database di sottoscrizione non esiste, crearlo usando la Database classe . Per altre informazioni, vedere Creazione, modifica e rimozione di database.
Creare un'istanza della classe MergeSubscription.
Impostare le proprietà di sottoscrizione seguenti:
Oggetto ServerConnection del server di pubblicazione creato nel passaggio 1 per ConnectionContext.
Nome del database di sottoscrizione per SubscriptionDBName.
Nome del Sottoscrittore per SubscriberName.
Nome del database di pubblicazione per DatabaseName.
Nome della pubblicazione per PublicationName.
I Login campi e Password o SecurePassword* di SynchronizationAgentProcessSecurity per fornire le credenziali per l'account di Microsoft Windows in cui viene eseguito l'agente di merge nel server di distribuzione. Questo account viene usato per stabilire connessioni locali al server di distribuzione e per stabilire connessioni remote tramite l'autenticazione di Windows.
Annotazioni
L'impostazione SynchronizationAgentProcessSecurity non è obbligatoria quando la sottoscrizione viene creata da un membro del ruolo predefinito del
sysadminserver, ma è consigliabile. In questo caso, l'agente rappresenta l'account di SQL Server Agent. Per altre informazioni, vedere Modello di sicurezza dell'agente di replica.(Facoltativo) Valore (
trueimpostazione predefinita) per CreateSyncAgentByDefault per creare un processo dell'agente usato per sincronizzare la sottoscrizione. Se si specificafalse, la sottoscrizione può essere sincronizzata solo a livello di codice.(Facoltativo) Impostare i campi SqlStandardLogin e SqlStandardPassword o SecureSqlStandardPassword di SubscriberSecurity quando si utilizza l'autenticazione di SQL Server per connettersi al Sottoscrittore.
(Facoltativo) Impostare i campi SqlStandardLogin e SqlStandardPassword o SecureSqlStandardPassword di PublisherSecurity quando si usa l'autenticazione di SQL Server per connettersi al Publisher.
Chiamare il metodo Create .
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à, inclusi SynchronizationAgentProcessSecurity, vengono inviati al server di distribuzione come testo normale. È necessario crittografare la connessione tra il server di pubblicazione e il relativo server di distribuzione remoto prima di chiamare il Create metodo . Per altre informazioni, vedere Abilitare le connessioni crittografate al motore di database (Gestione configurazione SQL Server).
Esempi (RMO)
In questo esempio viene creata una nuova sottoscrizione push in una pubblicazione transazionale. Le credenziali dell'account di Windows usate per eseguire il processo dell'agente di distribuzione vengono passate in fase di 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.
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 in una pubblicazione di tipo merge. Le credenziali dell'account di Windows usate per eseguire l'attività 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
Vedere anche
Visualizzare e modificare le proprietà delle sottoscrizioni push
Procedure consigliate per la sicurezza della replica
Creare una pubblicazione
Concetti sugli Oggetti di Gestione della Replica
Sincronizzare una sottoscrizione push
Sottoscrivere pubblicazioni
Utilizzo di sqlcmd con variabili di scripting