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.
Si applica a:SQL Server
Istanza gestita di SQL di Azure
Questo argomento descrive come specificare le pianificazioni della sincronizzazione in SQL Server tramite SQL Server Management Studio, Transact-SQL o Replication Management Objects (RMO). Quando si crea una sottoscrizione, è possibile definire una pianificazione della sincronizzazione per controllare l'esecuzione dell'agente di replica per la sottoscrizione. Se non si specificano parametri di pianificazione, per la sottoscrizione verrà utilizzata la pianificazione predefinita.
Le sottoscrizioni vengono sincronizzate dal agente di distribuzione (per la replica snapshot e transazionale) o dal agente di merge (per la replica di merge). Gli agenti possono essere in esecuzione continuamente, essere in esecuzione su richiesta o essere in esecuzione su una pianificazione.
Utilizzo di SQL Server Management Studio
Specificare le pianificazioni di sincronizzazione nella pagina Pianificazione della sincronizzazione della Creazione guidata Nuova sottoscrizione. Per ulteriori informazioni sull'accesso a questa procedura guidata, vedere Create a Push Subscription e Create a Pull Subscription.
Modificare le pianificazioni della sincronizzazione nella finestra di dialogo Proprietà programmazione processi, alla quale è possibile accedere dalla cartella Processi in SQL Server Management Studio e dalle finestre relative ai dettagli dell'agente in Monitoraggio replica. Per informazioni sull'avvio di Monitoraggio replica, vedere Avviare Monitoraggio replica.
Se si specificano pianificazioni nella cartella Jobs, utilizzare la tabella seguente per determinare il nome del job dell'agente.
| Agente | Nome del processo |
|---|---|
| Agente di merge per le sottoscrizioni pull | <Editore>-<DatabasePubblicazione>-<Pubblicazione>-<Sottoscrittore>-<DatabaseSottoscrizione>-<intero> |
| Agente di unione per le sottoscrizioni push | <Editore>-<Database di pubblicazione>-<Pubblicazione>-<Sottoscrittore>-<intero> |
| Agente di distribuzione per le sottoscrizioni push | <Editore>-<Database di pubblicazione>-<Pubblicazione>-<Sottoscrittore>-<intero>1 |
| Agente di distribuzione per le sottoscrizioni pull | <Editore>-<DatabasePubblicazione>-<Pubblicazione>-<Sottoscrittore>-<DatabaseSottoscrizione>-<GUID>2 |
| Agente di distribuzione per le sottoscrizioni push di Sottoscrittori non SQL Server | <Editore>-<Database di pubblicazione>-<Pubblicazione>-<Sottoscrittore>-<intero> |
1 Per le sottoscrizioni push alle pubblicazioni Oracle, è il <ServerPubblicazione>-<ServerPubblicazione> invece di <ServerPubblicazione>-<DatabasePubblicazione>
2 Per le sottoscrizioni pull di pubblicazioni di Oracle, è <Publisher>-<DistributionDatabase> anziché <Publisher>-<PublicationDatabase>
Per impostare le pianificazioni della sincronizzazione
Nella pagina Pianificazione della sincronizzazione della procedura guidata Nuova sottoscrizione, selezionare uno dei valori seguenti dall'elenco a discesa Pianificazione dell'agente per ogni sottoscrizione che si sta creando:
Esecuzione continua
Esecuzione solo su richiesta
<Definisci pianificazione...>
Se si seleziona <Definisci pianificazione...>, specificare una pianificazione nella finestra di dialogo Proprietà programmazione processi e quindi fare clic su OK.
Completare la procedura guidata.
Per modificare la pianificazione della sincronizzazione per una sottoscrizione push in Monitoraggio della replica
Espandi un gruppo di server di pubblicazione nel riquadro sinistro di Replication Monitor, espandi un server di pubblicazione e quindi fai clic su una pubblicazione.
Fare clic sulla scheda Tutte le sottoscrizioni .
Fare clic con il pulsante destro del mouse su una sottoscrizione e quindi scegliere Visualizza dettagli.
Nella finestra Sottoscrizione < SubscriptionName>, fare clic su Azione e quindi su <Proprietà processo di AgentName>.
Nella pagina Pianificazioni della finestra di dialogo Proprietà processo - <NomeProcesso> dia clic su Modifica.
Nella finestra di dialogo Proprietà della pianificazione del processo, selezionare un valore dall'elenco a discesa Tipo di pianificazione:
Per specificare che l'agente deve essere eseguito in modo continuo, selezionare Avvia automaticamente all'avvio di SQL Server Agent.
Per specificare che l'agente deve essere eseguito secondo una pianificazione, selezionare Ricorrente.
Per specificare che l'agente deve essere eseguito su richiesta, selezionare Una sola volta.
Se si seleziona Ricorrente, specificare una pianificazione per l'agente.
Seleziona OK.
Per modificare una pianificazione della sincronizzazione di una sottoscrizione push in Management Studio
Connettiti al Distributore in Management Studio, quindi espandi il nodo server.
Espandere la cartella SQL Server Agent e quindi espandere la cartella Processi.
Fare clic con il pulsante destro del mouse sull'agente di distribuzione o sull'agente di merge associato alla sottoscrizione e quindi scegliere Proprietà.
Nella pagina Pianificazioni della finestra di dialogo Proprietà processo - <NomeProcesso> dia clic su Modifica.
Nella finestra di dialogo Proprietà della pianificazione del processo, selezionare un valore dall'elenco a discesa Tipo di pianificazione:
Per specificare che l'agente deve essere eseguito in modo continuo, selezionare Avvia automaticamente all'avvio di SQL Server Agent.
Per specificare che l'agente deve essere eseguito secondo una pianificazione, selezionare Ricorrente.
Per specificare che l'agente deve essere eseguito su richiesta, selezionare Una sola volta.
Se si seleziona Ricorrente, specificare una pianificazione per l'agente.
Seleziona OK.
Per modificare una pianificazione di sincronizzazione per una sottoscrizione pull in Management Studio
Esegui la connessione al Sottoscrittore in Management Studio e quindi espandi il nodo server.
Espandere la cartella SQL Server Agent e quindi espandere la cartella Processi.
Fare clic con il pulsante destro del mouse sull'agente di distribuzione o sull'agente di merge associato alla sottoscrizione e quindi scegliere Proprietà.
Nella pagina Pianificazioni della finestra di dialogo Proprietà processo - <NomeProcesso> dia clic su Modifica.
Nella finestra di dialogo Proprietà della pianificazione del processo, selezionare un valore dall'elenco a discesa Tipo di pianificazione:
Per specificare che l'agente deve essere eseguito in modo continuo, selezionare Avvia automaticamente all'avvio di SQL Server Agent.
Per specificare che l'agente deve essere eseguito secondo una pianificazione, selezionare Ricorrente.
Per specificare che l'agente deve essere eseguito su richiesta, selezionare Una sola volta.
Se si seleziona Ricorrente, specificare una pianificazione per l'agente.
Seleziona OK.
Utilizzo di Transact-SQL
È possibile definire pianificazioni della sincronizzazione a livello di programmazione tramite stored procedure di replica. Le procedure memorizzate che si utilizzano dipendono dal tipo di replica e dal tipo di sottoscrizione (pull o push).
Una pianificazione è definita dai parametri di programmazione seguenti, i cui comportamenti vengono ereditati da sp_add_schedule (Transact-SQL):
@frequency_type : tipo di frequenza utilizzata per la pianificazione dell'agente.
@frequency_interval - il giorno della settimana in cui un agente viene eseguito.
@frequency_relative_interval : settimana di un determinato mese in cui è pianificata l'esecuzione mensile dell'agente.
@frequency_recurrence_factor : numero di unità relative al tipo di frequenza tra una sincronizzazione e l'altra.
@frequency_subday : unità della frequenza quando l'agente viene eseguito più di una volta al giorno.
@frequency_subday_interval : numero di unità della frequenza tra un'esecuzione e l'altra quando l'agente viene eseguito più di una volta al giorno.
@active_start_time_of_day : ora di un determinato giorno in cui un agente viene avviato per la prima volta.
@active_end_time_of_day : ora di un determinato giorno in cui un agente viene avviato per l'ultima volta.
@active_start_date : primo giorno di applicazione della pianificazione dell'agente.
@active_end_date : ultimo giorno di applicazione della pianificazione dell'agente.
Per definire la pianificazione di sincronizzazione per una sottoscrizione pull di una pubblicazione transazionale
Crea una nuova sottoscrizione pull per una pubblicazione transazionale. Per ulteriori informazioni, vedere Creazione di una sottoscrizione di pull.
Nel Sottoscrittore, esegui sp_addpullsubscription_agent (Transact-SQL). Specifica @publisher, @publisher_db, @publication, e le credenziali di Microsoft Windows utilizzate per eseguire l'agente di distribuzione nel Sottoscrittore per @job_name e @password. Specificare i parametri di sincronizzazione, descritti in dettaglio in precedenza, con cui definire la pianificazione per il processo dell'agente di distribuzione che sincronizza la sottoscrizione.
Per definire la pianificazione della sincronizzazione per una sottoscrizione push di una pubblicazione transazionale
Creare una nuova sottoscrizione push di una pubblicazione transazionale. Per altre informazioni, vedere Creazione di una sottoscrizione push.
Nel Sottoscrittore esegui sp_addpushsubscription_agent (Transact-SQL). Specificare @subscriber, @subscriber_db, @publicatione le credenziali di Windows utilizzate per eseguire l'agente di distribuzione nel Sottoscrittore per @job_name e @password. Specificare i parametri di sincronizzazione, descritti in dettaglio in precedenza, con cui definire la pianificazione per il processo dell'agente di distribuzione che sincronizza la sottoscrizione.
Per definire la pianificazione della sincronizzazione per una sottoscrizione pull di una pubblicazione di tipo merge
Creare una nuova sottoscrizione pull di una pubblicazione di tipo merge. Per ulteriori informazioni, vedere Creazione di una sottoscrizione di pull.
Nel Sottoscrittore eseguire sp_addmergepullsubscription_agent. Specificare @publisher, @publisher_db, @publicatione le credenziali di Windows utilizzate per eseguire l'agente di merge nel Sottoscrittore per @job_name e @password. Specifica i parametri di sincronizzazione, descritti in precedenza, che definiscono la pianificazione del processo agente di merge che sincronizza la sottoscrizione.
Per definire la pianificazione della sincronizzazione per una sottoscrizione push di una pubblicazione di tipo merge
Crea una nuova sottoscrizione di tipo push per una pubblicazione merge. Per altre informazioni, vedere Creazione di una sottoscrizione push.
Nel Sottoscrittore, eseguire sp_addmergepushsubscription_agent. Specificare @subscriber, @subscriber_db, @publicatione le credenziali di Windows utilizzate per eseguire l'agente di merge nel Sottoscrittore per @job_name e @password. Specificare i parametri di sincronizzazione, descritti sopra in dettaglio, che definiscono la pianificazione per il processo agente di merge che sincronizza la sottoscrizione.
Utilizzo di RMO (Replication Management Objects)
La replica utilizza SQL Server Agent per pianificare i processi per attività che vengono svolte periodicamente, ad esempio la generazione di snapshot e la sincronizzazione delle sottoscrizioni. È possibile utilizzare gli oggetti RMO (Replication Management Objects) a livello di programmazione per specificare le pianificazioni per i processi dell'agente di replica.
Nota
Quando si crea una sottoscrizione e si specifica un valore false per CreateSyncAgentByDefault (comportamento predefinito per le sottoscrizioni pull), il processo dell'agente non viene creato e le proprietà di pianificazione vengono ignorate. In questo caso, la pianificazione della sincronizzazione deve essere determinata dall'applicazione. Per ulteriori informazioni, vedere Create a Pull Subscription e Create a Push Subscription.
Per definire una pianificazione dell'agente di replica quando si crea una sottoscrizione push di una pubblicazione transazionale
Creare un'istanza della classe TransSubscription per la sottoscrizione da creare. Per altre informazioni, vedere Creazione di una sottoscrizione push.
Prima di chiamare Create, impostare uno o più dei seguenti campi della proprietà AgentSchedule :
FrequencyType : tipo di frequenza (ad esempio giornaliera o settimanale) utilizzata per la pianificazione dell'agente.
FrequencyInterval - il giorno della settimana in cui un agente viene eseguito.
FrequencyRelativeInterval : settimana di un determinato mese in cui è pianificata l'esecuzione mensile dell'agente.
FrequencyRecurrenceFactor - il numero di unità di tipo frequenza che si verificano tra sincronizzazioni.
FrequencySubDay : unità della frequenza quando l'agente viene eseguito più di una volta al giorno.
FrequencySubDayInterval : numero di unità della frequenza tra un'esecuzione e l'altra quando l'agente viene eseguito più di una volta al giorno.
ActiveStartTime : ora di un determinato giorno in cui un agente viene avviato per la prima volta.
ActiveEndTime : ora di un determinato giorno in cui un agente viene avviato per l'ultima volta.
ActiveStartDate : primo giorno di applicazione della pianificazione dell'agente.
ActiveEndDate : ultimo giorno di applicazione della pianificazione dell'agente.
Nota
Se una di queste proprietà viene omessa, viene impostato un valore predefinito.
Chiamare il metodo Create per creare la sottoscrizione.
Per definire una pianificazione dell'agente di replica quando si crea una sottoscrizione di pull di una pubblicazione transazionale
Creare un'istanza della classe TransPullSubscription per la sottoscrizione da creare. Per ulteriori informazioni, vedere Creazione di una sottoscrizione di pull.
Prima di chiamare Create, impostare uno o più dei seguenti campi della proprietà AgentSchedule :
FrequencyType : tipo di frequenza (ad esempio giornaliera o settimanale) utilizzata per la pianificazione dell'agente.
FrequencyInterval - il giorno della settimana in cui un agente viene eseguito.
FrequencyRelativeInterval - la settimana di un determinato mese in cui è pianificata l'esecuzione mensile dell'agente.
FrequencyRecurrenceFactor - il numero di unità di tipo frequenza che si verificano tra sincronizzazioni.
FrequencySubDay : unità della frequenza quando l'agente viene eseguito più di una volta al giorno.
FrequencySubDayInterval : numero di unità della frequenza tra un'esecuzione e l'altra quando l'agente viene eseguito più di una volta al giorno.
ActiveStartTime : ora di un determinato giorno in cui un agente viene avviato per la prima volta.
ActiveEndTime : ora di un determinato giorno in cui un agente viene avviato per l'ultima volta.
ActiveStartDate : primo giorno di applicazione della pianificazione dell'agente.
ActiveEndDate : ultimo giorno di applicazione della pianificazione dell'agente.
Nota
Se una di queste proprietà viene omessa, viene impostato un valore predefinito.
Chiamare il metodo Create per creare la sottoscrizione.
Per definire una pianificazione dell'agente di replica quando si crea una sottoscrizione pull di una pubblicazione di tipo merge
Creare un'istanza della classe MergePullSubscription per la sottoscrizione da creare. Per ulteriori informazioni, vedere Creazione di una sottoscrizione di pull.
Prima di chiamare Create, impostare uno o più dei seguenti campi della proprietà AgentSchedule :
FrequencyType : tipo di frequenza (ad esempio giornaliera o settimanale) utilizzata per la pianificazione dell'agente.
FrequencyInterval - il giorno della settimana in cui viene eseguito un agente.
FrequencyRelativeInterval : settimana di un determinato mese in cui è pianificata l'esecuzione mensile dell'agente.
FrequencyRecurrenceFactor - il numero di unità di tipo frequenza che si verificano tra le sincronizzazioni.
FrequencySubDay - unità di frequenza quando l'agente viene eseguito più di una volta al giorno.
FrequencySubDayInterval : numero di unità della frequenza tra un'esecuzione e l'altra quando l'agente viene eseguito più di una volta al giorno.
ActiveStartTime : ora di un determinato giorno in cui un agente viene avviato per la prima volta.
ActiveEndTime : ora di un determinato giorno in cui un agente viene avviato per l'ultima volta.
ActiveStartDate - primo giorno in cui il programma dell'agente entra in vigore.
ActiveEndDate : ultimo giorno di applicazione della pianificazione dell'agente.
Nota
Se una di queste proprietà viene omessa, viene impostato un valore predefinito.
Chiamare il metodo Create per creare la sottoscrizione.
Per definire una pianificazione dell'agente di replica quando si crea una sottoscrizione push di una pubblicazione di tipo merge
Creare un'istanza della classe MergeSubscription per la sottoscrizione da creare. Per altre informazioni, vedere Creazione di una sottoscrizione push.
Prima di chiamare Create, impostare uno o più dei seguenti campi della proprietà AgentSchedule :
FrequencyType : tipo di frequenza (ad esempio giornaliera o settimanale) utilizzata per la pianificazione dell'agente.
FrequencyInterval - il giorno della settimana in cui un agente viene eseguito.
FrequencyRelativeInterval - la settimana di un determinato mese in cui è pianificata l'esecuzione mensile dell'agente.
FrequencyRecurrenceFactor - il numero di unità di tipo frequenza che si verificano tra sincronizzazioni.
FrequencySubDay : unità della frequenza quando l'agente viene eseguito più di una volta al giorno.
FrequencySubDayInterval : numero di unità della frequenza tra un'esecuzione e l'altra quando l'agente viene eseguito più di una volta al giorno.
ActiveStartTime : ora di un determinato giorno in cui un agente viene avviato per la prima volta.
ActiveEndTime : ora di un determinato giorno in cui un agente viene avviato per l'ultima volta.
ActiveStartDate : primo giorno di applicazione della pianificazione dell'agente.
ActiveEndDate : ultimo giorno di applicazione della pianificazione dell'agente.
Nota
Se una di queste proprietà viene omessa, viene impostato un valore predefinito.
Chiamare il metodo Create per creare la sottoscrizione.
Esempio (RMO)
In questo esempio viene creata una sottoscrizione push di una pubblicazione di tipo merge e viene specificata la pianificazione per la sincronizzazione di tale sottoscrizione.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2022Replica";
string publicationDbName = "AdventureWorks2022";
string hostname = @"adventure-works\garrett1";
//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
// 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 = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"
Dim hostname As String = "adventure-works\garrett1"
'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
' 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